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也即将完成兼容。
有一些开发者担忧 Wasm 正在变得越来越复杂,偏离了其最初“简单、低级虚拟机”的愿景。无论如何,Wasm 3.0 无疑巩固了其在 Web 领域的地位,并为其在更广阔的计算世界中扮演重要角色奠定了坚实的基础。
作者:洛逸
网址:
本篇文章为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。