[英]Why are delimited continuation primitives named “shift” and “reset”?
我想我(一般來說)理解shift
和reset
意味着什么。 但是我不明白他們為什么如此命名? shift
和reset
為分隔連續原語與英語中的“移位”和“重置”單詞有什么關系?
由於它們的實施方式(一般而言),它們被稱之為。
通過使用延續語義解釋程序,我們可以將程序的狀態視為延續堆棧。 然后,
reset
可以被認為是標記連續堆棧,並且shift
連續堆棧shift
到由reset
創建的最近標記。 以下是實施概述:
- 調用
reset
,將重置標記設置為堆棧- 當調用
shift
(fun k -> M)
, 將堆棧幀的一部分移動到最近的堆重置標記- 調用延續
k
,將重置標記設置到堆棧,並將相應的幀從堆復制到堆棧頂部。當調用
k
時插入重置標記,因為捕獲的連續是在空的連續中執行的。
因為這就是Danvy&Filinski在第一篇文章中稱這兩個操作符的方式,他們暴露了這種連續傳遞模式 (也見這里 ),這就是Scala實現的。
Scala中的實現在另一篇論文中有所描述。 其中Danvy&Filinski的參考文獻很清楚:
在本文中,我們研究了控制操作符移位和重置到這個語言框架的加法,它們共同實現靜態分隔的延續(Danvy和Filinski 1990,1992)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.