谷歌自去年解散PNaCL/NaCI團隊后,今年三月在Chrome中添加了對WebAssembly的默認支持。谷歌已經正式宣布不再支持PNaCI,轉而支持WebAssembly。
在2013年的谷歌I/O大會上,谷歌宣布PNaCI是在其瀏覽器內運行本地代碼的解決方案。對于所有的平臺,它要求有一個LLVM位碼(bitcode),然后在運行Chrome的平臺上翻譯代碼并執行之。它承諾性能接近本地代碼的執行,允許老的或新的C/C++代碼在瀏覽器里安全地運行。雖然該技術正在實現其承諾,但其他瀏覽器供應商從未采用PNaCI,開發人員也沒有廣泛地接受它。用谷歌自己的話來說,PNaCI的采用率是“低到只能保證不被棄用”了。從2018年的第一季度開始,谷歌將不再支持PNaCI,除非是Chrome的應用和插件。
作為替換,谷歌現在在推動WebAssembly。WebAssembly有更多成功的機會,因為它被所有主流的瀏覽器供應商所接受,這其中包括蘋果、微軟和Mozilla。WebAssembly是一種標準化的二進制格式,編譯工具把本地應用編譯成這種格式以在瀏覽器上運行。它支持C和C++,同時也對Rust有初始的支持。因為它還沒有垃圾收集器,所以不支持像Java和C#這樣的語言,但是也許在未來會支持這類語言。
作為WebAssembly的成功案例,谷歌提到了其瀏覽器內置的視頻編輯器和在瀏覽器內的Unity引擎上運行的一款游戲。
Chrome和Firefox目前默認支持WebAssembly,而目前Edge和Safari還是處于預覽模式中。谷歌的路線圖包括添加對異步的編譯、asm.js、IndexedDB、線索、SIMD等等的支持。這個WebAssembly遷移指南說明了如何棄用PNaCI的功能,可以拿什么來替換。
查看英文原文: Google Is to Remove Support for PNaCl
感謝薛命燈對本文的審校。