关于webassembly:WebAssembly-与-rust

3次阅读

共计 1176 个字符,预计需要花费 3 分钟才能阅读完成。

Rust 对于 WebAssembly 的反对是最为欠缺的。毕竟 Mozilla 当初开发 rust 是很大一部分为了编写 Servo(浏览器渲染引擎)。

此外咱们介绍的 wasmer 和 wasmtime 两个 wasm 运行时,也是应用 rust 编写的。

对于应用 rust 编写 wasm 模块以及 rust 程序代码中应用 wasm 模块,这里不再具体讲述。之前的文章中,很多举例都是基于 rust 实现。

明天咱们次要看看 rust 对于 wasi 的反对。如果是纯内存运算,并不能体现出 wasi 的伟大意义 – 能够平安,高性能地与主机 os 交互(file, socket 等)。

明天咱们一个简略的 demo,演示一下。

1:创立 rust 我的项目

$ cargo new --bin wasi_hello_world

2: 编写 main.rs

use std::io::prelude::*;
use std::fs;

fn main() {println!("Hello world!");

  let mut file = fs::File::create("/helloworld/helloworld.txt").unwrap();

  write!(file, "Hello world!n").unwrap();}

代码非常简单,会在 /helloworld 门路下创立一个 helloworld.txt 文件, 而后写入 Hello world! 内容。

3:编译代码为 wasm

cargo build --release --target wasm32-wasi 

   Compiling wasi_hello_world v0.1.0 (/Users/iyacontrol/rust/wasi_hello_world)
    Finished release [optimized] target(s) in 1.63s

当然如果你之前没有装置过 wasm32-wasi target,须要首先执行:

rustup target add wasm32-wasi

编译胜利,在target/wasm32-wasi/release/ 目录下 生成 wasi_hello_world.wasm

4:运行

要授予应用 Wasmtime CLI 写入目录的性能,咱们须要应用 –mapdir 标记。–mapdir 容许咱们将客户机的虚构文件系统上的 /helloworld 目录映射到主机文件系统上的当前目录。

wasmtime --mapdir /helloworld::. target/wasm32-wasi/release/wasi_hello_world.wasm
Hello world!

同时,在当前目录生成了一个 helloworld.txt 文件。

总结

不过 目前来看,整个 wasi 都不够残缺成熟。包含对 wasi 反对最好的 rust。

WASI 仍在疾速成长,并且有许多我的项目正在利用 WASI 来做乏味的事件!

将来边缘计算以及 serverless,都少不了 wasi 的身影。

正文完
 0