Emscripten是Mozilla的开发人员Alon Zakai所开发的一个独特LLVM后端,可以将LLVM中间码编译成JavaScript,大大简化了现有代码在Web时代的重用。
和Google Chrome尝试通过自有的Native Client在Web中利用现有C/C++库的方式不同,Mozilla寻求了一条普适性更强的解决方案。
Emscripten并非通常的LLVM后端,本身使用JavaScript写成。它可以将任何通过LLVM 前端(比如 C/C++ Clang)生成的LLVMIR中间码编译成JavaScript,从而显著降低移植现有代码库到Web环境的损耗。
目前Emscripten已经比较成熟,准备发布2.0版本。很多大型的项目已经可以使用Emscripten转换为JavaScript了,比如Python、Ruby、Lua和Doom。
根据今年5月份的演示中用Firefox的测试结果显示,通过Emscripten 1.0得出的JavaScript在未经优化的情况,在不同的测试中比gcc -O3的原始C/C++代码约慢了0.89到3.75 倍左右。Alon表示在使用了类型推测等优化后性能会有进一步提升。
Alon Zakai在LLVM邮件列表中关于Emscripten的说明。这里有一个使用Emscripten转换后的Bullet/WebGL物理引擎演示。