Skip to main content

One post tagged with "Wasmi"

View All Tags

原文链接:Wasmi 1.0 — WebAssembly Interpreter Stable At Last

自 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 年引入的解释器架构。

安全与可靠性提升

  1. 安全审计:Stellar Development Foundation 赞助 Runtime Verification 对 Wasmi 进行全面审计,发现的问题已全部修复。
  2. 模糊测试体系
    • translate:持续翻译随机 Wasm 数据,查找翻译器缺陷。
    • execute:以多输入执行 Wasm,挖掘执行引擎 Bug。
    • differential:与其它 Runtime(如 Wasmtime)对比执行,捕捉语义差异。
  3. OSS-Fuzz + Wast Testsuite:接入 Google OSS-Fuzz,并维护独立 Wast 测试集,覆盖 Wasmi 特有场景。
  4. 依赖收缩:外部依赖从 7 个降至 2 个(spinwasmparser),计划未来以自研 wasmi_parse 完全替换,进一步降低供应链风险。

新特性:从 C-API 到可续航 Fuel

  • C-API 绑定:通过 wasmi_c_api_impl,任何可调用 C 的语言都能直接集成 Wasmi。官方还计划借助 PyO3 提供 Python 绑定。
  • Refueled Resumable Calls:燃料耗尽时可暂停执行,稍后补充 Fuel 后继续,方便调度并发 Wasm 任务。
  • 易用性提升
    • Module::new / new_unchecked 在启用 wat feature 后可直接加载 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-referencesexception-handlinggc 三项提案,待新引擎落地后将优先补齐。

如何体验 Wasmi 1.0

  • 作为库依赖:cargo add wasmi
  • CLI:cargo install wasmi_cli
  • C 语言接口:参考官方 C-API README
  • Wasmer Backend:开启 Wasmer 的 wasmi feature
  • 或直接使用已集成 Wasmi 的项目
鱼雪