Wasm 3.0 标准正式完成
WebAssembly(Wasm)3.0 版本标准现已完成,并成为 Wasm 的“现行”标准。这一公告距离 Wasm 2.0 完成已有三年,2.0 版本曾新增向量指令、批量内存操作、多返回值及简单引用类型等功能。
据 Wasm W3C 社区组和工作组透露,此次 3.0 版本是相较于 2.0 的一次重大更新,其中部分功能已开发六至八年。
核心新特性
64位地址空间
Wasm 3.0 支持 64 位地址空间,意味着内存和表除了使用 i32 外,还可使用 i64 作为地址空间。理论上,可用地址空间从 4GB 扩展至 16EB。硬件和使用场景将成为限制因素,例如 Web 环境将 64 位内存限制为 15GB。工作组在文章中写道:“这种新的灵活性对于使用 Wasm 的非 Web 生态系统尤其重要,因为它们现在可以支持更庞大的应用程序和数据集。”
多内存支持
新版本允许单个模块声明和访问多个内存。此前,Wasm 应用虽可同时使用多个内存对象,但仅限于在独立模块中声明和访问。
垃圾回收机制
Wasm 3.0 新增垃圾回收功能。工作组澄清道:“秉承 Wasm 作为低级语言的精神,Wasm GC 同样是低级的:针对 Wasm 的编译器可以声明其运行时数据结构的内存布局,通过结构体和数组类型以及未装箱的标记整数来实现,其分配和生命周期由 Wasm 处理。但仅此而已。其他一切,如为源语言值设计合适的表示形式(包括方法表等实现细节),仍由针对 Wasm 的编译器负责。”
GC 功能的实现得益于类型系统的扩展,现在支持更丰富的引用形式,例如描述引用堆值的具体形状。
其他增强功能
Wasm 3.0 还包含尾调用、异常处理、宽松向量指令、对非确定性结果指令的确定性默认行为,以及自定义注解语法等新特性。
生态影响
据工作组介绍,这些新功能为 Wasm 提供了更好的高级编程语言编译支持。因此,多种语言已开始以 Wasm 为目标平台,包括 Java、OCaml、Scala、Kotlin、Scheme 和 Dart。
Wasm 3.0 功能已融入大多数主流浏览器,包括 Chrome、Firefox 和 Safari。