首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asm.js和WebAssembly有什么区别?

asm.js和WebAssembly有什么区别?
EN

Stack Overflow用户
提问于 2015-07-19 15:00:44
回答 3查看 34.4K关注 0票数 115

我最近一直在阅读关于asm.js和WebAssembly的文章:

http://ejohn.org/blog/asmjs-javascript-compile-target/

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

我仍然对以下几件事感到困惑:

  1. asm.js代码是否及时编译并运行?汇编成什么?
  2. 除了asm.js是文本和wasm (web程序集)是二进制的,2之间有什么区别?
  3. 这对运行在浏览器中的其他脚本语言意味着什么?以python为例,它将是吗?
    • 编译成wasm的python代码?或
    • python解释器(Cpython)被编译为wasm并解释python?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-19 15:26:58

asm.js代码是否及时编译并运行?汇编成什么?

asm.js是常规的javascript代码,JS解释器一如既往地将其编译成字节码。然而,具有asm支持的解释器应该提前编译,并且可能会因为静态类型而生成更高效的代码表示。详情请参见http://asmjs.org/

asm和wasm之间有什么区别(除了文本和二进制之外)?

暂时没有。wasm应该是向后兼容的,可编译为asm (它同样可以作为普通JS执行)。但是,随着对它的支持的增加,将来可能会用更多特征来扩展它。

这对运行在浏览器中的其他脚本语言意味着什么?

相反,后者需要解释,因为Python仍然需要解释。当然,不需要解释器的脚本语言可以直接编译为(w)asm,因为有一个编译器(链)支持它作为目标。

票数 59
EN

Stack Overflow用户

发布于 2015-08-13 15:02:08

asm.js是带有“高度优化”指令的JS的子集。基本上,您可以声明类型(int、float),js引擎(在浏览器中,但也在node.js引擎中)将更快地执行指令。如果你的应用程序与WebGL一起使用的话,它会带来很多的计算或图形效果。

web程序集是JS的二进制格式,所有JS都是JS,而不仅仅是asm.js。它不是字节码,它是解析器计算的AST的二进制编码。它有两大好处:

  • JS引擎可以跳过解析步骤。
  • 它比JS的原始源代码要紧凑得多

我们已经可以为不是JS的浏览器编写代码了: EMSCripten可以用JS代码编译c++代码。其他转译编译器已经可以将您的代码编译成JS。使用asm.js,当它做数学运算时,代码可以运行得更快。使用web程序集,代码将更加紧凑,浏览器将能够更快地处理它(因为它将能够跳过解析)。您不会有像DirectX、JavaApplets、Flash或Silverlight这样的新插件,因为一切都会在JS沙箱中运行。

票数 56
EN

Stack Overflow用户

发布于 2015-07-20 06:37:45

asm.js代码是否及时编译并运行?汇编成什么?

不同的浏览器以不同的方式编译asm.js代码。截至2015年8月:

  • 火狐将asm.js编译成机器代码(并为同一asm.js的未来负载缓存机器代码) [1]。
  • 在作为试验标志的Windows 10中,Edge还将对asm.js [2]进行提前验证和编译。
  • Chrome特别识别asm.js开头的“使用asm”指令,以便更热切地解析和分析代码,并调整编译启发式。
  • Safari不对asm.js进行特殊处理。

除了asm.js是文本和wasm (web程序集)是二进制的,2之间有什么区别?

asm.js只是JavaScript,因此必须严格按照JavaScript规范行事。作为一种新的标准,WebAssembly能够修复一些JavaScript行为并不理想的情况(从性能或编译的角度来看) [3.]。在未来[4.]中,WebAssembly将能够添加本来很难用JavaScript表示的特性。

这对运行在浏览器中的其他脚本语言意味着什么?以python为例,它会成为

  • 编译成wasm的python代码?或
  • python解释器(Cpython)被编译为wasm并解释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平台进行更高效、更自然的集成。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31502563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档