#wasm-module #run-time #vm

无需 std linera-wasmer

高性能 WebAssembly 运行时

2 个版本

4.3.1-linera.22024年6月7日

WebAssembly 中排名第 52

Download history 305/week @ 2024-06-05 122/week @ 2024-06-12 45/week @ 2024-06-19 40/week @ 2024-06-26 46/week @ 2024-07-03 46/week @ 2024-07-10 58/week @ 2024-07-17 114/week @ 2024-07-24 77/week @ 2024-07-31 84/week @ 2024-08-07

每月下载量 344

MIT 许可证

1MB
25K SLoC

wasmer 构建状态 加入 Wasmer Slack MIT License crates.io

Wasmer 是最受欢迎的 Rust WebAssembly 运行时。它支持 JIT (即时) 和 AOT (提前) 编译,以及适合您需求的插件式编译器。

它被设计成安全且安全,可在任何环境中运行。

使用方法

以下是一个使用 Wasmer 运行使用其 WAT 格式(文本格式)编写的 WebAssembly 模块的简单示例

use wasmer::{Store, Module, Instance, Value, imports};

fn main() -> anyhow::Result<()> {
    let module_wat = r#"
    (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))
    "#;

    let mut store = Store::default();
    let module = Module::new(&store, &module_wat)?;
    // The module doesn't import anything, so we create an empty import object.
    let import_object = imports! {};
    let instance = Instance::new(&mut store, &module, &import_object)?;

    let add_one = instance.exports.get_function("add_one")?;
    let result = add_one.call(&mut store, &[Value::I32(42)])?;
    assert_eq!(result[0], Value::I32(43));

    Ok(())
}

发现完整的示例集合.

功能

Wasmer 不仅速度快,而且设计成可以 高度自定义

  • 可插拔编译器 — 引擎使用编译器将 WebAssembly 转换为可执行代码

  • 无头模式 — 一旦 WebAssembly 模块被编译,就可以将其序列化到文件中,例如,然后在开启无头模式的情况下使用 Wasmer 执行它。无头 Wasmer 没有编译器,这使得它更便携且加载更快。它非常适合受限的环境。

  • 交叉编译 — 大多数编译器支持交叉编译。这意味着可以预编译一个针对不同架构或平台的 WebAssembly 模块并序列化它,然后在目标架构和平台上运行。

  • 在 JavaScript 环境中运行 Wasmer — 使用 js Cargo 功能,可以将 Rust 程序编译成 WebAssembly。在这种情况下,生成的 WebAssembly 模块将期望在 JavaScript 环境中运行,例如浏览器、Node.js、Deno 等。在这个特定场景中,没有可用的引擎或编译器,将使用 JavaScript 环境中可用的引擎。

Wasmer 默认使用 Cranelift 编译器,非常适合开发目的。然而,我们强烈建议在生产中使用 LLVM 编译器,因为它大约快 50%,达到接近原生速度。

注意:如果需要同时使用多个编译器,这也是可能的!需要直接通过每个编译器包导入它们。

阅读 文档了解更多信息


由 Wasmer 团队用爱❤️制作,为社区服务

依赖项

~2–14MB
~196K SLoC