編譯TypeScript、C++和Rust到WebAssembly
02-09
心得和例子已被整合到工程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下來研究,寫的都很全了。
如有疏忽請指出。
推薦閱讀:
※【1-2】開發語言
※如何進一步熟悉甚至掌握Angular?
※為什麼 Angular 2 不採用 JSX?
※angular 和 typescript 到底是否適合最佳實踐?
※有哪些公司在使用或者準備使用Angular2?
TAG:前端开发 | WebAssembly | TypeScript |