WebAssembly 3.0 标准正式发布:支持64位寻址与垃圾回收

WebAssembly 3.0标准已完成制定,这是继Wasm 2.0三年后的重大更新。新版本引入64位地址空间、多内存支持、垃圾回收机制等核心特性,显著提升对高级编程语言的编译支持,并已在主流浏览器中实现。

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。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计