异步函数 (Async Functions)
注意:Zig 的异步功能(async/await)在当前的自举编译器(Stage2)中尚未完全实现或处于暂不可用状态。它是 Zig 语言设计的核心部分,但目前正处于重构中。以下信息基于该功能的预期设计。
Zig 的异步函数是一等公民。调用异步函数不会立即执行其逻辑,而是返回一个帧(frame),该帧代表了函数的挂起执行状态。
async 和 await
async关键字用于调用函数并获取其帧,而不等待其完成。await关键字用于等待帧完成并获取其返回值。
const std = @import("std");
fn func() i32 {
return 1234;
}
test "async/await" {
// 这是一个同步调用
// const result = func();
// 这是一个异步调用(假设编译器支持)
// var frame = async func();
// const result = await frame;
}
挂起 (suspend) 和 恢复 (resume)
异步函数可以使用 suspend 关键字挂起自身的执行,并将控制权交还给调用者。调用者(或持有帧的其他代码)可以使用 resume 关键字恢复该函数的执行。
这允许实现无栈协程(stackless coroutines)和高效的事件循环。
无内置运行时
Zig 语言本身不提供异步运行时(如事件循环)。相反,它提供了构建这种运行时所需的低级原语。这使得 Zig 可以与任何异步 I/O 库(如 libuv, io_uring, IOCP, kqueue)集成。