Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript asm.js和WebAssembly之间有什么区别?_Javascript_Asm.js_Webassembly - Fatal编程技术网

Javascript 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代

我最近一直在阅读有关asm.js和WebAssembly的内容:

我仍然对一些事情感到困惑:

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

    js是常规javascript代码,js解释器一如既往地将其编译成字节码。然而,一个支持asm的解释器应该提前编译,并且可能因为静态类型而生成更有效的代码表示。有关详细信息,请参阅

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

    暂时没有。wasm应该是向后兼容的(这也可以像普通JS一样执行)。但是,随着对它的支持的增加,将来可能会扩展它

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

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

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

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

    • Firefox将asm.js编译为机器代码(并缓存机器代码以备将来加载相同的asm.js)[]
    • 在Windows 10中,作为一个实验标志,Edge还将对asm.js[]进行一些提前验证和编译
    • Chrome特别认可asm.js开头的“use asm”指令,以便更急切地解析和分析代码,并调整编译试探法
    • Safari不对asm.js进行特殊处理
    除了asm.js是文本和wasm(web程序集)是二进制之外,这两个版本之间有什么区别

    asm.js只是JavaScript,因此必须严格按照JavaScript规范进行操作。作为一个新标准,WebAssembly能够修复JavaScript行为不理想的一些极端情况(从性能或编译角度来看)[]。在未来[],WebAssembly将能够添加一些原本难以用JavaScript表达的功能

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

    • 编译为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原始源代码要紧凑得多
    <>我们已经可以为JS编写浏览器代码:EnScript可以在JS代码中编译C++代码。其他transcompiler已经可以将您的代码编译成JS。 使用asm.js,代码在计算时可以运行得更快。 使用web程序集,代码将更加紧凑,浏览器将能够更快地处理它(因为它将能够跳过解析)。
    你不会有像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:谢谢你的反馈,我希望我能解决问题-请随意(建议)编辑你自己,我将不胜感激。对,我在使用“更高效的字节码”时有点松懈