1个不稳定版本
0.2.1 | 2023年10月18日 |
---|
#1335 在 WebAssembly
1,195 每月下载量
在 10 个crate中使用(通过 casper-wasmi)
93KB
2K SLoC
持续集成 | 测试覆盖率 | 文档 | Crates.io |
---|---|---|---|
casper-wasmi
- WebAssembly (Wasm) 解释器
wasmi
最初是作为parity-ethereum(在wasm中的类似以太坊的合约)和substrate的一个组件构思的。这些项目与区块链相关,需要高度的正确性。项目并不试图参与任何正在进行中的Wasm提议的实现。相反,项目试图尽可能接近规范,因此避免实现规范不支持的功能。
综上所述,wasmi
应该是一个良好的初始原型设计选项,并且在将来从wasmi
迁移到另一个规范兼容的执行引擎时不应有问题。
casper-wasmi
crate是包含额外修复和安全加固的wasmi项目的分支。
独特功能
以下列表说明了wasmi
的一些独特功能。
- 主要关注
- 正确且确定的WebAssembly执行。
- WebAssembly规范兼容性。
- 本身可以编译为WebAssembly。
- 低开销和跨平台的WebAssembly运行时。
- 新的实验性
v1
引擎允许作为Wasmtime的即插即用解决方案。
Wasm提议
新的wasmi_v1
引擎支持多种WebAssembly提议,并将在未来支持更多。
Wasm提议 | 状态 | 评论 |
---|---|---|
mutable-global |
✅ | |
saturating-float-to-int |
✅ | |
sign-extension |
✅ | |
multi-value |
✅ | |
reference-types |
❌ | 没有计划支持wasmi 。 |
bulk-memory |
⌛ | 计划中,但尚未实现。优先级低。 |
simd |
❌ | 没有计划支持wasmi 。 |
tail-calls |
⌛ | 尚未成为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
工作区
如果您想使用所有功能测试整个 wasmi
工作区,我们推荐这样做:
cargo test --all-features --workspace
此测试使用所有可用功能测试了 wasmi
引擎。
注意
建议使用 --release
进行测试,因为与优化编译和测试相比,不进行优化的编译和测试通常要慢得多。
平台
支持的平台主要是 Linux、MacOS、Windows 和 WebAssembly。
使用以下命令生成 WebAssembly 构建:
cargo build --no-default-features --target wasm32-unknown-unknown
功能
虚拟内存
在 64 位平台上,我们进一步提供跨平台的虚拟内存使用支持。对于此构建,使用 wasmi
的
cargo build --features virtual_memory
新引擎
我们目前正在构建一个实验性的新 wasmi
引擎,它反映了 Wasmtime API,与旧 wasmi
引擎相比,性能更好,开销更低。
您可以通过使用 wasmi_v1
工作区包来启用并开始使用它
cargo build --package wasmi_v1
注意
-
新的
v1
实现是实验性的,因此不建议用于生产环境。 -
请确保使用以下 Cargo 配置文件,以使用
v1
引擎获得最大性能[profile.release] lto = "fat" codegen-units = 1
基准测试
要基准测试 wasmi
,请使用以下命令:
cargo bench
注意:基准测试可以通过传递给 cargo bench
的 compile_and_validate
、instantiate
和 execute
标志进行筛选。例如,cargo bench execute
将仅执行测试 WebAssembly 执行性能的基准测试。
许可证
wasmi
主要根据 MIT 许可证和 APACHE 许可证(版本 2.0)的条款分发,任选其一。
有关详细信息,请参阅 LICENSE-APACHE
和 LICENSE-MIT
贡献
除非您明确说明,否则根据 APACHE 2.0 许可证定义,您提交给 wasmi
的任何有意贡献,都应按照上述方式双许可,不附加任何额外条款或条件。
依赖关系
~1–8.5MB
~64K SLoC