gpt4 book ai didi

haskell - GHC的非懒惰分支

转载 作者:行者123 更新时间:2023-12-04 01:38:33 24 4
gpt4 key购买 nike

我听说有一个 GHC 分支默认编译成严格的代码,而惰性可以通过注释来启用。 (IIRC,他说一家金融公司开发分支并将其用于生产代码。)这是真的吗?我找不到它。

该人士还建议,严格评估比惰性评估(默认情况下)更实用的观点越来越得到认可。
我在 Haskell 邮件列表中没有发现这一点,但也许那是因为那里的人不注重实践?

我在严格的 Haskell 上找到的所有内容都是明确的,例如 $!rnf .虽然我发现惰性评估非常优雅,但我想在 Haskell 中开发一个程序,我想避免空间泄漏并希望具有可预测的性能。

免责声明:我不是在为严格辩护,我只是想看看严格的 Haskell 或类似的东西。

最佳答案

您正在寻找 Disciple .

所以在 Haskell 中有两种懒惰需要区分。有惰性 I/O,这是一种可憎的东西,可以通过 iteratee 库解决(无耻插件:包括我的 pipes 库)。然后是纯计算中的惰性,这仍然存在争议,但我将尝试总结惰性的主要优点,因为您已经熟悉缺点:

懒惰更有效

一个简单的例子是:

any = foldr (||) False
any查找列表中的任何值是否为 True .这只评估直到第一个 True 的元素,所以列表是否很长并不重要。

惰性只计算它必须的量,这意味着如果你将两个惰性计算链接在一起,它实际上可以提高结果计算的时间复杂度。 This Stack Overflow comment给出了另一个很好的例子。

这实际上是 iteratee 库非常节省资源的原因。他们只做尽可能多的工作来生成结果,这导致非常有效的内存和磁盘使用以及非常易于使用的语义。

懒惰本质上更易于组合

使用严格语言和函数式编程的人都知道这一点,但实际上我在处理 pipes 时无意中证明了这一点。库,其中惰性版本是唯一允许 Category 的版本实例。管道实际上可以在任何 monad 中工作,包括纯 Identity monad,所以我的证明也可以转化为纯代码。

这就是为什么我相信一般的惰性确实是编程的 future 的真正原因,但是我仍然认为 Haskell 是否“正确”地实现了惰性是一个悬而未决的问题。

关于haskell - GHC的非懒惰分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784124/

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