從 ASM.JS 到 WebAssembly
JS 成為 Web 的 WebAssembly,這已經是老生常談的話題。不過,JS 是一種很便攜的語法,并且是很安全的機器語言。今天,我很高興地宣布,在 WebAssembly 上可以進行跨瀏覽器的工作。
WebAssembly 是什么:
WebAssembly, 縮寫為“wasm”,.wasm 為文件名后綴,是一種新的用于低端安全代碼的二進制語法。它最初與 asm.js 合作,不過從長遠來看,為了更好地向多源編程語言的通用目標等級格式提供服務,WebAssembly會從 JS 的語義中分離。
為通過 JS 支持 wasm 的 polyfilling,wasm 和 asm 保持體面的間隔是至關重要的。甚至是 JS 和 asm.js 共享內存線程和 SIMD 支持也是相當重要的。可能長期發散的例子:零成本異常,動態鏈接,call/cc。是的,我們的目標是開發 Web 多編程語言目標文件格式。
為什么:asm.js 是很不錯的,但是引擎一旦為它優化,解析器就會成為一個熱鍋 —— 會讓移動設備變得很燙。傳輸壓縮是必要的,而且能節省帶寬,但是要在解析之前解壓。第二個考慮因素:JS 存在一些尷尬的角落,甚至是在 asm.js 集合中。最后,一旦瀏覽器支持本地 WebAssembly 語法,JS 和 wasm 就會分離,不會因為編譯器使用了一些完全不同的編程語言就會引入一些不安全或者不合適的特性到 JS 中。
請查看 FAQ 獲取更多的細節信息。不,JS 在可見的未來里是不會消失的。是的,wasm 可以不用侍奉兩個主人來緩解 JS。這是一個雙贏的計劃。
怎么樣:如果你使用 Emscripten,然后 wasm 會通過一個命令行標志首先支持原型 polyfill。但是作為本地 wasm 解碼器出現在引擎頂部(請查看 V8 本地原型解碼器),Emscripten 將會自動配置以獲得最佳的效果。另一個原型:一個 JS AST 壓縮器(編碼器)。
是誰: 一個 W3C 社區團體,WebAssembly CG 對所有人開放。正如你在 github 日志上看到的,WebAssembly 是 Google、Microsoft、Mozilla 和其他幾個公司共同努力的結果。我很抱歉,這項工作在一開始是通過私有庫完成的,但是,這只是臨時措施,用來使這幾家公司達成共識,從而能讓這些公司有更 長遠的合作。
你可以看到,Google PNaCl 團隊的 JF Bastien 只能勉強守住秘密。
來 自 Google PNaCl 團隊和 V8 團隊的人,來自 Microsoft 的核心人員,以及來自 Mozilla 的 asm.js 和 Emscripten 的大師,這些人緊密地合作,直到每個人都看到了曙光,這真是一件振奮人心的事情。我在這里尤其要感謝 Google 的 JF Bastien,K. Gadd 和 Ben Titzer;Mozilla 的 Dan Gohman;來自 Microsoft 的 Abhijith Chatra 和 Michael Holman;asm.js 和 Emscripten 的 Alon Zakai;做 JavaScriptCore/WebKit 的 Filip Pizlo;尤其是 asm.js/OdinMonkey 的策劃 Luke Wagner。
Via :Brendan Eich's Blog