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