我最近一直在阅读关于asm.js和WebAssembly的文章:
http://ejohn.org/blog/asmjs-javascript-compile-target/
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
我仍然对以下几件事感到困惑:
发布于 2015-07-19 15:26:58
asm.js代码是否及时编译并运行?汇编成什么?
asm.js是常规的javascript代码,JS解释器一如既往地将其编译成字节码。然而,具有asm支持的解释器应该提前编译,并且可能会因为静态类型而生成更高效的代码表示。详情请参见http://asmjs.org/。
asm和wasm之间有什么区别(除了文本和二进制之外)?
暂时没有。wasm应该是向后兼容的,可编译为asm (它同样可以作为普通JS执行)。但是,随着对它的支持的增加,将来可能会用更多特征来扩展它。
这对运行在浏览器中的其他脚本语言意味着什么?
相反,后者需要解释,因为Python仍然需要解释。当然,不需要解释器的脚本语言可以直接编译为(w)asm,因为有一个编译器(链)支持它作为目标。
发布于 2015-08-13 15:02:08
asm.js是带有“高度优化”指令的JS的子集。基本上,您可以声明类型(int、float),js引擎(在浏览器中,但也在node.js引擎中)将更快地执行指令。如果你的应用程序与WebGL一起使用的话,它会带来很多的计算或图形效果。
web程序集是JS的二进制格式,所有JS都是JS,而不仅仅是asm.js。它不是字节码,它是解析器计算的AST的二进制编码。它有两大好处:
我们已经可以为不是JS的浏览器编写代码了: EMSCripten可以用JS代码编译c++代码。其他转译编译器已经可以将您的代码编译成JS。使用asm.js,当它做数学运算时,代码可以运行得更快。使用web程序集,代码将更加紧凑,浏览器将能够更快地处理它(因为它将能够跳过解析)。您不会有像DirectX、JavaApplets、Flash或Silverlight这样的新插件,因为一切都会在JS沙箱中运行。
发布于 2015-07-20 06:37:45
asm.js代码是否及时编译并运行?汇编成什么?
不同的浏览器以不同的方式编译asm.js代码。截至2015年8月:
除了asm.js是文本和wasm (web程序集)是二进制的,2之间有什么区别?
asm.js只是JavaScript,因此必须严格按照JavaScript规范行事。作为一种新的标准,WebAssembly能够修复一些JavaScript行为并不理想的情况(从性能或编译的角度来看) [3.]。在未来[4.]中,WebAssembly将能够添加本来很难用JavaScript表示的特性。
这对运行在浏览器中的其他脚本语言意味着什么?以python为例,它会成为
在v.1中,在浏览器中运行Python的最简单方法是将Python解释器编译为wasm,正如您所说的。这意味着,例如,Python运行在wasm代码中,并手动管理wasm线性内存。已经有一个实验项目将asm.js后端添加到PyPy [5](http://www.rfk.id.au/blog/entry/pypy-js-poc-jit/)中。目前,它遇到了asm.js的限制,可以通过动态链接未来特征来解决这一问题。进一步说,with寻求同时提供GC集成和JIT编译支持,这两者都将允许与Web平台进行更高效、更自然的集成。
https://stackoverflow.com/questions/31502563
复制相似问题