1个稳定版本
1.0.0 | 2024年3月19日 |
---|
在 WebAssembly 类别中排名 475
每月下载量 1,334
在 6 个crate中使用(通过 radix-engine)
690KB
14K SLoC
radix-wasmi
radix-wasmi
是 wasmi-labs/wasmi 的分支,以下是一些更改:
- 为
Store
添加了Clone
derive。
持续集成 | 测试覆盖率 | 文档 | Crates.io |
---|---|---|---|
wasmi
- WebAssembly (Wasm) 解释器
wasmi
是一个高效且开销低的 WebAssembly 解释器,支持嵌入式环境,如 WebAssembly 本身。
在 Parity,我们使用 wasmi
作为基于 WebAssembly 的智能合约的执行引擎,在 Substrate 中。此外,我们运行 wasmi
在 Substrate 运行时中,它本身也是一个 WebAssembly 环境,并通过 Wasmtime 运行。因此,wasmi
的实现需要高度的正确性和与 Wasm 规范的一致性。
由于与 Wasmtime 等其他 Wasm 虚拟机相比,wasmi
相对轻量,因此它也是一个不错的初始原型设计选项。
独特功能
以下列出了一些 wasmi
的独特功能。
- 主要关注
- 正确且确定性的 WebAssembly 执行。
- 与 WebAssembly 规范的一致性。
- 可以将其编译为并执行通过 WebAssembly。
- 低开销和跨平台的 WebAssembly 运行时。
- 大致反映了 Wasmtime API,作为即插即用解决方案。
- 支持可恢复的函数调用。
WebAssembly 建议提案
新的 wasmi
引擎支持多种 WebAssembly 建议提案,并将支持更多提案。
WebAssembly 建议提案 | 状态 | 评论 |
---|---|---|
mutable-global |
✅ | |
saturating-float-to-int |
✅ | |
sign-extension |
✅ | |
multi-value |
✅ | |
reference-types |
⌛ | 计划实施,但尚未实施。优先级较低。 |
bulk-memory |
⌛ | 计划实施,但尚未实施。优先级较低。 |
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 许可证定义,都应作为上述双许可,没有其他条款或条件。
依赖关系
~1.5MB
~29K SLoC