使 WebAssembly 和 Wasmtime 更具可移植性

主要观点:WebAssembly 的可移植性在其官方主页上被重点提及,它可作为编程语言的可移植编译目标,能在网页及客户端和服务器应用中部署,但实际仍存在不能运行的平台。Wasmtime 是一个轻量级、独立的 WebAssembly 运行时,致力于开放标准和提高可移植性,通过移除运行时假设、解除规范限制和采用无后端编译器等方式来实现。同时,WebAssembly 组件模型可明确 Wasm 组件的能力依赖,实现“一次编写,随处运行”的目标,且有很多参与贡献的机会。

关键信息

  • WebAssembly 是基于栈的虚拟机的二进制指令格式,设计用于多种编程语言的编译目标。
  • Wasmtime 可在 5 微秒内启动新的 Wasm 实例,注重正确性和安全性,不实现非标准扩展。
  • 运行时的可移植性取决于对底层平台的假设,Wasmtime 已移除一些不必要假设,如不再依赖mmap和虚拟内存。
  • 新的custom-page-sizes提案允许 Wasm 模块指定内存页大小,以适应内存受限的设备。
  • 之前 Wasmtime 有 Cranelift 和 Winch 两种执行方式,现在有 Pulley 解释器,将 Wasm 翻译为内部字节码格式以提高执行效率。
  • WebAssembly 组件模型可明确能力依赖,实现“一次编写,随处运行”,目前相关工作仍在进行中。

重要细节

  • WebAssembly 规范规定内存页大小为 64KiB,custom-page-sizes提案可改变此限制。
  • Pulley 解释器的工作流程包括将 Wasm 翻译为 Cranelift 的中间表示,进行中间优化,降低为 Pulley 字节码并优化,最后解释执行。
  • 参与贡献的方式包括构建最小化的 Wasmtime、帮助 Pulley 通过测试、分析和改进其性能、支持自定义页大小的 Wasm 二进制文件以及优化 Wasmtime 的代码大小等。
阅读 7
0 条评论