标签:wasm

最简单的Rust+WASM

最近想写点东西,先写web版,要是跑得好的话再做app版。思来想去Rust应该是最能胜任这个任务:可以port到WASM,跑在web上,也可以port到iOS/Android,性能也非常好。

Rust做WASM有很多方法,官方也有教程介绍如何做。可惜的是这种写法比较底层,只适合学习,而且没有开发模式的热更新,对于快速出原型来说开发效率不高。找了一下最简单的方法应该是用一个叫stdweb的包,非常简单。

首先你要已经装了rustup,记得升级一下。

$ rustup update

加入wasm的target

$ rustup target add wasm32-unknown-unknown

新建项目

$ cargo new mywasm

打开Cargo.toml,加入stdweb依赖:

[package]
name = "mywasm"
version = "0.1.0"
authors = ["Chifung Cheung <chifung.cheung@gmail.com>"]
edition = "2018"

[dependencies]
stdweb = "0.4.13"</code></pre>

打开src/main.rs,加入

#[macro_use]
extern crate stdweb;

fn main() {
    stdweb::initialize();

    let message = "Hello, 世界!";
    js! {
        console.log( @{message} );
    }

    stdweb::event_loop();
}

回到项目底下,开跑:

$ cargo web start --target=wasm32-unknown-unknown

编译完了打开http://localhost:8000,应该就能看到alert了。stdweb支持热更新,虽然体感有点慢就是。