Haskell函数"seq"的名字从何而来?

  • 本文关键字:quot 函数 seq Haskell haskell
  • 更新时间 :
  • 英文 :


我知道seq用于通过避免不必要的懒惰来提高性能。我只想知道这个名字是从哪里来的?是来自"序列"还是"顺序"?这个名字与严格的评估有什么关系?

它来自序列点。这是 C 语言中一个众所周知的概念,它确实与 Haskell 中的seq运算符非常相似:左边的每个计算都应该在右边的任何计算之前完成

当然,Haskellseq的要求要低一些:它只是要求在评估右边的结果之前,将左边的东西评估为弱头范线形式。它实际上并不能保证任何特定的求值顺序只是如果左边的表达式是⊥那么右边的表达式一定不会被求值。

请参阅pseqdeepseq,了解更接近 C 所称的序列点的更强大的替代方案。


实际上,C 或 C++ 序列点也不能保证计算顺序,只是保证任何副作用的顺序正确。但是,在 C 语言中,副作用无处不在,所以除了低级优化之外,你通常可以假设序列点顺序将被维护,而 GHC 实际上经常会抛弃seq,只要它知道表达式不会发散。

最新更新