![]() |
1
14
是的,那是对的。
当然,具体的实现将因语言而异。在无堆栈的python中,有一个调度器使用最顶层的帧启动python解释器及其结果。解释器根据需要一次处理一个操作码,直到它到达
无堆栈语言避开调用堆栈有很多原因,但在许多情况下,它被使用,因此某些编程构造变得更容易实现。典型的是
continuations
.延续是非常强大、非常简单的控制结构,可以表示您可能已经熟悉的任何常见控制结构。(
如果这让人困惑的话,你可以试着在维基百科的文章中,特别是那些滑稽的文章中绕一圈。 连续三明治类比 :
|
![]() |
2
10
它们不使用调用堆栈,因为它们在 continuation-passing style . 如果您不熟悉尾调用优化,这可能是理解这意味着什么的好的第一步。 为了模拟此模型上的传统调用/返回,而不是推送返回地址并期望帧的其余部分保持不变,调用方将关闭其剩余代码和任何仍然需要的变量(剩余部分被释放)。然后,它对被调用方执行尾部调用,并将此延续作为参数传递。当被调用方“返回”时,它通过调用这个延续来实现,并将返回值作为参数传递给它。 就以上所述,这只是一种复杂的函数调用方法。但是,它很好地概括为更复杂的场景:
|