异步与协程

奇语用 未来<T> 类型 + 等待 表达式做异步,底层是 Go 式 M:N 协程调度器(work-stealing)。

函数 异步计算(值: 整数) : 未来<整数> {
    返回 值 * 2;   // 自动包装成 Future
}

函数 入口() {
    变量 结果值: 整数 = 等待 异步计算(21);
    IO.打印行(整数转字符串(结果值));   // 42
}

支持的 Future 类型

  • 未来<整数> / 未来<浮点数> / 未来<布尔> / 未来<字符串>

协程与通道

函数 发送者(信道: 通道<整数>) {
    信道 <- 42;
}

函数 入口() {
    变量 信道 = 通道<整数>();
    启动 发送者(信道);
    变量 值 = <- 信道;    // 阻塞直到有值
    IO.打印行(整数转字符串(值));
}

Select 多路复用

变量 通道甲 = 通道<整数>();
选择 {
    情况 值 := <-通道甲:
        IO.打印行("收到: " + 整数转字符串(值));
    情况 超时(500):
        IO.打印行("超时分支");
    默认:
        IO.打印行("默认分支");
}
选择 自 2026.07.03 起可用:非阻塞轮询多通道,支持 默认 分支(无就绪立即走)与 超时(毫秒) 分支;两者皆无则阻塞至有通道就绪。分支写 情况 变量 := <-通道:(Go 风格冒号),分支体是裸语句列表,不带花括号。
通道目前只支持 通道<整数>——字符串/浮点通道会编译失败。传复杂数据用 JSON / 哈希表句柄(句柄是整数)中转。
完整 async/await 状态机 codegen 约覆盖 70%;复杂控制流内嵌 await 会退化到同步包装,行为正确但非真协程切换。