我对最近关于 GOTO 和尾递归的问题的回答是用调用堆栈来表达的。我担心它不够通用,所以我问你:尾调用(或等效)的概念在没有调用堆栈的架构中如何有用?
在继续传递中,所有被调用的函数都会替换调用函数,因此是尾调用,因此“尾调用”似乎不是一个有用的区别。在基于消息传递和事件的体系结构中,似乎没有等价物,但如果我错了,请纠正我。后两种架构是有趣的案例,因为它们与 OOP 而不是 FP 相关联。其他架构呢?旧的 Lisp 机器是基于调用堆栈的吗?
编辑:根据“ What the heck is: Continuation Passing Style (CPS) ”(以及下面的 Alex),连续传递下的尾调用的等价物不是“被调用函数替换调用函数”而是“调用函数传递了它是给定的,而不是创造一个新的延续”。与我所断言的不同,这种尾调用很有用。
另外,我对在较低级别使用调用堆栈的系统不感兴趣,因为较高级别不需要调用堆栈。这个限制不适用于亚历克斯的回答,因为他写的是其他调用架构(这是正确的术语吗?)通常有一个等效的调用堆栈,而不是他们在引擎盖下的某个地方有一个调用堆栈。在连续通过的情况下,结构就像一个树状结构,但边缘方向相反。调用堆栈等价物与我的兴趣高度相关。