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/

相關文章
相關標籤/搜索