編譯TypeScript、C++和Rust到WebAssembly

心得和例子已被整合到工程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下來研究,寫的都很全了。

如有疏忽請指出。

推薦閱讀:

【1-2】開發語言
如何進一步熟悉甚至掌握Angular?
為什麼 Angular 2 不採用 JSX?
angular 和 typescript 到底是否適合最佳實踐?
有哪些公司在使用或者準備使用Angular2?

TAG:前端开发 | WebAssembly | TypeScript |