自 3 月份 上次 WebAssembly 里程碑 以来,我们在 WebAssembly 社区小组 中一直在努力定义标准,并在各自的浏览器中实现该标准。
我很高兴地宣布,我们现在有了二进制格式的发布候选版本,并且在主干 SpiderMonkey 和 V8 中已经有了兼容的实现,在 Chakra 和 JavaScriptCore 中也正在积极进行工作。我们已经达到了这个重要的里程碑,现在我们希望从社区获得更广泛的反馈,特别是那些一直在等待事情稳定下来后再尝试的人。
在这个“浏览器预览”期间,WebAssembly 仍然会在一个标志后面,并且至少会有一次计划好的更改,将 二进制版本 重置为 1,我们希望它永远保持在那里。从设计上来说,这意味着现在没有人应该尝试在生产环境中使用 WebAssembly 二进制文件。但是,假设没有发现需要大量时间才能解决的问题,WebAssembly 社区小组希望在 2017 年第一季度将标准的初始版本标记为“完成”,这将使浏览器能够开始在没有标志的情况下发布 WebAssembly。就我们而言,在 Firefox 中,这个绿灯信号意味着将在 Firefox 52(2017 年 3 月)中发布 WebAssembly。
自上次里程碑以来有什么新变化?
如果你一直在关注开发进展,自 3 月份上次里程碑以来已经取得了很多进展
- 在 WebAssembly 设计 和 规范 代码库中,数百个问题被提出并得到解决。
- 二进制格式进行了三次跨浏览器和跨工具链同步迭代。
- 对 JS WebAssembly API 进行了重大扩展,现在允许开发人员显式请求 并行编译、机器代码缓存和代码共享、动态链接(最终还有 流式编译)。
- 在 Mozilla 方面,WebAssembly 在 Firefox 中的完整实现(除了 boogs1,2),包括扩展 JIT 编译器后端以在 32 位上支持 i64 以及完整的 IEEE 754 浮点转换运算符 套件。
- WebAssembly 编译器管道的进展和优化,包括上游 WebAssembly LLVM 后端 和 Binaryen。
经过所有这些努力,我们还可以获得经典 Emscripten 内部测量 的一些初始数据,比较端到端的 asm.js 与 WebAssembly [在 64 位 Firefox 52(Nightly)、Intel Core i7-2600 @ 3.40GHz、Linux 上测量]
我们在这里看到的加速是由于 Binaryen 优化、浏览器优化和 WebAssembly 公开的新硬件功能的结合。整个管道的优化仍在进行中,因此结果有望在发布之前得到改善(理解并修复了像 Bullet 中的轻微减速这样的异常 更新 11/21:通过最近的 Binaryen 优化 修复)。但即使现在,我们也可以看到 WebAssembly 已经有了明显的改进,即使对于已经从 asm.js 优化 中获益的 Firefox 用户来说也是如此。
此外,强调新的 WebAssembly 操作的计算内核可以显示出更大的加速。例如,使用与上述相同的实验设置,一个 64 位整数算术内核 在 asm.js 中比原生速度慢 8.93 倍,因为它是使用 32 位 JS 操作进行模拟的,而在 WebAssembly 中,它只比原生速度慢 1.13 倍。
试用一下
要试用 WebAssembly,请访问 webassembly.org,其中包含有关 使用 Emscripten 编译 WebAssembly 模块,然后 从 JavaScript 加载和运行 WebAssembly 模块 的说明。
由于这仍然是相当前沿的技术,因此有一些注意事项适用
首先,重申以上内容:在标准被标记为完成并在浏览器中启用 WebAssembly 之前,事情会一直变化(然后它将回到不要破坏网络的常态!)。为了帮助将更改传达给社区,我们将把过去或计划的更改发布到我们的 路线图 页面。使用 Nightly 构建进行测试也是一个好主意。
其次,完整的 WebAssembly “规范” 目前散布在 设计 代码库中的各种 Markdown 文件中,一些细节(如验证规则)只存在于 参考解释器 中。在浏览器预览期间,我们将收集这些分散的片段,并在 规范 代码库中编写一个单一的、连贯的规范。
最后,虽然你现在可以在 Firefox 的调试器源代码视图中看到 WebAssembly 文本格式的渲染,但完整的调试器还没有开始工作(尽管我们 即将完成!)。在此期间,实验者将需要使用传统的printf
调试方法。
除了这些注意事项之外,我们已经看到很多激动人心的实验,我们希望在未来几个月看到更多。根据你的反馈是否与总体设计、参考解释器或特定浏览器实现有关,有许多地方可以提供反馈;我们已经收集了 反馈链接列表 在 webassembly.org 上。祝你编程愉快!
关于 Luke Wagner
Luke Wagner 是 Mozilla 的软件工程师,并在 Firefox 中开发 JavaScript 和 WebAssembly。
5 条评论