加载中...

代数效应(Algebraic Effects)是一种结构化管理副作用的语言机制:程序声明并执行抽象的效应操作(如"读取配置""抛出异常""让出控制权"),由外层的效应处理器(handler)拦截并决定其具体语义——可以恢复执行、中止、甚至多次恢复。理论由 Gordon Plotkin 与 John Power、Matija Pretnar 等人建立。
效应操作触发时捕获当前延续并交给处理器,处理器持有"从中断点继续"的能力,因此异常、状态、协程、生成器、非确定选择等传统上各自内建的控制结构,都能在库层面统一实现。相比 Monad,效应可自由组合,无需 Monad 变换器的层叠。
研究语言 Eff、Koka 原生支持;OCaml 5 引入(无类型的)效应处理器以支撑多核并发库;Haskell 有多个效应系统库。React 的 Hooks 与 Suspense 设计被其作者明确称受代数效应启发。
代数效应被视为副作用管理的下一代方案,兼得纯函数式的可控性与直接风格的书写体验;类型化效应的工程化仍在发展中。

登录 后参与讨论
暂无讨论,来发表第一条评论吧