编译TypeScript、C++和Rust到WebAssembly

少女dtysky

世界Skill

时刻2017.12.31

心得和例子已被整合到工程wasm-usage-guide中。

当下,wasm已被大多浏览器实现,其设计很巧妙,理论上任何可以编译成LLVM字节码的语言都可以被编译到wasm(借助llc和binary),在这个项目中,我对几种编译方式进行了实践并总结出了一些心得:

  1. TypeScript: 现在有一个叫AssemblyScript的项目在做,借助Binaryen,已经可以跑通一些例子了。
  2. C++ without Emscripten:直接用clang的前端编译到LLVM的bc,然后llc编译到汇编文件s,再用Binaryen的工具s2wasm从汇编文件编译到wasm的ast文件wast,最后用wasm-as编译到wasm。
  3. Rust without Emscripten:用rustc通过编译选项编译到LLVM的bc,剩下的和CPP一样。
  4. C++ with Emscripten: 用Emscripten的emcc进行编译,附送一个runtime,实现了很多实用的方法,挺有用的,推荐使用。
  5. Rust with Emscripten:rustc的nightly版本现在支持一个targetwasm32-unknown-emscripten,可以借助emscripten直接编译出一个runtime的js和wasm,但似乎emcc自身的arguments传不过去...看着用吧。

有兴趣的话,可以直接clone下来研究,写的都很全了。

如有疏忽请指出。

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。