Localized V2 rewrite for this language is in progress. Showing English-first content for now.

效果系统

通过 `with IO`、`with Panic`、`with Async` 以及自定义效果,让副作用显式化。

效果系统

Sounio 通过函数签名中的显式 with ... 子句跟踪 副作用

纯函数 vs 有效果

fn double(x: i32) -> i32 {
    x * 2
}

fn greet() with IO {
    println("Hello")
}

常见内建效果

  • IO: 控制台 + 文件系统 + 外部 I/O
  • Panic: 可能 trap/abort 的操作(例如除以零、越界索引)
  • Async: async/await 与并发原语
  • Alloc: 堆分配
  • Mut: 可变状态(在适用时)
  • GPU: GPU kernel / 设备操作(依赖特性开关)

效果错误

如果你在纯函数中调用了带效果的函数,编译器会报错,直到你:

  • 在调用者的签名中加入所需效果,或
  • 重构代码,把效果限制在边界处(推荐)。

规范 vs 实现

规范的目标是“效果在任何地方都显式”。不过,部分内建操作在当前实现中可能比用户自定义的效果函数更宽松,这取决于编译器模式与特性开关。

下一步