WebAssembly 浏览器预览

WebAssembly 是一种新的跨浏览器 Web 程序格式。您可以在 Lin Clark 的六部分系列文章 WebAssembly 动画介绍 中了解更多信息。与 JavaScript 不同,WebAssembly 是一种二进制格式,这意味着开发者需要新的工具来帮助理解和试验 WebAssembly。Mozilla 的 WebAssembly Explorer 就是这样的工具之一。

下面的视频演示了 WebAssembly Explorer 的基本功能,开发者可以使用它编写简单的 C 或 C++ 程序并将它们编译成 WebAssembly。

WebAssembly 和 WebAssembly Explorer 的一个优势是,开发者可以确切地看到对代码应用了哪些优化。例如,视频中的 WebAssembly 编译器能够使用 C 的类型信息自动在传统的除法和更有效的位移位快捷方式之间进行选择。使用 JavaScript 时,浏览器的 JIT 编译器最终可能会达到相同的优化效果,但没有保证。提前编译也避免了与机会性 JIT 编译器相关的概要分析和观察开销。

虽然 WebAssembly Explorer 是一个很好的学习工具,但它仍在早期开发阶段,目前还不适合复杂的程序。需要生产级编译器套件的开发者应该转向 Emscripten,它最初是用来输出 asm.js ,但现在已经扩展到生成 WebAssembly。

您可以在 GitHub 上找到 WebAssembly Explorer 的源代码,并且您可以在本周晚些时候 Firefox 52 发布时开始试验 WebAssembly。

关于 Dan Callahan

Mozilla 开发者关系工程师,前 Mozilla Persona 开发者。

更多 Dan Callahan 的文章...


5 条评论

  1. Rodolfo De Nadai

    太酷了!

    2017 年 3 月 7 日 上午 8:45

  2. Jj

    嗨,Dan,
    所以这意味着到达我机器上的代码与二进制软件一样好?

    看起来现在更难(过去是丑陋的 js)理解我运行的代码,我过去可以检查下载的 JS 片段并调试它以查看它在做什么的选项正在消失。

    是这样吗?

    2017 年 3 月 7 日 下午 3:42

    1. Dan Callahan

      嗨,Jj,

      使用 WebAssembly,到达您机器上的代码实际上是二进制软件。这确实会在检查和调试方面造成成本,但这些问题在 asm.js 或常见的缩减/丑化/捆绑工具链中也同样存在。

      就个人而言,我希望开源库能够采用可重复构建的实践,以便可以根据上游源代码验证二进制文件,并通过哈希锁定,但这确实会有限制。

      2017 年 3 月 8 日 上午 7:23

  3. Jeffrey

    WasmExplorer 如何将 C/C++ 翻译成 wast?它是否以某种方式使用 Clang 和 LLVM 后端或其他东西?

    2017 年 3 月 30 日 上午 8:29

    1. Dan Callahan

      是的。现在它只是将代码 POST 到运行 Clang 的后端服务。

      2017 年 3 月 31 日 下午 2:31

本文的评论已关闭。