WebAssembly,可以作為任何編程語言的編譯目標,使應用程序可以運行在瀏覽器或其它代理中——瀏覽器里運行其他語言的程序?


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和谷歌的團隊。而微軟和蘋果的支持使它成為了一個非常有前途的項目。剩下的唯一問題是時間:通常,由多個大型公司共同開發的項目需要花費大量的時間。在這種情況下,標准化過程非常緩慢。

 

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM