You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/blog/2025-09-07/index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,7 +23,7 @@ pdf: true
23
23
24
24
代数效应的核心操作包括 perform(effect, argument) 和 try...with handler。perform 用于在执行中发起一个效应,而 try...with 用于建立一个效应处理程序的作用域。执行流程的关键在于续延(Continuation)的概念,续延表示「接下来要做什么」,即当前的执行状态。当函数 f perform 一个效应时,运行时会中断执行,捕获从 perform 点之后直到 try 块结束的续延,并将其包装成一个函数 k。然后,运行时沿着调用栈向上查找能处理该效应的 handler。找到后,将数据和续延 k 传递给 handler。handler 可以自由选择:调用 resume(k, result) 来恢复执行,注入结果;直接返回一个值来终止 try 块;或再次发起其他效应。如果 resume 被调用,续延 k 被执行,函数 f 接收到结果并继续执行。
25
25
26
-
这种机制的优势在于抽象泄漏最小化,调用者无需关心被调用函数的具体效应;极强的表达能力,可以轻松实现可恢复异常、协作式多任务等模式;以及代码极度简洁,业务逻辑和效应处理逻辑分离。例如,在数学上,续延可以表示为函数 $k\colonA\toB$,其中 A 是当前状态,B 是未来计算结果,handler 通过操作 k 来实现控制流跳转。
26
+
这种机制的优势在于抽象泄漏最小化,调用者无需关心被调用函数的具体效应;极强的表达能力,可以轻松实现可恢复异常、协作式多任务等模式;以及代码极度简洁,业务逻辑和效应处理逻辑分离。例如,在数学上,续延可以表示为函数 $k: A \to B$,其中 A 是当前状态,B 是未来计算结果,handler 通过操作 k 来实现控制流跳转。
0 commit comments