簡體   English   中英

為什么分隔的連續原語名為“shift”和“reset”?

[英]Why are delimited continuation primitives named “shift” and “reset”?

我想我(一般來說)理解shiftreset意味着什么。 但是我不明白他們為什么如此命名? shiftreset為分隔連續原語與英語中的“移位”和“重置”單詞有什么關系?

由於它們的實施方式(一般而言),它們被稱之為。

引自MinCaml編譯器中的直接實現移位和復位

通過使用延續語義解釋程序,我們可以將程序的狀態視為延續堆棧。 然后, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM