1个稳定版本
1.0.0 | 2024年3月19日 |
---|
167 在 WebAssembly 中排名
1,346 每月下载量
在 7 个crate中使用(通过 radix-wasmi)
32KB
715 行
radix-wasmi
radix-wasmi
是 wasmi-labs/wasmi 的分支,具有以下更改
- 为
Store
添加了Clone
derive。
持续集成 | 测试覆盖率 | 文档 | Crates.io |
---|---|---|---|
wasmi
- WebAssembly (Wasm) 解释器
wasmi
是一个高效且开销低的 WebAssembly 解释器,支持嵌入式环境,如 WebAssembly 本身。
在 Parity,我们使用 wasmi
作为基于 WebAssembly 的智能合约的执行引擎,在 Substrate 中。此外,我们当时在 Substrate 运行时中运行 wasmi
,这是一个 WebAssembly 环境,并通过 Wasmtime 驱动。因此,wasmi
的实现需要高度的准确性和符合 Wasm 规范。
由于与 Wasmtime 等其他 Wasm 虚拟机相比,wasmi
相对较轻,因此它也是一个不错的初始原型设计选项。
独特功能
以下列表说明了 wasmi
的某些独特功能。
- 主要关注
- 正确且确定的 WebAssembly 执行。
- 符合 WebAssembly 规范。
- 可以自身编译并通过 WebAssembly 执行。
- 低开销和跨平台的 WebAssembly 运行时。
- 与 Wasmtime API 稍有相似之处,可作为直接替换方案。
- 支持可恢复的函数调用。
WebAssembly 提案
新的 wasmi
引擎支持各种 WebAssembly 提案,并将支持更多提案。
WebAssembly 提案 | 状态 | 评论 |
---|---|---|
可变全局变量 |
✅ | |
饱和浮点转整数 |
✅ | |
符号扩展 |
✅ | |
多值 |
✅ | |
引用类型 |
⌛ | 计划中但尚未实现。优先级低。 |
批量内存 |
⌛ | 计划中但尚未实现。优先级低。 |
simd |
❌ | 未计划支持 wasmi 。 |
尾调用 |
⌛ | 尚未成为 Wasm 标准,但在 wasmi 中计划支持。优先级低。 |
构建中
从我们的官方仓库克隆 wasmi
,然后使用标准的 cargo
程序进行构建
git clone https://github.com/paritytech/wasmi.git
cd wasmi
cargo build
测试
为了测试 wasmi
,您需要使用以下命令初始化和更新 Git 子模块
git submodule update --init --recursive
或者,您可以在克隆仓库时提供 --recursive
标志给 git clone
命令
git clone https://github.com/paritytech/wasmi.git ---recursive
初始化和更新 Git 子模块后,您可以使用以下命令进行测试
cargo test --workspace
开发
在将 PR 推送到我们的仓库之前,我们希望您执行位于仓库根目录中的 scripts/run-local-ci.sh
脚本。
支持的平台
主要支持的平台是 Linux、MacOS、Windows 和 WebAssembly。
使用以下命令生成 WebAssembly 构建
cargo build --no-default-features --target wasm32-unknown-unknown
生产构建
为了从 wasmi
获得最佳性能,我们强烈建议使用以下 Cargo profile
编译 wasmi
crate。
[profile.release]
lto = "fat"
codegen-units = 1
当为 WebAssembly 目标编译时,我们强烈建议使用 Binaryen 的 wasm-opt
工具后优化 wasmi
,因为我们的实验表明,在 Wasmtime 下执行时,性能提高了 80-100%,并且 Wasm 二进制文件也略有减小。
基准测试
要基准测试 wasmi
,请使用以下命令
cargo bench
注意:可以通过给 cargo bench
提供的 compile_and_validate
、instantiate
和 execute
标志来过滤基准测试。例如,cargo bench execute
将仅执行测试 WebAssembly 执行性能的基准测试。
许可
wasmi
主要在 MIT 许可证和 APACHE 许可证(版本 2.0)的条款下分发,任选其一。
请参阅 LICENSE-APACHE
和 LICENSE-MIT
了解详细信息。
贡献
除非您明确声明,否则您提交给 wasmi
的任何贡献,根据 APACHE 2.0 许可证定义,均应作为上述双重许可,没有任何附加条款或条件。