52 个版本 (重大变更)
0.36.0 | 2024 年 7 月 24 日 |
---|---|
0.34.0 | 2024 年 7 月 8 日 |
0.32.0-beta.8 |
|
0.32.0-beta.2 |
|
0.1.1 | 2018 年 3 月 24 日 |
#2 in WebAssembly
每月 388,058 次下载
用于 326 个 crate (直接使用 45 个)
2.5MB
55K SLoC
持续集成 | 测试覆盖率 | 文档 | 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 规范测试套件。
- 内置燃料计量支持。
- 支持官方 Wasm C-API。
用法
请参阅 Wasmi 使用指南,了解如何正确使用 Wasmi。
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 |
❌ | 不太可能得到支持。 |
tail-calls |
✅ | 自版本 0.28.0 起。(#683) |
extended-const |
✅ | 自版本 0.29.0 起。(#707) |
function-references |
📅 | 计划中但尚未实现。(#774) |
gc |
📅 | 计划中但尚未实现。(#775) |
multi-memory |
📅 | 计划中但尚未实现。(#776) |
threads |
📅 | 计划中但尚未实现。(#777) |
relaxed-simd |
❌ | 由于 simd 不太可能得到支持,因此不太可能得到支持。 |
component-model |
📅 | 计划中但尚未实现。(#897) |
exception-handling |
📅 | 计划中但尚未实现。(#1037) |
branch-hinting |
📅 | 计划中但尚未实现。(#1036) |
WASI | 👨🔬 | 通过 wasmi_wasi crate 提供 WASI (wasip1 ) 的实验性支持。 |
C-API | 👨🔬 | 通过 wasmi_c_api_impl crate 提供官方 Wasm C-API 的实验性支持。 |
开发
构建 & 测试
克隆 Wasmi 仓库并使用 cargo
构建
git clone https://github.com/wasmi-labs/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 维护者确保完全正常工作。
许可
以下任一许可下获得许可
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确声明,否则任何有意提交给工作并包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,都应按照上述方式进行双许可,不附加任何额外条款或条件。
依赖
~4MB
~71K SLoC