Javascript asm.js和WebAssembly之间有什么区别?
我最近一直在阅读有关asm.js和WebAssembly的内容: 我仍然对一些事情感到困惑:Javascript asm.js和WebAssembly之间有什么区别?,javascript,asm.js,webassembly,Javascript,Asm.js,Webassembly,我最近一直在阅读有关asm.js和WebAssembly的内容: 我仍然对一些事情感到困惑: asm.js代码是否及时编译并运行?编译成什么 除了asm.js是文本和wasm(web程序集)是二进制之外,这两个版本之间有什么区别 这对于在浏览器中运行的其他脚本语言意味着什么?以python为例,它会是 编译为wasm的python代码?或 python解释器(Cpython)编译成wasm并解释python asm.js代码是否及时编译并运行?编译成什么 js是常规javascript代
- 编译为wasm的python代码?或
- python解释器(Cpython)编译成wasm并解释python
- Firefox将asm.js编译为机器代码(并缓存机器代码以备将来加载相同的asm.js)[]
- 在Windows 10中,作为一个实验标志,Edge还将对asm.js[]进行一些提前验证和编译
- Chrome特别认可asm.js开头的“use asm”指令,以便更急切地解析和分析代码,并调整编译试探法
- Safari不对asm.js进行特殊处理
- 编译为wasm的python代码?或
- python解释器(Cpython)编译成wasm并解释python
在v.1中,在浏览器中运行Python的最简单方法是将Python解释器编译成wasm,如您所说。这意味着,例如,Python GC在wasm代码中运行,并手动管理wasm线性内存。已经有一个实验项目将asm.js后端添加到PyPy[](这对wasm同样有效)。目前,它遇到了asm.js的限制,wasm的应用程序可以解决这些限制。更进一步说,wasm寻求提供两者,并且两者都将允许与Web平台进行更高效、更自然的集成。asm.js是js的一个子集,具有“高度优化”的指令。基本上,您可以声明类型(int,float),js引擎(在浏览器中也是node.js引擎)将更快地执行指令。如果您的应用程序与WebGL一起使用时进行大量计算或图形处理,那么它会带来好处 web assembly是一种二进制格式,适用于JS、所有JS,而不仅仅是asm.JS。它不是字节码,而是解析器计算的AST的二进制编码。它有两大好处:
- JS引擎可以跳过解析步骤
- 它比JS原始源代码要紧凑得多
你不会有像DirectX、JavaApplets、Flash或Silverlight这样的新插件来加载,因为一切都将在JS沙盒中运行 跳过解析?慢点,好了。在可预见的未来,硬件支持是不可能实现的。你的意思是解析成为了asm.js的瓶颈,wasm用一种高效的二进制格式解决了这个问题。您使用asm.js/wasm的理由似乎有点简约,但这没关系。指出字节码的道具!=AST。@克里斯蒂安,WASM不是JS的二进制格式。它将使用与JS相同的web API,但它比JS更具可移植性和通用性。JS或字节码的唯一二进制格式是在浏览器中实现的格式,如Firefox的here:CoupleNotes。你的答案的第一部分似乎有点模棱两可;听起来像是说asm.js会将AOT编译成“更高效的字节码”。实际上,实现不必以字节码为目标,事实上,许多实现直接以本机和AOT为目标(这是一个关键点)。您还可以说“可编译为asm和js”。您可能想澄清一下,您的意思是说“本机程序集”或其他什么。或者你的意思是“asm.js和js”,但这并没有太大帮助,因为其中一个是另一个的子集。@tne:谢谢你的反馈,我希望我能解决问题-请随意(建议)编辑你自己,我将不胜感激。对,我在使用“更高效的字节码”时有点松懈