WebAssembly被运行在一个浏览器中,提供了理想的安全性、速度和可移植性。
安全性,因为它不能直接访问“主机”浏览器。
具有底层代码的速度
通过系统能力实现可移植性
WASM经常在以下领域被使用:
Serverless
Blockchain:Ethereum 2.0
IoT
Games
什么是WebAssembly?
官方定义:WebAssembly(缩写为Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm被设计为编程语言的可移植编译目标,支持在web上部署客户端和服务器应用程序。
这个定义简化为:一个二进制代码,可以在浏览器中运行,具有高性能。
这个定义有点恶作剧,WebAssembly不仅可以在浏览器中运行,它还可以在运行时中运行,就像Node.js一样,提供了良好的性能和安全性。
什么是wasmtime?
要在浏览器中运行WebAssembly代码,需要一个名为wasmtime的运行时。wasmtime是Bytecode联盟的一个项目,它支持WebAssembly作为命令行工具或库在另一个项目中运行。
从理论上讲,基于WebAssembly的本质,它不能访问“主机”和来自系统的API,这就是WASI出现的地方。
什么是WASI?
安装wasmtime
curl https://wasmtime.dev/install.sh -sSf | bash
rustup target add wasm32-wasi
如果一切正常,现在可以将Rust项目与目标编译为wasm32-wasi。
cargo new wasmtime-example
fn main() {
println!("Hello, wasmtime!");
}
cargo build --target wasm32-wasi
编译后的模块位于target/wasm32-wasi/debug目录中,其名称与项目名称相同。
wasmtime target/wasm32-wasi/debug/wasmtime-example.wasm
Hello, wasmtime!