从 ASM.JS 到 WebAssembly

jopen 6年前

JS 成为 Web 的 WebAssembly,这已经是老生常谈的话题。不过,JS 是一种很便携的语法,并且是很安全的机器语言。今天,我很高兴地宣布,在 WebAssembly 上可以进行跨浏览器的工作。

WebAssembly 是什么

WebAssembly, 缩写为“wasm”,.wasm 为文件名后缀,是一种新的用于低端安全代码的二进制语法。它最初与 asm.js 合作,不过从长远来看,为了更好地向多源编程语言的通用目标等级格式提供服务,WebAssembly会从 JS 的语义中分离。

为通过 JS 支持 wasm 的 polyfilling,wasm 和 asm 保持体面的间隔是至关重要的。甚至是 JS 和 asm.js 共享内存线程和 SIMD 支持也是相当重要的。可能长期发散的例子:零成本异常,动态链接,call/cc。是的,我们的目标是开发 Web 多编程语言目标文件格式。

为什么asm.js 是很不错的,但是引擎一旦为它优化,解析器就会成为一个热锅 —— 会让移动设备变得很烫。传输压缩是必要的,而且能节省带宽,但是要在解析之前解压。第二个考虑因素:JS 存在一些尴尬的角落,甚至是在 asm.js 集合中。最后,一旦浏览器支持本地 WebAssembly 语法,JS 和 wasm 就会分离,不会因为编译器使用了一些完全不同的编程语言就会引入一些不安全或者不合适的特性到 JS 中。

请查看 FAQ 获取更多的细节信息。不,JS 在可见的未来里是不会消失的。是的,wasm 可以不用侍奉两个主人来缓解 JS。这是一个双赢的计划。

怎么样:如果你使用 Emscripten,然后 wasm 会通过一个命令行标志首先支持原型 polyfill。但是作为本地 wasm 解码器出现在引擎顶部(请查看 V8 本地原型解码器),Emscripten 将会自动配置以获得最佳的效果。另一个原型:一个 JS AST 压缩器(编码器)。

是谁: 一个 W3C 社区团体,WebAssembly CG 对所有人开放。正如你在 github 日志上看到的,WebAssembly 是 Google、Microsoft、Mozilla 和其他几个公司共同努力的结果。我很抱歉,这项工作在一开始是通过私有库完成的,但是,这只是临时措施,用来使这几家公司达成共识,从而能让这些公司有更 长远的合作。

你可以看到,Google PNaCl 团队的 JF Bastien 只能勉强守住秘密。

从 ASM.JS 到 WebAssembly

来 自 Google PNaCl 团队和 V8 团队的人,来自 Microsoft 的核心人员,以及来自 Mozilla 的 asm.js 和 Emscripten 的大师,这些人紧密地合作,直到每个人都看到了曙光,这真是一件振奋人心的事情。我在这里尤其要感谢 Google 的 JF BastienK. Gadd 和 Ben Titzer;Mozilla 的 Dan Gohman;来自 Microsoft 的 Abhijith Chatra 和 Michael Holman;asm.js 和 Emscripten 的 Alon Zakai;做 JavaScriptCore/WebKit 的 Filip Pizlo;尤其是 asm.js/OdinMonkey 的策划 Luke Wagner

Via :Brendan Eich's Blog