根据这个答案

https://stackoverflow.com/questions/551950/what-stackless-programming-languages-are-available/671296#671296

所有这些编程语言stackless

  • Stackless蟒蛇
  • PyPy
  • 口齿不清
  • 方案
  • Tcl
  • Lua
  • VM鹦鹉

这是什么意思他们被stackless?这是否意味着他们不使用一个电话?如果他们不使用一个电话堆,他们是怎么使用?

有帮助吗?

解决方案

这是什么意思他们被stackless?这是否意味着他们不使用一个电话?

是的,这是正确的。

如果他们不使用一个电话堆,他们是怎么使用?

的确切执行当然将不同语言的语言。在Stackless蟒蛇,有一个调度开始的蟒蛇口译员使用最上面的架及其成果。解释过程的操作码需要一个在一段时间,直到达到一个 CALL_FUNCTION 操作码,信号,你们将要进入一个功能。这导致该调度程序,以建立一个新的框架的有关信息和返回的调度员与设施的标志。从那里,该调度员重新开始,指的口译员在最上面的框架。

Stackless语言,避免呼堆由于若干原因,但在许多情况下,它是用以使某些程序构造变得更加容易执行。该规范的一个 延续.延续是非常强大,非常简单的控制结构可以表示任何通常的控制结构你可能已经熟悉(while, do, if, switch, 等等).

如果这就是混乱的,你可能想试试你的包裹头周围的文章,特别是矫揉造作 延续三明治的比喻:

说你是在厨房里面前的冰箱,思考一个三明治。你把一个继续有权利,并把它放在你的口袋里。然后你会得到一些土耳其和面包出来的冰箱和自己做三明治,这现在是坐在柜台上。你调用的延续在你的口袋里,你发现自己站在冰箱里再次,考虑一个三明治。但幸运的是,有一个三明治上的反,所有使用的材料,以使它们走了。所以你吃了它。

其他提示

他们不使用一个电话叠,因为他们在工作 继续通过风格.如果你不熟悉的尾呼吁的优化,这可能是一个良好的第一步理解这意味着什么。

效仿传统的调用/回报这种模式,而不是推动一个退回的地址,并期待剩余的框架保持不变的呼叫者关闭,剩下的其代码和任何变量,仍然需要(其余的都被释放).它然后执行一个尾呼吁被叫方,通过该继续作为一个参数。时被呼叫者"返回",它不通过调用这种延续,通过返回值作为一个参数。

就上述而言,它仅仅是一个复杂的方式来做到功能的电话。然而,它概括非常好的更复杂的情况:

  1. 异常情况/最终/etc块非常容易地建模的-如果你可以通过一个"返回"继续作为一个论点,可以通过2个(或多个)只是作为容易。口齿不清-y"条件处理程序"的区块(可能或不可能返回的控制的话)也是容易的-通过继续为剩余的这一功能,可能会或可能不被称为。
  2. 多返回的价值观是同样容易通若干论点的延续。
  3. 返回临时/复制不再是不同功能的参数通过。这常常使得更容易消除的临时.
  4. 尾递归化是微不足道的-叫简单地通过在"返回"持续它收到的,而不是捕获一个新。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top