2011-05-13 73 views

回答

23

他们被称为是因为他们的实施方式(一般)。

Direct Implementation of Shift and Reset in the MinCaml Compiler

引通过解读使用 延续语义的程序,我们可以把 程序的状态作为 延续堆栈。然后,reset可以是 想到作为继续 堆栈和shift捕获 延续堆栈最多 由reset创建的标记。这里是 概述的执行情况:

  • 当调用reset,一个重置标记设置到堆栈
  • 当调用shift(fun k -> M)移动堆栈的一部分帧达到 最近重置标记到堆
  • 当调用延续k时,将重置标记设置为堆栈并复制相关的 从栈堆栈到 栈顶。

甲重置标记被插入时k是 调用,因为捕获 在一个空的连续执行的延续。

+11

值得注意的是,Scala的定界延续并没有以这种直接的方式实现 - 他们不能。 JVM不公开堆栈操作原语。 – 2011-05-13 15:18:49

+1

相比之下,Scheme-48确实允许直接实现(Gasbichler/Sperber),就像任何暴露调用堆栈的语言一样,如Squeak Smalltalk。 – 2011-05-22 20:55:52

相关问题