首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
华为云
V2EX  ›  JavaScript

编译 TypeScript、C++和 Rust 到 WebAssembly

  •  
  •   dtysky · 295 天前 · 2703 次点击
    这是一个创建于 295 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    如有疏忽请指出。

    4 回复  |  直到 2018-01-01 13:47:47 +08:00
        1
    bramblex   295 天前 via iPhone
    好东西啊好东西,最后心疼一下 js
        2
    AngelCriss   295 天前 via Android
    @bramblex 又见 jj 的思念
        3
    zhouheyang0919   294 天前
    现在 Rust 的 nightly 版本有一个 target: wasm32-unknown-unknown 可以直接编译到 WebAssembly,不需要手动编译到 LLVM bitcode 或借助 emscripten.
        4
    dtysky   294 天前
    @zhouheyang0919
    嗯,昨儿有人提了个 issue,我早上加到说明里了

    Now, rustc supports another method to generate pure wasm file, please see here for resolution: [Rust for the Web]( https://www.hellorust.com/setup/wasm-target/):

    ```bash
    rustc --target wasm32-unknown-unknown yourCode.rs -o yourCode.wasm
    ```

    For reducing the size of file, your need to install **wasm-gc**:

    ```bash
    cargo install --git https://github.com/alexcrichton/wasm-gc
    wasm-gc yourCode.wasm small-yourCode.wasm
    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   959 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 17:40 · PVG 01:40 · LAX 10:40 · JFK 13:40
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1