心得和例子已被整合到工程wasm-usage-guide中。
当下,wasm 已被大多浏览器实现,其设计很巧妙,理论上任何可以编译成 LLVM 字节码的语言都可以被编译到 wasm (借助 llc 和 binary ),在这个项目中,我对几种编译方式进行了实践并总结出了一些心得:
- TypeScript: 现在有一个叫AssemblyScript的项目在做,借助 Binaryen,已经可以跑通一些例子了。
- C++ without Emscripten:直接用 clang 的前端编译到 LLVM 的 bc,然后 llc 编译到汇编文件 s,再用 Binaryen 的工具 s2wasm 从汇编文件编译到 wasm 的 ast 文件 wast,最后用 wasm-as 编译到 wasm。
- Rust without Emscripten:用 rustc 通过编译选项编译到 LLVM 的 bc,剩下的和 CPP 一样。
- C++ with Emscripten: 用 Emscripten 的 emcc 进行编译,附送一个 runtime,实现了很多实用的方法,挺有用的,推荐使用。
- Rust with Emscripten:rustc 的 nightly 版本现在支持一个 targetwasm32-unknown-emscripten,可以借助 emscripten 直接编译出一个 runtime 的 js 和 wasm,但似乎 emcc 自身的 arguments 传不过去...看着用吧。
有兴趣的话,可以直接 clone 下来研究,写的都很全了。
如有疏忽请指出。