为什么分隔的连续原语名为“shift”和“reset”?

时间:2011-05-13 09:35:59

标签: scala continuations delimited-continuations

我认为(一般来说)shiftreset是什么意思。但是我不明白他们为什么如此命名? shiftreset作为分隔继续原语与英语中的“shift”和“reset”单词有什么关系?

2 个答案:

答案 0 :(得分:23)

由于它们的实施方式(通常),它们被称为。

引自Direct Implementation of Shift and Reset in the MinCaml Compiler

  

通过解释程序   继续语义,我们可以考虑   作为一个程序的状态   继续堆栈。然后,reset可以   被认为是标志着延续   堆栈,并shift捕获   继续堆叠到最近的   由reset创建的标记。这里是   实施概述:

     
      
  • 致电reset时,请将重置标记设置为堆栈
  •   
  • 致电shift (fun k -> M)时,移动部分堆叠框架至   堆最近的重置标记
  •   
  • 调用续集k时,将重置标记设置为堆栈并复制   从堆到的相应帧   堆栈顶部。
  •   
     

k时插入重置标记   被称为,因为被捕获的延续   在空的延续中执行。

答案 1 :(得分:5)

因为这就是Danvy& Filinski在the first paper where they exposed that model of continuation-passing style中调用了这两个运算符(另请参阅here),这是Scala实现的。

Scala中的实现在this other paper中有所描述。其中提到Danvy&菲林斯基很清楚:

  

在本文中,我们研究了将控制运算符移位和重置添加到这个语言框架,它们共同实现了静态分隔的延续(Danvy和Filinski 1990,1992)