尾递归与Continuation
这篇文章从一个常见的编程痛点——递归深度受限——出发,引出了两个紧密相关又层次不同的概念:尾递归与 Continuation。作者清晰地解释道,尾递归本质上是一种针对特定代码模式的编译器优化,它能将递归调用在尾部位置时转化为循环,从而避免栈溢出,常用于函数式编程语言中处理深层递归。但其优化范围仅限于尾调用位置,控制流的延续仍然是隐式的。 文章更核心的部分在于探讨 Continuation。通过 CPS(Continuation-Passing Style)转换,作者展示了如何将“程序接下来要做什么”这个隐含的控制流,显式地表示为一个可传递、可存储的“一等对象”。Continuation 能统一表达顺序执行、循环、异常甚至跳转,它将控制权交给了程序员。 两者的根本差异随之浮现:尾递归是对线性控制流的一种实现层优化,而 Continuation 则是对程序控制流本身进行建模的一种强大语言原语。文章用具体的代码示例对比了它们的表达能力,最终让读者理解,Continuation 提供了一种更根本、更灵活的控制流操控视角。这对于理解程序如何“执行”、如何管理流程至关重要。