导读:Emscripten C/C++到JavaScript项目利用来自LLVM的后端构建起更具速度与针对性优势的编译方案。
在当初刚刚公布时,Emsripten听起来完全像是个冲劲十足的技术笑谈:一款能够将C/C++代码转换成Asm.js的编译器,其处理成果能够通过Web浏览器或者在Node.js框架中作为JavaScript子集加以运行。
然而事实证明这一切并非笑谈。Emscripten与Asm.js(后者最初为Mozilla公司发起的一个研究项目)已经自诞生之日起逐步发展,并最终取得了令人瞩目的重大进展。最新公布的技术成果是,Emscripten新版本利用来自LLVM的编译器核心取代了原有机制——这项编译器技术框架原本主要用于C/C++环境,但在理论上也能够支持多种其它语言。
根据Emscripten项目的开发者们所言,转而选择LLVM给Emscripten带来了多项全新优势。首先,整个编译过程更加快捷——“通常能够带来四倍甚至更高的转换效率提升,”他们指出,而且转换所需要的内存容量也有所降低。此次更替还“避免了原有编译器偶尔出现的不可预知的恶性拖慢现象。”更重要的是,LLVM后端允许Emscripten与LLVM自身以更为紧密的方式实现对接。
使用LLVM的惟一缺点在于,其必须经过有针对性的重新编译才能与Emscripten顺利协作。LLVM的处理成果只能为我们提供上述优势当中的一部分,除非具备其它选项、否则很难将其充分发挥。
Asm.js仍然被普遍视为一种实验性技术,目前能够直接为其提供支持的也只有Mozilla火狐这一款浏览器。不过它的实际表现仍然令人印象深刻。就在最近,Asm.js成功将虚幻游戏引擎移植到了JavaScript环境之下,从而在无需任何插件或者非原生代码配合的情况下使该平台能够直接运行在浏览器当中。
谷歌目前尚未最终决定是否为Asm.js提供全面支持,不过Chrome浏览器已经确定将向由其生成的JavaScript应用敞开怀抱——虽然速度提升水平还远无法与火狐相比肩。谷歌的计划似乎是将Dart语言作为浏览器平台的近原生代码执行速度提升方案,不过JavaScript的普及度以及灵活性至少就目前来看仍具备极为显著的优势、Dart在短时间内恐怕很难取得竞争优势。
原文转载:51CTO
英文原文:http://www.infoworld.com/t/javascript/new-compiler-cranks-javascript-native-code-240923