5个版本 (重大变更)
0.5.0 | 2024年3月10日 |
---|---|
0.4.1 | 2024年1月24日 |
0.4.0 |
|
0.3.0 | 2023年1月16日 |
0.1.0 | 2022年10月13日 |
#183 in WebAssembly
203,940 每月下载量
用于 147 个crate(2个直接使用)
35KB
730 行
持续集成 | 测试覆盖率 | 文档 | Crates.io |
---|---|---|---|
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-unknown
或 wasm32-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
使用 translate
、instantiate
、execute
或 overhead
过滤器仅运行测试 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 目标编译时,我们强烈建议使用 Binaryen 的 wasm-opt
工具进行后优化 Wasmi,因为我们进行的实验表明,在 Wasmtime 下执行时,性能提高了 80-100%,并且 Wasm 二进制文件也稍微小一些。
许可证
根据您的选择,许可如下
- Apache 许可证 2.0 版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交供作品包含的任何贡献,将双授权,如上所述,无需附加条款或条件。