从 WASI 0.2 到 0.3接口简化与异步原语升级2026 年 6 月 11 日Bailey Hayes 和 Yosh Wuyts 宣布WASI 0.3 正式发布异步操作成为 WebAssembly 组件的原生特性。WASI 子组投票批准 WASI 0.3.0 版本重构了基于 WebAssembly 组件模型的异步原语。0.3.0 规范稳定运行时和工具链支持正在落地。WASI 0.2 中 wasi:io 承担的工作成为标准 ABI 的一部分组件模型原生提供这些原语从 0.2 到 0.3 的大部分更改是“机械性”的简化了接口签名。新异步原语使绑定生成器能为给定语言生成符合习惯的异步绑定。组件模型的异步 ABI 革新在 WASI 0.2 中每个组件需有自己的事件循环/异步运行时事件循环间无法协调使用流式或异步 API 的组件无法与其他组件组合。WASI 0.3 让主机管理所有组件共享的事件循环通过将 stream、future 和 async 作为一等构造添加到标准 ABI 实现stream 和 future 类似资源类型是有所有权的句柄跨组件边界传递转移所有权且不能被借用运行时驱动调度值传递给 future 时运行时调度等待任务异步模型“基于完成”类似 Linux io_uring 和 Windows 的 IOCP/IoRing API可模拟 epoll/kqueue 风格 API组件可直接导出和导入 async funcWASI 0.2 的“start - foo”/“finish - foo”/“subscribe” 三步流程不再存在。WASI 接口的变化0.3 版本接口的大部分更改是机械性的。WASI 0.2 为实现异步操作处理复杂如今异步成组件模型原生特性更易实现之前功能。以下是 WASI 0.2 中 wasi:io 包模式及 0.3 版本使用组件模型异步特性后的样子WASI 0.2 (wasi:io)WASI 0.3 (组件模型)resource pollablefutureresource input - streamstreamresource output - streamstream写入方向poll(list)在 future 上使用 await由运行时处理在资源上调用 subscribe()从调用中返回一个 future...start - foo / finish - foofoo: async func(...)WASI 0.2 在流读取调用中直接显示终端错误调用者需不断读取了解结果提前停止无法区分流关闭和错误情况。WASI 0.3 中流返回额外 future其解析与流消耗无关解决流状态问题// WASI 0.2read - via - stream: func() - resultinput - stream, error - code;// WASI 0.3read - via - stream: func() - tuplestreamu8, futureresult_, error - code;语言绑定的变化组件模型使创建与其他语言的绑定容易。一等异步特性加入后客端绑定生成器可为目标语言创建原生异步绑定。以 wasi:http/handler 接口为例其公开异步 handle 函数interface handler {handle: async func(request: request) - resultresponse, error - code;}在 Rust 中使用此接口实现 HTTP 服务器可使用 [wit - bindgen](https://github.com/bytecodealliance/wit - bindgen/tree/main#guest - rust) crate将 interface handler 映射到 trait Guesthandle: async func 映射到 async fn handleuse wasi::http::types::{ErrorCode, Request, Response};impl Guest for Component {async fn handle(request: Request) - ResultResponse, ErrorCode {// ...}}许多语言包括 [Python](https://github.com/bytecodealliance/componentize - py)、[JavaScript](https://github.com/dicej/componentize - js)、[C#](https://github.com/bytecodealliance/wit - bindgen#guest - c) 和 [C](https://github.com/bytecodealliance/wit - bindgen/blob/main/crates/c/README.md)的客端绑定生成器异步支持在进行中。这些语言依赖“无栈协程”但组件模型异步 ABI 支持“有栈”和“无栈”协程。Go 运行时能将同步调用转换为异步调用通过“goroutine”提供并发执行。使用 [componentize - go](https://github.com/bytecodealliance/componentize - go/blob/2aa4ad80088ec18cd455cf9b5fecc0c9005fdffe/examples/wasip3/export_wasi_http_handler/handler.go) 可导出 func Handle 实现 HTTP 服务器运行时在 ABI 边界暂停和恢复 goroutine不阻塞程序其他部分package export_wasi_http_handlerimport (. wit_component/wasi_http_types. go.bytecodealliance.org/pkg/wit/types)func Handle(request *Request) Result[*Response, ErrorCode] {tx, rx : MakeStreamU8() // ← 1. 创建一个通道对go func() { // ← 2. 启动一个虚拟线程defer tx.Drop()tx.WriteAll([]uint8(Hello, world!)) // ← 3. 写入通道}()response, send : ResponseNew( // ← 4. 创建一个 HTTP 响应FieldsFromList([]Tuple2[string, []byte]{{F0: content - type, F1: []byte(text/plain)},}).Ok(),Some(rx), // ← 5. 将接收端作为 HTTP 主体传递trailersFuture(),)send.Drop()return Ok[*Response, ErrorCode](response) // ← 6. 返回 HTTP 响应}现在 WASI 0.3 已发布并支持组件模型异步特性客端工具链和主机运行时将稳定这些功能未来几周和几个月各项目将宣布对 WASI 0.3 的支持。wasi:http 的变化变化最大的接口是 wasi:http不仅将基于轮询的接口转换为原生异步接口还重组架构、改变核心抽象。wasi:http 公开 wasi:http/service 和 wasi:http/middleware 两个架构interface client { /* ... */ }interface handler { /* ... */ }// 当客端绑定生成器使用时通过 client 导入提供进行 HTTP 调用的能力// 并通过 handler 导出来处理传入的 HTTP 请求。world service {import client;export handler;}// 中间件架构是服务架构的超集。world middleware {include service; // ← 具备 service 所能做的所有事情。import handler; // ← 还可以将传入的请求传递给另一个处理程序。}middleware 架构取代 0.2 版本的 proxy 架构用于定义可转发请求的 HTTP 处理程序。WASI 0.3 可执行服务链组件可直接组合微服务交互无需网络通信运行时可在同一进程内组合将调用其他微服务的时间从毫秒级降至纳秒级提升六个数量级。总结WASI 0.3 已发布意味着规范批准通过 WASI 子组投票是稳定版本为其编译的程序未来可继续运行Wasmtime 45 运行最新候选版本Wasmtime 46 将默认启用组件模型异步特性并发布 WASI 0.3.0JavaScript 组件模型工具链 jco 支持 WASI 0.3 所有功能默认启用支持的版本即将发布客端工具链对 WASI 0.3 的支持工作在进行中发布后可使用多种语言编写 WASI 0.3 组件。开始使用 WebAssembly 组件的最佳资源是 [Wasm 组件模型手册](https://component - model.bytecodealliance.org/)查看全面更改列表参阅 [WASI 0.3.0 发布说明](https://github.com/WebAssembly/WASI/releases/tag/v0.3.0)了解未来发展参阅 [迈向组件模型 1.0](https://bytecodealliance.org/articles/the - road - to - component - model - 1 - 0)。WASI 0.3 是社区共同努力成果感谢各方贡献者和开发者组件模型原生异步特性开启新篇期待大家基于此构建更多应用欢迎使用 WASI 0.3。