首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哈斯克尔的严格点是什么?

哈斯克尔的严格点是什么?
EN

Stack Overflow用户
提问于 2018-04-16 23:56:19
回答 2查看 0关注 0票数 0

那么,什么时候必须对某些事情进行评估呢?有些地方Haskell必须严格要求。我称这些为“严格点”,尽管这个术语并不像我想象的那样普遍。据我说:

Haskell的缩减(或评估)发生在严格点。

我的直觉说mainseq/bang模式、模式匹配以及任何IO通过main是最主要的严格点,但我不知道为什么我知道。

编辑:关于这个问题的其他想法。

正如我在这个问题上的思考,我认为在严格点的定义中增加一些东西会更清楚一些。严格点可能有变化语境变化多端深度(或严格)回到我的定义,“Haskell中的缩减只发生在严格点”,让我们在这个定义中添加这个子句:“只有在评估或缩小其周围的上下文时,才会触发严格点。”

所以,让我试着让你开始寻找我想要的答案。main是一个严格的点。它被特别指定为其上下文的主要严格点:程序。当程序(main的上下文)被评估,主体的严格点被激活。Main的深度是最大的:必须对其进行充分的评估。main通常由IO操作组成,这些操作也是严格的点,其上下文是main

现在你试着:讨论seq和模式匹配在这些术语中。解释功能应用的细微差别:它是如何严格的?怎么可能不呢?那...deepseqletcase口供?unsafePerformIODebug.Trace?高层定义?严格的数据类型?爆炸模式?等等。这些项目中有多少可以用seq或模式匹配来描述?

EN

回答 2

Stack Overflow用户

发布于 2018-04-17 08:53:34

这将告诉你什么时候用类似于GHC的Core的小语言来计算表达式。然后剩下的问题是如何将完整的Haskell映射到Core,大部分翻译都是由Haskell Report自己提供的。在GHC中,我们称之为“desugling”,因为它去掉了语法糖。

好吧,这并不是全部,因为GHC包含了一系列在去标记和代码生成之间的优化,许多这些转换将重新安排Core,以便在不同的时间对事情进行评估(特别是严格性分析将导致事情得到更早的评估)。你的程序将被评估,你需要看看核心产生的GHC。

也许这个答案在你看来有点抽象(我没有特别提到邦模式或seq),但你要求的是什么。精确这是我们所能做的最好的。

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 09:22:27

首先,我们可以如下所示:

  • 执行IO操作将评估它们“需要”的任何表达式。(因此需要知道IO操作是否被执行,例如,它的名称是main,或者它是从main调用的,需要知道该操作需要什么。)
  • 正在计算的表达式,将计算它需要的任何表达式。

从直观的列表中,main和IO操作属于第一类,seq和模式匹配属于第二类。但是我认为第一类更符合你关于“严格点”的观点,因为事实上,这就是我们在哈斯克尔所做的评价的结果。可见性对用户的影响。

给出所有的细节是一项很大的任务,因为Haskell是一门很大的语言。它也很微妙,因为并发Haskell可能会投机性地评估事物,即使我们最终没有使用结果:这是导致评估的第三种事情。第二类是很好的研究:想看看严格性所涉及的职能。第一类也可以被认为是一种“严格性”,尽管这有点诡异,因为evaluate xseq x $ return ()其实是不同的东西!如果将某种语义提供给IO Monad(显式传递RealWorld#令牌适用于简单情况),但我不知道这种分层严格性分析一般是否有名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档