Mic*_*ael 32 continuations scala delimited-continuations
我想(一般来说)我的理解shift和reset意思.但是我不明白他们为什么如此命名?什么shift和reset分隔继续原语与英语中的"移位"和"重置"单词有什么关系?
Vas*_*iuk 23
由于它们的实施方式(一般而言),它们被称之为.
通过使用延续语义解释程序,我们可以将程序的状态视为延续堆栈.然后,
reset可以将其视为标记延续堆栈,并将shift连续堆栈捕获到最近创建的标记reset.以下是实施概述:
- 调用时
reset,将重置标记设置为堆栈- 调用时
shift(fun k -> M),将堆栈帧的一部分移动到最近的堆重置标记- 调用continuation时
k,将重置标记设置为堆栈,并将相应的帧从堆复制到堆栈顶部.
k调用时会插入重置标记,因为捕获的延续在空的连续中执行.
因为这就是Danvy&Filinski在第一篇文章中称这两个操作符的方式,他们暴露了这种连续传递模式(也见这里),这就是Scala实现的.
Scala中的实现在另一篇论文中有所描述.其中Danvy&Filinski的参考文献很清楚:
在本文中,我们研究了控制操作符移位和重置到这个语言框架的加法,它们共同实现静态分隔的延续(Danvy和Filinski 1990,1992)