1 个不稳定版本

0.18.0 2024 年 4 月 27 日

#379 in WebAssembly

Download history 157/week @ 2024-04-21 47/week @ 2024-04-28 103/week @ 2024-05-05 190/week @ 2024-05-12 208/week @ 2024-05-19 203/week @ 2024-05-26 135/week @ 2024-06-02 82/week @ 2024-06-09 67/week @ 2024-06-16 43/week @ 2024-06-23 43/week @ 2024-06-30 14/week @ 2024-07-07 59/week @ 2024-07-14 37/week @ 2024-07-21 40/week @ 2024-07-28

160 每月下载量
用于 unc-vm-runner

MIT 许可证

1MB
19K SLoC

Wasmer logo

Build Status License Join the Wasmer Community Number of downloads from crates.io Read our API documentation

Wasmer 运行时

Wasmer 是一个独立的 JIT WebAssembly 运行时,旨在与 Emscripten、Rust 和 Go 完全兼容。 了解更多

此 crate 表示高级运行时 API,使将 WebAssembly 嵌入您的应用程序变得简单、高效和安全。

如何使用 Wasmer 运行时

最简单的方法是使用 instantiate 函数创建一个 Instance。然后您可以使用 callfunc,然后 call 调用一个导出函数以安全地调用。

示例

给定此 WebAssembly

(module
  (type $t0 (func (param i32) (result i32)))
  (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32)
    get_local $p0
    i32.const 1
    i32.add))

编译成 Wasm 字节码,我们可以调用导出的 add_one 函数

static WASM: &'static [u8] = &[
    // The module above compiled to bytecode goes here.
    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
    0x01, 0x7f, 0x01, 0x7f, 0x03, 0x02, 0x01, 0x00, 0x07, 0x0b, 0x01, 0x07,
    0x61, 0x64, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x00, 0x00, 0x0a, 0x09, 0x01,
    0x07, 0x00, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x0b, 0x00, 0x1a, 0x04, 0x6e,
    0x61, 0x6d, 0x65, 0x01, 0x0a, 0x01, 0x00, 0x07, 0x61, 0x64, 0x64, 0x5f,
    0x6f, 0x6e, 0x65, 0x02, 0x07, 0x01, 0x00, 0x01, 0x00, 0x02, 0x70, 0x30,
];

use wasmer_runtime::{
    instantiate,
    DynFunc,
    Value,
    imports,
    error,
};

fn main() -> error::Result<()> {
    // We're not importing anything, so make an empty import object.
    let import_object = imports! {};

    let instance = instantiate(WASM, &import_object)?;

    let values = instance
        .exports
        .get::<DynFunc>("add_one")?
        .call(&[Value::I32(42)])?;

    assert_eq!(values[0], Value::I32(43));
    
    Ok(())
}

附加说明

wasmer-runtime crate 是构建以支持多个编译器后端。我们在 Cranelift 后端中支持 wasmer-clif-backend crate、在 wasmer-llvm-backend crate 中的 LLVM 后端,以及在 wasmer-singlepass-backend crate 中的 Singlepass 后端。目前,Cranelift 后端是默认的。

您可以使用 compile_with 函数指定要使用的编译器。

依赖项

~7–15MB
~217K SLoC