
WebAssembly(Wasm)3.0已正式上线,成为新的标准版本。此次是自2.0版本完成以来最大幅度的更新,目标是让高级语言更容易映射到Wasm,并在性能、可移植性与可扩展性之间取得平衡。新版引入了64位地址空间、多内存与垃圾回收等核心机制,并增强了尾调用、原生异常处理、向量指令、确定性执行等能力,同时增加了自定义注解与JavaScript接口支持,为更大规模、更复杂的应用奠定了基础。
在内存模型方面,memory64与table64使模块可使用64位索引,突破了以往4GB内存的限制。虽然浏览器出于安全与资源管理仍维持16GB上限,但在非网页环境中,应用可根据硬件条件扩展至更大的数据集。
另一项更新是多内存支持。过去尽管Wasm应用可以同时使用多个内存对象,但必须分别声明在不同模块中;而现在单个模块可同时声明并访问多个线性内存,并能直接在不同内存之间复制数据,这有助于在应用中隔离敏感数据、建立高效缓冲区,或在工具链静态合并模块时减少限制。
内存管理也得到强化,Wasm 3.0新增了垃圾回收(GC)支持,使编译器可用结构体(Struct)与数组(Array)定义数据结构,而内存的分配与释放则交由运行时处理,减轻了语言前端需要自带垃圾回收系统的负担。结合更精细的类型化引用,函数可通过call_ref在静态类型保障下进行间接调用,无需运行时类型或边界检查。对于Java、Kotlin、Dart、Scala或OCaml等具备GC的语言而言,这意味着模块体积缩小与启动速度提升。
性能方面,Wasm 2.0引入的SIMD在3.0中获得扩展,Relaxed SIMD允许少数情况交由硬件自行决定结果,标准仅要求结果落在可接受范围内,借此提升整体速度。对于需要完全可重现的应用,如区块链或回放系统(Replayable System),标准提供了确定性配置文件,确保跨平台执行结果一致。
在工具与开发便利性上,Wasm文本格式新增了自定义注解语法,可携带额外元数据而不影响语义,便于编译器与调试工具使用。对于嵌入到JavaScript的应用,则增加了JavaScript API的字符串内置函数库,使Wasm可直接操作传入的JavaScript字符串值,降低跨执行环境的数据转换成本。此次3.0也是首次通过SpecTec工具链生成的标准文档,提升了规范的一致性与可靠性。
这些改进带来的实际效益是模块更小、加载与初始化更快,应用也将更稳定,并能承载更大数据集。音视频处理、游戏、科学计算或前端编辑器等场景,都能通过GC、异常处理与SIMD的优化获得更佳体验。官方表示,Wasm 3.0已在多数主流浏览器中得到支持,独立引擎如Wasmtime也即将完成兼容。