转载

WebAssembly:面向Web的通用二进制和文本格式

Mozilla、谷歌、微软和苹果已经决定开发一种面向Web的二进制格式。该格式名为WebAssembly,可以作为任何编程语言的编译目标,使应用程序可以运行在浏览器或其它代理中。

几年前,我们在InfoQ上讨论过面向Web的通用字节码的优点(见《 讨论:我们是否需要一种通用的Web字节码? 》),概括了创建这样一种格式的困难。其中提及的一个主要问题是主要的浏览器制造商无法达成一致:Mozilla在推asm.js,谷歌支持PNaCI,苹果在开发 FLTJIT ,而微软没有对其中的任何一种表示出兴趣。但现在,情况已经发生了变化。所有四个主要的浏览器供应商一致同意创建一种面向Web的二进制格式 WebAssembly 或WASM/wasm。 有人将其称为字节码 ,但wasm不是传统意义上的字节码, Brendan Eich指出 :“WebAssembly实际上是一个经过压缩的AST编码,而不是一堆字节码。小声点,不要告诉任何人。如果愿意,你还是可以称它为字节码。”

迄今为止,这个项目一直是秘密进行的,但现在,它已经在 GitHub 上和 W3C社区组 里公开。WebAssembly的初衷是,让使用JavaScript之外的语言编写的程序可以运行在服务器、移动或IoT设备上的浏览器和其它JS代理中。这种格式最终将取代asm.js和PNaCI。根据项目 设计文档 (尚未最终确定),WASM使用二进制是因为它“可以提供更高的效率:它减少了下载文件大小,并加快了解码速度,因此,即使很大的代码库也可以快速启动。”WASM有一个相对应的文本格式,可以供调试器或其它面向开发者的工具使用。这些工具应该能够从一种格式转换成另外一种格式,而且不会丢失信息。

WebAssembly实现工作已经迈出了一个临时的第一步:将该格式转换成相应的asm.js代码,那样,它就可以运行在支持asm.js的浏览器上:Firefox、Edge、Chrome。已经有一个以此为目的构建的 polyfill原型 ,初步结果显示,压缩后的二进制格式比asm.js压缩后要小20-30%,wasm解码速度比解析相应的asm.js源代码要快大约23倍。WASM稍后将获得浏览器VM的原生支持。

WebAssembly将首先把C/C++程序带给Web,但稍后会通过增强实现对其它任何语言的支持。一个LLVM后端和clang移植已经在计划上。WASM将运行在“和JavaScript相同的语义空间”,支持从/到JavaScript的异步调用,访问所有的浏览器API,并且遵循JavaScript程序所遵循的安全策略。客户端应用程序可以完全用WASM编写,也可以用WASM实现业务逻辑,而用HTML/CSS/JavaScript实现UI。

紧跟着JavaScript的第二十个生日宣布,并且是在 Ecma宣布ES6规范获最终批准 的当天,WebAssembly对JavaScript而言可不是一个好消息。WASM将使得使用任何能够编译成WASM的语言编写Web代码成为可能,

JavaScript将直接与其它语言竞争。我们是否可以期待Java或C#编译成WASM呢?

WebAssembly将从开发asm.js和PNaCI的经验教训中获益,因为创建它的团队中包含了来自Mozilla和谷歌的团队。而微软和苹果的支持使它成为了一个非常有前途的项目。剩下的唯一问题是时间:通常,由多个大型公司共同开发的项目需要花费大量的时间。在这种情况下,标准化过程非常缓慢。

查看英文原文:WebAssembly: A Universal Binary and Text Format for the Web

正文到此结束
Loading...