WASI 0.3.0 发布说明

WASI 0.3.0 将 WebAssembly 系统接口过渡到基于组件模型的架构,引入了诸如 actors 和 streams 之类的异步功能。此版本表示从简单的类 Unix API 向更结构化、可互操作的组件系统转变,该系统专为服务器端 Wasm 运行时设计。

向组件模型过渡

WASI 0.3.0 构建在 WebAssembly 组件模型之上,摆脱了遗留的单体 API 方法。此架构转变旨在通过使用 .wit (WebAssembly 接口类型) 文件定义接口,以提供不同生态系统之间更好的互操作性,这些文件可以直接在 WASI GitHub 提案目录 中浏览。

虽然组件模型旨在促进模块化,但它在开发者之间引发了关于复杂性的争论。一些批评者认为,远离精简的类 Unix API,转向“观点导向的组件模型”会引入不必要的过度复杂化,这可能会阻碍保持 WebAssembly 快速和简单的主要目标。

新的异步功能

WASI 0.3.0 的主要技术进步是引入了 async/await 风格的功能。这包括:

  • Actors:实现结构化的并发和通信。
  • Streams:提供一种标准化的方式来异步处理数据流。

这些功能旨在将现代异步编程模式带入 Wasm 生态系统,尽管实现细节——例如 stackfull async 是否依赖于堆栈切换提案——仍然是运行时实现者之间的技术探讨点。

生态系统兼容性和运行时支持

WASI 0.3.0 目前面向服务器端运行时,原生不受浏览器支持。它还与原始 WASI 提案以及支持遗留版本的运行时保持兼容性断裂。

对于今天需要将未修改的 C/C++ 程序和库编译到 WebAssembly 的开发者来说,由于 WASI 0.3.0 当前的工具差距,诸如 WASIX 之类的替代方案常被引用为更实用的选择。此外,语言支持仍在发展;例如,Rust 开发者正在等待一个专用的 WASI 0.3 目标,以充分利用此新版本。

社区观点和批评

社区对该版本的反馈呈两极分化,重点关注透明度和组件模型的实用性:

"wasi 组件的承诺尚未实现。市场希望动态热加载和链接工件。wasi 项目需要内部的巫术才能以这种方式使用:该产品在发布前已经静态链接了组件。"

其他开发者对在 0.3.0 版本发布之前的开发过程中缺乏公开可见性表示沮丧,表明在公告之前的一段时间内,进展对公众来说并不明显。

关键更改摘要

特性 WASI 0.2 / 遗留 WASI 0.3.0
架构 单体 / 类 Unix 基于组件模型
异步支持 有限/同步 Async/Await, Actors, Streams
接口定义 C 样式头文件/API .wit 文件
主要目标 通用 Wasm 服务器端运行时

Sources