• 如何在浏览器之外运行WASM?
  • 发布于 2个月前
  • 227 热度
    0 评论
WebAssembly被运行在一个浏览器中,提供了理想的安全性、速度和可移植性。
1.安全性,因为它不能直接访问“主机”浏览器。
2.具有底层代码的速度
3.通过系统能力实现可移植性

WASM经常在以下领域被使用:
1. Serverless
2. Blockchain:Ethereum 2.0
3. IoT
4. Games

什么是WebAssembly?
官方定义:WebAssembly(缩写为Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm被设计为编程语言的可移植编译目标,支持在web上部署客户端和服务器应用程序。

这个定义简化为:一个二进制代码,可以在浏览器中运行,具有高性能。这个定义有点恶作剧,WebAssembly不仅可以在浏览器中运行,它还可以在运行时中运行,就像Node.js一样,提供了良好的性能和安全性。

什么是wasmtime?
要在浏览器中运行WebAssembly代码,需要一个名为wasmtime的运行时。wasmtime是Bytecode联盟的一个项目,它支持WebAssembly作为命令行工具或库在另一个项目中运行。从理论上讲,基于WebAssembly的本质,它不能访问“主机”和来自系统的API,这就是WASI出现的地方。

什么是WASI?
WASI代表WebAssembly系统接口,它是WebAssembly的通用系统级,使“主机”与运行时连接更容易。

安装wasmtime
在Linux发行版和macOS中,只需运行这个命令,按照步骤操作,安装就会很顺利。
curl https://wasmtime.dev/install.sh -sSf | bash
该项目维护C/C++和Rust的正式WASI。在这里,将使用Rust演示它是如何工作的。首先,我们添加wasm32-wasi来将Rust代码构建到WASM,并使其能够与wasmtime一起运行。
rustup target add wasm32-wasi
如果一切正常,现在可以将Rust项目与目标编译为wasm32-wasi。

新建一个Rust项目:
cargo new wasmtime-example
src/main.rs中的代码为:
fn main() {
    println!("Hello, wasmtime!");
}
执行以下命令编译:
cargo build --target wasm32-wasi
编译后的模块位于target/wasm32-wasi/debug目录中,其名称与项目名称相同。

执行以下命令运行:
wasmtime target/wasm32-wasi/debug/wasmtime-example.wasm
结果为:
Hello, wasmtime!

用户评论