Skip to content

Commit 02dad24

Browse files
committed
fix: fixed individual post
1 parent ea24c21 commit 02dad24

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/content/blog/2025-09-07/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pdf: true
2323

2424
代数效应的核心操作包括 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 接收到结果并继续执行。
2525

26-
这种机制的优势在于抽象泄漏最小化,调用者无需关心被调用函数的具体效应;极强的表达能力,可以轻松实现可恢复异常、协作式多任务等模式;以及代码极度简洁,业务逻辑和效应处理逻辑分离。例如,在数学上,续延可以表示为函数 $k\colonA\toB$,其中 A 是当前状态,B 是未来计算结果,handler 通过操作 k 来实现控制流跳转。
26+
这种机制的优势在于抽象泄漏最小化,调用者无需关心被调用函数的具体效应;极强的表达能力,可以轻松实现可恢复异常、协作式多任务等模式;以及代码极度简洁,业务逻辑和效应处理逻辑分离。例如,在数学上,续延可以表示为函数 $k: A \to B$,其中 A 是当前状态,B 是未来计算结果,handler 通过操作 k 来实现控制流跳转。
2727

2828
## 如何实现代数效应?
2929

0 commit comments

Comments
 (0)