#host #wasmer #define #wasmtime #compatible #function #wasm

uptown_funk

定义与 Wasmer 和 Wasmtime 兼容的主机函数

3 个版本

0.1.3 2021 年 4 月 8 日
0.1.2 2021 年 3 月 1 日
0.1.1 2021 年 1 月 26 日

#1903Rust 模式

Apache-2.0/MIT

21KB
647

uptown_funk 是一个 crate,允许您优雅地定义与 Wasmtime 和 Wasmer 运行时兼容的 Wasm 主机函数。

它包含一个宏和一些结构体/特质,允许您将 Wasm 原始类型转换为高级 Rust 类型,反之亦然。

让我们通过一个使用 uptown_funk 的主机函数定义示例来看看。

#[host_functions(namespace = "wasi_snapshot_preview1")]
impl WasiState {
    async fn fd_pread(&mut self, fd: u32, iovs: &mut [IoSliceMut<'_>], offset: Filesize) -> (Status, u32) {
        // ...
    }

    // .. Other functions depending on the WasiState struct.
}

host_function 宏允许我们捕获任何主机端结构体并将其用作 Wasm 实例的状态。我们不必处理从 WebAssembly 客户端传递的低级指针+长度,我们可以 假装 收到高级 Rust 类型(例如 &mut [IoSliceMut<'_>]),宏将为我们创建适当的包装器。当然,它与 Lunatic 上的 async 函数正确协同工作。

依赖项

~1.3–5.5MB
~108K SLoC