自 2024 年 5 月发布上一版更新后,轻量级 WebAssembly 解释器 Wasmi 历经数月打磨,终于正式发布 1.0 稳定版。这个版本不仅清理了历史弃用 API,承诺未来接口稳定性,也标志着 Wasmi 在功能、性能、安全性上的成熟,可广泛应用于 IoT 设备、插件系统、云宿主、智能合约乃至游戏主机等场景。
1.0 的意义:API 与能力全面成熟
- API 稳定承诺:1.0 起不再保留旧版弃用接口,开发者可放心升级。
- 面向嵌入式场景:低内存占用、可预测 执行、可与宿主良好集成,是嵌入式与资源受限环境的高性价比 Wasm Runtime。
支持的全新 Wasm 提案
自 2024 年 5 月以来,Wasmi 紧跟 Wasm 生态推进,完成多项提案实现:
- multi-memory:单模块多线性内存,实现用途隔离。
- memory64:支持 64 位寻址,突破 4GB 内存上限。
- custom-page-sizes:最小 1 字节页尺寸,适配超小型设备。
- simd / relaxed-simd:提供 128 位 SIMD 指令(可选启用),加速计算密集型任务。
- wide-arithmetic:新增 128 位
add/sub/mul运算,利于大整数应用。 - tail-call、extended-const 等 Wasm 3.0 提案:提前支持未来标准。
凭借这些更新,Wasmi 已完整覆盖 Wasm 2.0,甚至领先实现多项 Wasm 3.0 能力。
引擎优化:性能与内存双提升
- 内部重构:翻译引擎、字节码、执行循环经过大量清理与重写,执行效率和内存占用显著改善。
- M2 Pro 基准测试:Coremark 等测试均显示较旧版本有稳定收益,尽管仍沿用 2024 年引入的解释器架构。
安全与可靠性提升
- 安全审计:Stellar Development Foundation 赞助 Runtime Verification 对 Wasmi 进行全面审计,发现的问题已全部修复。
- 模糊测试体系:
translate:持续翻译随机 Wasm 数据,查找翻译器缺陷。execute:以多输入执行 Wasm,挖掘执行引擎 Bug。differential:与其它 Runtime(如 Wasmtime)对比执行,捕捉语义差异。
- OSS-Fuzz + Wast Testsuite:接入 Google OSS-Fuzz,并维护独立 Wast 测试集,覆盖 Wasmi 特有场景。
- 依赖收缩:外部依赖从 7 个降至 2 个(
spin、wasmparser),计划未来以自研wasmi_parse完全替换,进一步降低供应链风险。
新特性:从 C-API 到可续航 Fuel
- C-API 绑定:通过
wasmi_c_api_impl,任何可调用 C 的语言都能直接集成 Wasmi。官方还计划借助 PyO3 提供 Python 绑定。 - Refueled Resumable Calls:燃料耗尽时可暂停执行,稍后补充 Fuel 后继续,方便调度并发 Wasm 任务。
- 易用性提升:
Module::new/new_unchecked在启用watfeature 后可直接加载 WAT。- API 设计进一步贴近 Wasmtime,降低迁移成本。
- 新增低层级
Instance::new、官方 Usage Guide、Hash/BTree 可选等功能。 - 修复了在宿主函数内部编译新模块会死锁的问题。
展望:Wasmi 2.0 与 Wasm 3.0 全面兼容
- 下一代解释器:2.0 将聚焦性能,提供多种指令派发模式(直接/间接 threaded dispatch、loop-match 等),并计划结合 Rust
become关键字、#[loop_match]属性(待稳定)进一步提升效率。 - Wasm 3.0 支持:目前尚缺
function-references、exception-handling、gc三项提案,待新引擎落地后将优先补齐。
如何体验 Wasmi 1.0
- 作为库依赖:
cargo add wasmi - CLI:
cargo install wasmi_cli - C 语言接口:参考官方 C-API README
- Wasmer Backend:开启 Wasmer 的
wasmifeature - 或直接使用已集成 Wasmi 的项目