函数与纯度¶
演示 def/fun/act 的分层,以及 unsafe fun 的回滚语法。第一个示例强调纯度分级的调用边界:def 只能调用 def,fun 可调用 def/fun,act 具备副作用权限。第二个示例展示 unsafe fun 必须带权限列表与尾随 rollback,并说明回滚用于撤销可追踪副作用。
说明:
第一个示例中 compute 作为 fun 只使用纯函数 add,保持逻辑纯度;main 使用 act[io.out] 输出。第二个示例中 rollback 直接访问函数体内变量,语义等同于在 return 后执行,且要求多 return 情况下只使用所有分支都可达的变量。
use "std" -> std;
def add(i32 a, i32 b) -> i32 = a + b;
fun compute(i32 x) -> i32 {
return add(x, 1);
}
act[io.out] main() -> i32 {
val value = compute(41);
std.println(value);
return 0;
}
use "std" -> std;
// unsafe fun 必须带权限列表与回滚块
unsafe fun[] next_id() -> i32 {
@static
var i32 counter = 0;
counter = counter + 1;
return counter;
} rollback {
// 回滚:撤销本次递增
counter = counter - 1;
}
fun compute() -> i32 {
// OK: unsafe fun[] 可被 fun 调用
val id = next_id();
return id;
}
act[io.out] main() -> i32 {
val id = compute();
std.println(id);
return 0;
}