为什么定界延续原语被命名为“shift”?和“重置”?

发布于 2024-11-07 00:16:51 字数 155 浏览 1 评论 0原文

我想我(总体上)理解 shiftreset 的含义。但我不明白为什么他们这么命名?作为定界延续原语的 shiftreset 与英语中的“shift”和“reset”单词有什么关系?

I think I understand (in general) what shift and reset mean. However I do not understand why they are named so ? What do shift and reset as Delimited Continuation primitives have to do with "shift" and "reset" words in English?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心的憧憬 2024-11-14 00:16:51

它们之所以如此命名是因为它们的实现方式(一般而言)。

引自在MinCaml中直接实现Shift和Reset编译器

通过使用
延续语义,我们可以认为
程序的状态为
延续堆栈。然后,reset可以
被认为是标记延续
堆栈,并 shift 捕获
连续堆栈到最近的
reset创建的标记。这是
实施概述:

  • 调用reset时,为堆栈设置一个重置标记
  • 当调用shift (funk -> M)时,移动堆栈帧的一部分直到
    距离堆最近的重置标记
  • 当调用延续k时,为堆栈设置一个重置标记并复制
    对应的帧从堆到
    栈顶。

k为时,插入重置标记
被调用,因为捕获了延续
在空的延续中执行。

They're called so because of the way they are implemented (in general).

Quoted from Direct Implementation of Shift and Reset in the MinCaml Compiler

By interpreting a program using the
continuation semantics, we can regard
the state of the program as a
continuation stack. Then, reset can be
thought of as marking the continuation
stack, and shift capturing the
continuation stack up to the nearest
mark created by reset. Here is the
overview of the implementation:

  • When calling reset, set a reset mark to the stack
  • When calling shift (fun k -> M), move a part of the stack frames up to
    the nearest reset mark to the heap
  • When calling a continuation k, set a reset mark to the stack and copy the
    corresponding frames from the heap to
    the stack top.

A reset mark is inserted when k is
called, because captured continuations
are executed in an empty continuation.

蓝梦月影 2024-11-14 00:16:51

因为这就是丹维和他的方式。 Filinski 在第一篇论文中称这两个运算符为延续传递风格(另请参阅此处),它是Scala 实现了什么。

另一篇论文中描述了 Scala 中的实现。其中对 Danvy & 的引用菲林斯基说得很清楚:

在本文中,我们研究了向该语言框架添加控制运算符移位和重置,它们共同实现静态分隔延续(Danvy 和 Filinski 1990,1992)

Because that's the way Danvy & Filinski called those two operators in the first paper where they exposed that model of continuation-passing style (see also here), and it is what Scala implements.

The implementation in Scala is described in this other paper. The reference therein to Danvy & Filinski is clear:

In this paper, we study the addition of control operators shift and reset to this language framework, which together implement static delimited continuations (Danvy and Filinski 1990, 1992)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文