gpt4 book ai didi

closures - 函数闭包与延续,一般和 SML

转载 作者:行者123 更新时间:2023-12-02 16:30:58 24 4
gpt4 key购买 nike

我开始怀疑我是否真的理解这个主题。

到目前为止,我将延续理解为调用带有闭包的函数(通常由另一个函数返回)。但是MLton seems to have a non‑standard special structure for this (我不确定理解的结构),并且在其他一些文档中,提到特殊优化( using jumps ,如第 58 页,打印第 51 页上快速提到的)带有延续,即,而不是对函数的命名调用关闭。另外,函数闭包有时似乎被描述为延续的基础,但没有被描述为延续,而有时人们则断言相反(函数闭包是延续的特殊情况,而不是其他方式)。

举个例子,延续与此有何不同,以及使用延续而不是带有闭包的函数看起来相同的内容:

datatype next = Next of (unit -> next)

fun f (i:int): next =
(print (Int.toString i);
Next (fn () => f (i + 1)))

val Next g = f 1
val Next g = g ()
val Next g = g ()
val Next g = g ()

我想知道这个问题,无论是在一般的计算机科学环境中,还是在实际的 SML 环境中。

注意:问题可能看起来与“difference between closures and continuations”相同”,但阅读这篇文章并没有回答我的问题,也没有以实际案例为基础。除了它促使我添加另一个问题:为什么延续被认为比闭包更抽象,如果最终延续是由闭包组成的,正如上面链接中不完整的(在我看来)答案所暗示的那样?

差异真的很重要还是只是风格/语法/词汇的问题?

我觉得单子(monad)与延续之间也出现了类似的问题,但这对于单个问题帖子来说太多了(但如果相反,可以暂时简单地回答,随意……)。

<小时/>

更新

仍然来自 MLton 的世界,这种措辞似乎表明延续和函数闭包是相同的(除非我理解不正确)。

CommonArg (mlton.org) ,靠近页面底部,说道:

What I think the common argument optimization shows is that the dominator analysis does slightly better than the reviewer puts it: we find more than just constant continuations, we find common continuations. And I think this is further justified by the fact that I have observed common argument eliminate some env_X arguments which would appear to correspond to determining that while the closure being executed isn’t constant it is at least the same as the closure being passed elsewhere.

这两个词所表达的意思是一样的,不是吗?

类似地,可能更明确,在本页底部:ReturnStatement (mlton.org) .

那里也有,好像也是一样的。是吗?

最佳答案

似乎存在术语困惑。 “延续”是一个抽象概念,是一个表达式的上下文的含义。闭包是一种非常特殊的实现方式表示函数的值(高阶语言可以在没有闭包的情况下实现,例如,使用替换语义)。

控制运算符可以捕获当前的延续并生成它的特定表示(这称为具体化)。捕获的延续的特定表示可能确实是一个闭包——也可能不是。例如,在 OCaml 中,delimcc 库捕获的延续被表示为抽象数据类型的值(其实现与闭包有很大不同)。您可能会发现下一页的介绍部分很有用。 Undelimited continuations are not functions

关于closures - 函数闭包与延续,一般和 SML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com