新型編譯器將原生代碼轉換為JavaScript
譯文導讀:Emscripten C/C++到JavaScript項目利用來自LLVM的后端構建起更具速度與針對性優(yōu)勢的編譯方案。
在當初剛剛公布時,Emsripten聽起來完全像是個沖勁十足的技術笑談:一款能夠將C/C++代碼轉換成Asm.js的編譯器,其處理成果能夠通過Web瀏覽器或者在Node.js框架中作為JavaScript子集加以運行。
然而事實證明這一切并非笑談。Emscripten與Asm.js(后者最初為Mozilla公司發(fā)起的一個研究項目)已經(jīng)自誕生之日起逐步發(fā)展,并最終取得了令人矚目的重大進展。***公布的技術成果是,Emscripten新版本利用來自LLVM的編譯器核心取代了原有機制——這項編譯器技術框架原本主要用于C/C++環(huán)境,但在理論上也能夠支持多種其它語言。
根據(jù)Emscripten項目的開發(fā)者們所言,轉而選擇LLVM給Emscripten帶來了多項全新優(yōu)勢。首先,整個編譯過程更加快捷——“通常能夠帶來四倍甚至更高的轉換效率提升,”他們指出,而且轉換所需要的內存容量也有所降低。此次更替還“避免了原有編譯器偶爾出現(xiàn)的不可預知的惡性拖慢現(xiàn)象。”更重要的是,LLVM后端允許Emscripten與LLVM自身以更為緊密的方式實現(xiàn)對接。
使用LLVM的惟一缺點在于,其必須經(jīng)過有針對性的重新編譯才能與Emscripten順利協(xié)作。LLVM的處理成果只能為我們提供上述優(yōu)勢當中的一部分,除非具備其它選項、否則很難將其充分發(fā)揮。
Asm.js仍然被普遍視為一種實驗性技術,目前能夠直接為其提供支持的也只有Mozilla火狐這一款瀏覽器。不過它的實際表現(xiàn)仍然令人印象深刻。就在最近,Asm.js成功將虛幻游戲引擎移植到了JavaScript環(huán)境之下,從而在無需任何插件或者非原生代碼配合的情況下使該平臺能夠直接運行在瀏覽器當中。
谷歌目前尚未最終決定是否為Asm.js提供全面支持,不過Chrome瀏覽器已經(jīng)確定將向由其生成的JavaScript應用敞開懷抱——雖然速度提升水平還遠無法與火狐相比肩。谷歌的計劃似乎是將Dart語言作為瀏覽器平臺的近原生代碼執(zhí)行速度提升方案,不過JavaScript的普及度以及靈活性至少就目前來看仍具備極為顯著的優(yōu)勢、Dart在短時間內恐怕很難取得競爭優(yōu)勢。
英文原文:http://www.infoworld.com/t/javascript/new-compiler-cranks-javascript-native-code-240923