3 个稳定版本
新 24.0.0 | 2024 年 8 月 20 日 |
---|---|
23.0.2 | 2024 年 8 月 12 日 |
23.0.1 | 2024 年 7 月 22 日 |
730 在 WebAssembly 中
4,272 每月下载量
用于 4 个 Crates(3 个直接使用)
45KB
wasi-preview1-component-adapter-provider
一个 字节码联盟 项目
一个实用库,包含用于从 Rust 中轻松使用的 WASI Preview1 适配器的二进制文件。
wasi-preview1-component-adapter-provider
包含 WASI Preview1 到 Preview2 适配器(Reactor、Command 和 Proxy)的原始字节。
例如,如果您想将适配器字节写回到一个 .wasm
二进制文件中
use wasi_preview1_component_adapter_provider::WASI_SNAPSHOT_PREVIEW1_REACTOR_ADAPTER;
fn main() {
std::fs::write(
"wasi_snapshot_preview1.reactor.wasm",
WASI_SNAPSHOT_PREVIEW1_REACTOR_ADAPTER
).expect("failed to write bytes to file");
}
一个更实际的用例是将现有的 WASI Preview1 组件转换为 WASI Preview2 组件的 适配 步骤
use wasi_preview1_component_adapter_provider::WASI_SNAPSHOT_PREVIEW1_REACTOR_ADAPTER;
use wit_component::ComponentEncoder;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let wasm_p1_bytes = std::fs::read("path/to/your/your-component.p1.wasm");
let wasm_p2_bytes = ComponentEncoder::default()
.module(&wasm_module_bytes)?
.adapter(
"wasi_snapshot_preview1",
WASI_SNAPSHOT_PREVIEW1_REACTOR_ADAPTER,
)?
.validate(true)
.encode()?;
std::fs::write("your-component.p2.wasm", wasm_p2_bytes)?;
Ok(())
}
什么是组件适配器?
根据 基础 WebAssembly 规范 编译成 WebAssembly 的代码被认为是 WebAssembly 的 "模块" 或 "核心模块"。
为了支持丰富的类型、组合和更容易的互操作性,创建了 组件模型,该模型是管理 "WebAssembly 组件" 概念的规范。组件模型封装了任何现有的 WebAssembly 核心模块并扩展了它们的功能。
为了标准化针对 WebAssembly 编译的代码中的底层系统互操作性(例如,读取文件、系统时间),创建了 WebAssembly 系统接口 ("WASI")。WASI 由语言工具链实现(例如,Rust 支持作为目标的 wasm32-wasi
/wasm32-wasip1
,并即将支持 wasm32-wasip2
),并使编译利用 组成 WASI Preview1 的接口 的 WebAssembly 组件成为可能。
在构建 WASI 的持续工作中,包含更多功能的 WASI Preview2 已经发布 — 但直接构建到 Preview2 还未集成到语言工具链中。然而,Preview1 组件(当前工具链可以生成)可以被 适配 到 WASI Preview2。
这就是组件适配器发挥作用的地方。
组件适配器是WebAssembly的二进制文件,包含可以将任何基于WASI Preview1实现的WebAssembly二进制文件转换为WASI Preview2的逻辑。
此crate包含适配器WebAssembly二进制文件的内容,以字节数组的形式公开(const &[u8]
)。