+8613426109659
webmaster@21cto.com

好消息:Wasm 3.0 的新标准正式到来

编程语言 0 802 2025-09-20 06:20:08
图片

WebAssembly(Wasm)标准 3.0 版现在已经完成,社区将其视为 Wasm 的“实时”标准。

本次发布是在 Wasm 2.0 完成三年后所发布的,Wasm 2.0 增加了诸多功能,例如矢量指令、批量内存操作、多个返回值与简单引用类型。

我们根据 Wasm W3C 社区工作组总结一些数据,与上一版本 2.0 相比,这是一个重大更新,现在几个可用功能已经开发了六到八年。

Wasm 3.0 支持64 位地址空间,这表示着内存和表除了 i32 之外,还可以使用 i64 作为地址空间。

https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/memory64/Overview.md

这从理论上表示,其可用地址空间从 4 GB 扩展到 16 EB。从现在开始,硬件和用例将成为限制因素,例如 Web 将 64 位内存限制为 15 GB。

Wasm工作组在一篇文章中如此表达道:

“这种新的灵活性对于使用 Wasm 的非 Web 生态系统尤其重要,因为它们现在可以支持更大的应用程序和数据集。 ”

另一个新功能是单个模块能够声明和访问多个内存

https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/multi-memory/Overview.md

从前,Wasm 应用程序可以同时使用多个内存对象,但只能通过在单独的模块中声明和访问它们来实现。

现在,Wasm 3.0 还添加了垃圾收集功能

https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/gc/Overview.md

该工作组这样描述道:

“秉承 Wasm 作为低级语言的本质,Wasm GC 也同样是低级的:以 Wasm 为目标的编译器可以声明其运行时数据结构的内存布局,这些布局以结构体和数组类型以及未装箱的带标签整数的形式呈现,而这些整数的分配和生命周期则由 Wasm 负责。其他所有工作,例如为源语言值设计合适的表示形式,包括方法表等实现细节,仍然由以 Wasm 为目标的编译器负责。”

Wasm GC 的实现得益于类型系统的扩展

https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/function-references/Overview.md

它现在支持更丰富的引用形式,例如描述引用堆值的确切形状。

在工具与开发便利性上,Wasm文本格式新增自定义注释语法,可增强附加信息而不影响语意,方便编译器与除错工具使用。对于嵌入到JavaScript的应用,则增加了JavaScript API字符串内建函数库,让Wasm可直接操作传入的JavaScript字符串值,降低跨运行环境的信息转换成本。此次3.0也是首度以SpecTec工具链产制的标准文件,提升规格一致性与可靠性。

Wasm3.0 中的其他新功能包括:

  • 尾调用

    https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/tail-call/Overview.md

  • 异常处理

    https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/exception-handling/Exceptions.md

  • 放宽向量指令

    https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/relaxed-simd/Overview.md

  • 具有非确定性结果的指令的确定性默认行为

    https://github.com/WebAssembly/profiles/blob/main/proposals/profiles/Overview.md


工作组介绍说,这些新功能为 Wasm 编译高级编程语言提供了更好支持。

目前,已有多种主汉编程语言开始针对 Wasm,包括 Java、OCaml、Scala、Kotlin、Scheme 和 Dart。

Wasm 3.0 功能已被纳入大多数主流网络浏览器,包括 Chrome、Firefox 和 Safari,其独立引擎Wasmtime也即将完成兼容。

作者:洛逸

网址:

https://webassembly.org/features/

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。