Haskell 有什么理由大部分时间不使用StrictPragma吗?
在GHC的未来版本中将提供对的支持 因此,评估可以类似于其他语言,如C、JavaScript等 严格的评估对于性能和对代码执行的理解更为有利 是的,有些函数如(&&)需要使用惰性参数,但应该经常使用,并且可以使用Haskell 有什么理由大部分时间不使用StrictPragma吗?,haskell,lazy-evaluation,evaluation,Haskell,Lazy Evaluation,Evaluation,在GHC的未来版本中将提供对的支持 因此,评估可以类似于其他语言,如C、JavaScript等 严格的评估对于性能和对代码执行的理解更为有利 是的,有些函数如(&&)需要使用惰性参数,但应该经常使用,并且可以使用~ 那么,有什么理由在大多数时间不使用StrictPragma吗?这取决于手头的数据类型。在名单上,这将是相当有害的 f n = foldl' (+) 0 [1..n] 可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间 无数的成语变得不可能了 head
~
那么,有什么理由在大多数时间不使用StrictPragma吗?这取决于手头的数据类型。在名单上,这将是相当有害的
f n = foldl' (+) 0 [1..n]
可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间
无数的成语变得不可能了
head $ filter p [1..]
zip xs [1..]
fibs = 0:1:zipWith (+) fibs (tail fibs)
在高性能数字代码中,严格往往会带来更好的性能。但是,它更多地是关于数据结构而不是严格吗?您可以用任何语言创建惰性或无限列表。@AI尝试用一种严格的语言重新定义
foldl'
,您只需使用惰性数据结构即可。。。你很快就会发现抽象泄漏,你必须改变你的foldl'
s签名。我认为这将是非常固执己见的-在这种情况下,这意味着我们也需要一些严格的基础-IMO Haskell应该坚持它的懒惰根源-如果你有很多麻烦,你可以选择另一种语言(大多数都是严格的)-对我来说,这是Haskell的一个优点,我可以“在Haskell的未来版本”中使用默认的惰性语言-确切地说是什么版本?(属于GHC,而不是Haskell)