【问题标题】:Is there any reason not to use StrictPragma most of the time?大多数时候有什么理由不使用 StrictPragma 吗?
【发布时间】:2015-11-16 09:08:32
【问题描述】:

GHC 未来版本将支持https://ghc.haskell.org/trac/ghc/wiki/StrictPragma

因此评估可能类似于 C、JavaScript 等其他语言。

严格的评估看起来更有助于性能和对代码执行的理解。

是的,有像 (&&) 这样的函数你需要使用惰性参数,但应该经常使用,你可以使用~

那么,有什么理由不大部分时间使用 StrictPragma 吗?

【问题讨论】:

  • 我认为这将是自以为是的-在这种情况下,这意味着我们也需要一些 strict_base-IMO Haskell 应该坚持它的惰性根-如果您遇到很多麻烦,您可以随时选择另一种语言(大多数都是严格的)——对我来说,这是 Haskell 的一大优点,我可以使用默认的惰性语言来玩/尝试
  • “在 Haskell 的未来版本中”——究竟是什么版本? (GHC 的,不是 Haskell 的)

标签: haskell lazy-evaluation evaluation


【解决方案1】:

这实际上取决于手头的数据类型。在列表中它会非常有害。

f n = foldl' (+) 0 [1..n]

可以在恒定空间中运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间。

无限列表习语变得不可能

head $ filter p [1..]
zip xs [1..]
fibs = 0:1:zipWith (+) fibs (tail fibs)

在高性能数字代码中,严格性通常会带来更好的性能。

【讨论】:

  • 但是,它更多的是关于数据结构而不是严格性吗?您可以使用任何语言创建惰性列表或无限列表。
  • @ais 尝试用一种严格的语言重新定义foldl',您只需使用惰性数据结构……您很快就会发现抽象泄漏并且您必须更改您的@987654324 @s 签名也是如此
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 2010-12-28
  • 2016-12-13
  • 1970-01-01
  • 2013-12-03
  • 2022-11-10
相关资源
最近更新 更多