#wasm-component #wasi #wasm-module #wasm-binary #adapter #system-interface

wasi-preview1-component-adapter-provider

嵌入式 wasi-preview1-component-adapter 二进制文件

3 个稳定版本

24.0.0 2024 年 8 月 20 日
23.0.2 2024 年 8 月 12 日
23.0.1 2024 年 7 月 22 日

730WebAssembly

Download history 126/week @ 2024-07-17 71/week @ 2024-07-24 466/week @ 2024-07-31 534/week @ 2024-08-07 3123/week @ 2024-08-14

4,272 每月下载量
用于 4 个 Crates(3 个直接使用)

Apache-2.0 WITH LLVM-exception

45KB

wasi-preview1-component-adapter-provider

一个 字节码联盟 项目

一个实用库,包含用于从 Rust 中轻松使用的 WASI Preview1 适配器的二进制文件。

Crates.io version Download docs.rs docs

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])。

无运行时依赖