13426109659
webmaster@21cto.com

Wasm 3.0 标准发布

编程语言 0 52 9小时前
图片

WebAssembly(Wasm)标准 3.0 版现已完成,并被视为 Wasm 的“实时”标准。

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

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

Wasm 3.0 支持64 位地址空间(https://github.com/WebAssembly/spec/blob/wasm-3.0/proposals/memory64/Overview.md,这表示着内存和表除了 i32 之外,还可以使用 i64 作为地址空间。

这从理论上表示,其可用地址空间从 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/

评论