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