尝试了一下wasmtime库,顺便了解一下编译wasm文件的过程。
说明一下,我在wsl平台上进行的以下尝试。此前出现过一些问题,主要是文件读写的权限,后面把权限打开了,按照wasmtime库的说明,基本上就顺利了。
具体的参考资料可以参阅:
https://github.com/bytecodealliance/wasmtime
几个步骤:以hello.rs文件为例
$ rustup target add wasm32-wasi
$ rustc hello.rs --target wasm32-wasi
$ wasmtime hello.wasm
两种方式:
1、二进制文件,main.rs
注意要进入到src文件夹下,否则可能找不到文件:
songroom@DESKTOP-MEDPUTU:~/wasm_test/wtime/src$ rustc main.rs --target wasm32-wasi
也可以在
cargo build --release --target=wasm32-wasi
这样,生成wasm文件的名字和路径有所不同。
具体main.rs编译成.wasm文件的执行:
在相应的目录下,
songroom@DESKTOP-MEDPUTU:~/wasm_test/wtime$ cd target/wasm32-wasi/release
songroom@DESKTOP-MEDPUTU:~/wasm_test/wtime/target/wasm32-wasi/release$ wasmtime wtime.wasm
Hello, world! my first wasm try!
add x:5 y:6 output :17
2、lib.rs
在wasm_test文件下,创建一个lib文件,wtime_lib,在lib.rs下补上相关代码。
同时,需要对cargo.toml文件进行设置:
执行:
cargo build --release --target=wasm32-wasi
具体如下:
`songroom@DESKTOP-MEDPUTU:~/wasm_test/wtime_lib$ cargo build --release --target=wasm32-wasi
warning: unused manifest key: build
Compiling wtime_lib v0.1.0 (/home/songroom/wasm_test/wtime_lib)
Finished release [optimized] target(s) in 0.52s`
你可以发现,在对应目录下,生成了.wasm文件。文件名为.toml文件中所设置。
这样,不管是二进制main.rs还是lib.rs,都可以生成相应的.wasm文件了。
同时,也可以进一步了解一下wasm文件和原生代码执行的效率比较。
songroom@DESKTOP-MEDPUTU:~/wasm_test/wtime/target/wasm32-wasi/release$ time wasmtime wtime.wasm
Hello, world! my first wasm try!
add x:5 y:6 output :17
real 0m0.013s
user 0m0.014s
sys 0m0.000s