【问题标题】:Understanding (sub,partial,full,one-shot) continuations (in procedural languages)理解(子、部分、完整、一次性)延续(在程序语言中)
【发布时间】:2018-03-04 21:40:59
【问题描述】:

在阅读了我能找到的关于延续的几乎所有内容之后,我仍然无法理解它们。也许是因为所有的解释都与 lambda 演算密切相关,我很难理解。

一般来说,延续是在您完成当前的事情(即剩余的计算)之后接下来要做什么的某种表示。

但是,随着种类繁多,它变得更加棘手。也许你们中的一些人可以在这里用我的习惯类比帮助我,并指出我在理解上犯了什么错误。

假设我们的函数被表示为对象,为了简单起见:

  1. 我们的解释器有一堆函数调用。
  2. 每个函数调用都有一个用于本地数据和参数的堆栈。
  3. 每个函数调用都有一个要执行的“指令”队列,这些“指令”对本地数据堆栈和队列本身(也可能在调用者堆栈上)进行操作。

类比是为了类似于XY concatenative language

所以,在我的理解中:

  • 延续是整个计算的其余部分(这个未完成的指令队列 + 所有后续计算的堆栈:调用者队列)。
  • 部分延续是当前未完成的队列 + 调用者堆栈的某个定界部分,直到某个点(不是完整的,对于整个程序)。
  • 子延续是当前“活动”功能的当前指令队列的其余部分。
  • one-shot continuation 就是这样一种只能执行一次的continuation, 被具体化为对象后。

如果我的比喻有误,请纠正我。

【问题讨论】:

  • 您可能会发现此 QA 很有用:stackoverflow.com/q/14019341/783743
  • 看过那个。试图解释延续的一般概念,但不是我正在努力解决的所有变体
  • 您可能想要调整您的机器模型以拥有一堆函数调用,也就是说,当一个函数被调用两次时,它可以有不同的本地数据和参数。否则,您将获得静态数据和不可重入函数。另外,“在调用者堆栈上操作”我希望您指的是解释器的函数(调用)堆栈,而不是函数调用者的本地数据。
  • @Bergi 是的,我是这个意思。当然是一堆独特的框架。

标签: functional-programming continuations procedural-programming


【解决方案1】:

延续是整个计算的其余部分(这个未完成的指令队列+所有后续计算的堆栈:调用者队列)

非正式地,您的理解是正确的。然而,作为一个概念的延续是控制状态的抽象,以及如果延续被调用,过程应该达到的状态。它不需要显式地包含整个堆栈,只要可以达到状态即可。这是延续的经典定义之一。 Refer to Rhino JavaScript doc.

部分延续是当前未完成的队列+调用者堆栈的一些分隔部分,直到某个点(不是完整的,对于整个程序)

再次,非正式地,您的理解是正确的。它也称为delimited continuation 或可组合的延续。在这种情况下,不仅进程需要达到定界延续所代表的状态,而且还需要将延续的调用限制在指定的范围内。这与完全延续相反,完全延续从指定的点开始,一直持续到控制流的结束。定界延续从该点开始,仅在另一个标识点结束。它是一个部分控制流,而不是完整的控制流,这正是定界延续需要返回一个值的原因(参见the Wikipedia article)。该值通常表示部分执行的结果。

子延续是当前“活动”功能的当前指令队列的其余部分

您在这里的理解有些模糊。一次理解这一点的方法是考虑多线程环境。如果有一个主线程并且在某个时刻从它开始了一个新线程,那么一个延续(来自主线程或子线程的上下文),它应该代表什么?从那时起子线程和主线程的整个控制流(在大多数情况下没有多大意义)或只是子线程的控制流?子延续是一种定界延续,控制流状态表示从一个点到另一个点,该点是子流程或子流程树的一部分。 Refer to this paper.

one-shot continuation 是这样一种在具体化为对象后只能执行一次的 continuation

As per this paper,你的理解是正确的。该论文似乎没有明确说明这是完整/经典的延续还是定界的延续;但是,在接下来的部分中,论文指出完整的延续是有问题的,所以我认为这种类型的延续是定界延续。

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 2018-09-28
    • 2012-04-06
    • 1970-01-01
    • 2011-10-22
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多