gpt4 book ai didi

functional-programming - 没有调用堆栈的架构中的尾部调用

转载 作者:行者123 更新时间:2023-12-04 08:42:07 25 4
gpt4 key购买 nike

我最近的回答question about GOTOs and tail recursion以调用堆栈的形式表述。我担心它不够通用,所以我问你:尾部调用(或等效)的概念在没有调用堆栈的体系结构中有何用处?

在连续传递中,所有被调用的函数都会替换调用函数,因此都是尾调用,因此“尾调用”似乎不是一个有用的区别。在基于消息传递和事件的架构中,似乎没有等效的东西,但如果我错了,请纠正我。后两种架构是有趣的案例,因为它们与 OOP 而不是 FP 相关。其他架构呢?旧的 Lisp 机器是基于调用堆栈的吗?

编辑:根据“What the heck is: Continuation Passing Style (CPS) ”(和下面的 Alex),延续传递下的尾部调用的等效项不是“被调用函数替换调用函数”,而是“调用函数传递它所给出的延续,而不是创建新的延续”。这种类型的尾部调用很有用,与我断言的不同。

此外,我对在较低级别使用调用堆栈的系统不感兴趣,因为较高级别不需要调用堆栈。此限制不适用于 Alex 的答案,因为他所写的事实是其他调用架构( is this the right term? )通常具有等效的调用堆栈,而不是它们在幕后的某个地方有调用堆栈。在连续传递的情况下,结构就像 arborescence ,但边缘方向相反。调用堆栈等价物与我的兴趣高度相关。

最佳答案

“没有调用堆栈的架构”通常在某种程度上“模拟”调用堆栈 - 例如,在 IBM 360 时代,我们使用 S-Type Linkage Convention按照惯例,使用由某些通用寄存器指示的寄存器保存区域和参数列表。

因此“尾调用”仍然很重要:调用函数是否需要保留在调用点之后恢复执行所需的信息(一旦被调用函数完成),或者它是否知道调用点之后将不会执行调用点,因此只需重用其调用者的“信息以恢复执行”即可?

因此,例如尾部调用优化可能意味着不附加恢复执行所需的延续到任何用于此目的的链表上......我喜欢将其视为“调用堆栈模拟”(在某种程度上,尽管这显然是一种更灵活的安排——不希望连续传递的粉丝跳过我的答案;-)。

关于functional-programming - 没有调用堆栈的架构中的尾部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com