5个版本 (重大变更)

0.5.0 2024年3月10日
0.4.1 2024年1月24日
0.4.0 2023年1月31日
0.3.0 2023年1月16日
0.1.0 2022年10月13日

#183 in WebAssembly

Download history 41327/week @ 2024-03-14 50734/week @ 2024-03-21 45701/week @ 2024-03-28 53846/week @ 2024-04-04 58083/week @ 2024-04-11 54412/week @ 2024-04-18 42144/week @ 2024-04-25 42650/week @ 2024-05-02 39284/week @ 2024-05-09 47334/week @ 2024-05-16 55561/week @ 2024-05-23 55404/week @ 2024-05-30 44904/week @ 2024-06-06 53353/week @ 2024-06-13 54757/week @ 2024-06-20 41692/week @ 2024-06-27

203,940 每月下载量
用于 147 个crate(2个直接使用)

MIT/Apache

35KB
730

持续集成 测试覆盖率 文档 Crates.io
ci codecov docs crates

Wasmi - WebAssembly (Wasm) 解释器

Wasmi是一个高效且轻量级的WebAssembly解释器,专注于受限制和嵌入式系统。

版本 0.31.0 已由 SRLabs进行审计

公告:所有权转让

自2024年2月1日起,Wasmi项目的原始所有者和维护者,Parity Technologies,已正式将项目的所有权转让给我,Robin Freyler。有关此次转让的更多信息,请参阅此处

独特功能

以下列表列出了Wasmi的一些独特功能。

  • 简单、正确且确定的WebAssembly执行。
  • 低开销且跨平台的嵌入式环境WebAssembly运行时。
  • JIT炸弹抵抗的转换。
  • 松散地映射Wasmtime API
  • 100%符合WebAssembly规范测试套件。
  • 内置燃料计量支持。

WebAssembly提案

新的Wasmi引擎支持各种WebAssembly提案,并将支持更多的提案。

WebAssembly提案 状态 注释
mutable-global 自版本 0.14.0
saturating-float-to-int 自版本 0.14.0
sign-extension 自版本 0.14.0
multi-value 自版本 0.14.0
bulk-memory 自版本 0.24.0(#628)
reference-types 自版本 0.24.0(#635)
simd 可能不支持。
尾调用 自版本 0.28.0 起。(#683)
扩展常量 自版本 0.29.0 起。(#707)
函数引用 📅 计划中但尚未实现。(#774)
垃圾回收 📅 计划中但尚未实现。(#775)
多内存 📅 计划中但尚未实现。(#776)
线程 📅 计划中但尚未实现。(#777)
松散的SIMD 由于 simd 很可能不支持,因此不太可能支持。
组件模型 📅 计划中但尚未实现。(#897)
WASI 👨‍🔬 通过 wasmi_wasi crate 或 Wasmi CLI 应用程序提供实验性支持。

使用方法

作为 CLI 应用程序

安装最新的 Wasmi CLI 版本

cargo install wasmi_cli

运行 wasm32-unknown-unknownwasm32-wasi Wasm 二进制文件

wasmi_cli <WASM_FILE> --invoke <FUNC_NAME> [<FUNC_ARGS>]*

作为 Rust 库

请参阅 Wasmi crate 文档 了解如何将 Wasmi crate 用作库。

开发

构建 & 测试

克隆 Wasmi 仓库并使用 cargo 构建

git clone https://github.com/paritytech/wasmi.git --recursive
cd wasmi
cargo build
cargo test

基准测试

要基准测试 Wasmi,请使用以下命令

cargo bench

使用 translateinstantiateexecuteoverhead 过滤器仅运行测试 Wasm 翻译、实例化、执行或杂项开销的基准测试,例如 cargo bench execute

我们维护了每个提交到 master 的基准测试时间表,可以在 此处查看

支持的平台

Wasmi 支持广泛的架构和平台。

  • 更多详情请参阅此 支持的 Rust 平台列表
  • 注意: Wasmi 可以用于 no_std 嵌入式环境,因此不需要标准库(std)。
  • 只有一些平台在 CI 中进行了检查,并由 Wasmi 维护者保证完全工作。

生产构建

为了从 Wasmi 获得最佳性能,我们强烈建议使用以下 Cargo profile 构建 Wasmi crate

[profile.release]
lto = "fat"
codegen-units = 1

当为 WebAssembly 目标编译时,我们强烈建议使用 Binaryenwasm-opt 工具进行后优化 Wasmi,因为我们进行的实验表明,在 Wasmtime 下执行时,性能提高了 80-100%,并且 Wasm 二进制文件也稍微小一些。

许可证

根据您的选择,许可如下

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交供作品包含的任何贡献,将双授权,如上所述,无需附加条款或条件。

无运行时依赖

功能