3个不稳定版本
0.18.0 | 2021年7月20日 |
---|---|
0.18.0-pre.1 | 2021年7月9日 |
0.17.1 | 2020年10月28日 |
#217 in WebAssembly
13,600 每月下载量
在 2 个组件中使用(通过 near-vm-runner)
1MB
19K SLoC
Wasmer运行时
Wasmer是一个独立的JIT WebAssembly运行时,旨在与Emscripten、Rust和Go完全兼容。 了解更多。
该组件代表高级运行时API,使将WebAssembly嵌入您的应用程序变得简单、高效和安全。
如何使用Wasmer运行时
最简单的方法是使用 instantiate
函数创建一个 Instance
。然后您可以使用 call
或 func
然后使用 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
包是为了支持多个编译器后端而构建的。我们支持在 Cranelift 后端中使用 wasmer-clif-backend
包,在 LLVM 后端中使用 wasmer-llvm-backend
包,以及在使用 Singlepass 后端中使用 wasmer-singlepass-backend
包。目前,Cranelift 后端是默认的。
您可以使用 compile_with
函数指定希望使用的编译器。
依赖关系
~7–15MB
~216K SLoC