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)
归档时间: |
|
查看次数: |
1595 次 |
最近记录: |