WebAssembly,能够做为任何编程语言的编译目标,使应用程序能够运行在浏览器或其它代理中——浏览器里运行其余语言的程序?

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

几年前,咱们在InfoQ上讨论过面向Web的通用字节码的优势(见《讨论:咱们是否须要一种通用的Web字节码?》),归纳了建立这样一种格式的困难。其中说起的一个主要问题是主要的浏览器制造商没法达成一致:Mozilla在推asm.js,谷歌支持PNaCI,苹果在开发FLTJIT,而微软没有对其中的任何一种表示出兴趣。但如今,状况已经发生了变化。全部四个主要的浏览器供应商一致赞成建立一种面向Web的二进制格式WebAssembly或WASM/wasm。有人将其称为字节码,但wasm不是传统意义上的字节码,Brendan Eich指出:“WebAssembly其实是一个通过压缩的AST编码,而不是一堆字节码。小声点,不要告诉任何人。若是愿意,你仍是能够称它为字节码。”java

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

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

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

紧跟着JavaScript的第二十个生日宣布,而且是在Ecma宣布ES6规范获最终批准的当天,WebAssembly对JavaScript而言可不是一个好消息。WASM将使得使用任何可以编译成WASM的语言编写Web代码成为可能, 
JavaScript将直接与其它语言竞争。咱们是否能够期待Java或C#编译成WASM呢?web

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

 

Efficient and fast

The wasm stack machine is designed to be encoded in a size- and load-time-efficient binary format. WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms.后端

Safe

WebAssembly describes a memory-safe, sandboxed execution environment that may even be implemented inside existing JavaScript virtual machines. When embedded in the web, WebAssembly will enforce the same-origin and permissions security policies of the browser.浏览器

Open and debuggable

WebAssembly is designed to be pretty-printed in atextual format for debugging, testing, experimenting, optimizing, learning, teaching, and writing programs by hand. The textual format will be used whenviewing the source of wasm modules on the web.安全

Part of the open web platform

WebAssembly is designed to maintain the versionless, feature-tested, and backwards-compatible nature of the web. WebAssembly modules will be able to call into and out of the JavaScript context and access browser functionality through the same Web APIs accessible from JavaScript. WebAssembly also supports non-webembeddings.

 

摘自:http://webassembly.org/

相关文章
相关标签/搜索