好吧,我希望我不会在这里打破一些垃圾邮件规则.我刚问了一个关于erlang编译器如何实现模式匹配的问题,我得到了一些很好的响应,其中一个是编译后的字节码(通过传递给c()指令的参数获得):
{function, match, 1, 2}.
{label,1}.
{func_info,{atom,match},{atom,match},1}.
{label,2}.
{test,is_tuple,{f,3},[{x,0}]}.
{test,test_arity,{f,3},[{x,0},2]}.
{get_tuple_element,{x,0},0,{x,1}}.
{test,is_eq_exact,{f,3},[{x,1},{atom,a}]}.
return.
{label,3}.
{badmatch,{x,0}}
Run Code Online (Sandbox Code Playgroud)
它只是简单的二郎元组.我期待一些神秘的二元东西,猜不是.所以我在这里冲动地问这个问题(我可以看一下编译器的来源但是问题总是会因为额外的洞察力而变得更好),这个输出如何在二进制级别翻译?
说{test,is_tuple,{f,3},[{x,0}]}的例子.我假设这是一条指令,称为'test'...无论如何,所以这个输出本质上是字节码级语言的AST,二进制编码只是1-1的翻译?这一切都是如此令人兴奋,我不知道我能否轻松地看到erlang编译器破坏了什么.
非常感谢
我正在构建一个通过HTTP接受请求的JSON-RPC服务器.我想支持双向通信(客户端和服务器都可以发送请求),具体用例是发布/订阅架构,客户端发送subscribe(X)请求并changed(X)(几乎)实时接收请求.据我所知,有几种方法可以通过HTTP实现这一点:
我正在寻找的是一种基于公认的互联网标准(如果可能)的解决方案,可以从网络浏览器使用,并且易于在客户端使用.到目前为止,我赞成流式传输(Twitter,CouchDB这样做),但我不确定它在浏览器和JSON-RPC库中的支持程度.此外,还有其他方法可以做到,我不知道.
先感谢您.