效果
使用 `with IO`, `with Panic`, `with Async`, 以及自定义效果,使副作用明确。
效果
效果仍然是 Sounio 最具定义性的理念之一。目前最清晰的合同是简单的:副作用应包含在类型签名中,而纯计算应尽可能地与效果边界分开。
今日的固体
- 已检查的制品以语言特性形式广告代数效果和处理程序。
- 公共文档应将显式的
with ...子句视为真实的、用户可见的语法,而不是内部细节。 - 对于日常程序,最重要的具体效果仍然是
IO,因为它出现在简单示例和公共固定件中。
基本模式
fn double(x: i32) -> i32 {
x * 2
}
fn greet() with IO {
println("Hello")
}
工作在仓库中的位置
self-hosted/check/effects.sio处理效果感知检查的自托管路径。self-hosted/effects/types.sio,self-hosted/effects/checker.sio, 和self-hosted/effects/handlers.sio映射到专用的效果实现表面。docs/architecture/EFFECT_HANDLERS_IMPLEMENTATION.md对于更广泛的设计上下文仍然有用,但实施真相应来自当前自托管树和检查固定件。
如何准确地记录效果
- 首先记录显式签名要求。
- 除非您有当前固定件证明您声称的确切行为,否则描述更丰富的处理程序语义作为设计加实现工作。
- 将效果逻辑放在例子边缘,以便读者可以看到纯转换与真实世界交互之间的区别。