pha*_*dej 12 haskell strictness
我看过很多会谈/阅读博客文章,你应该有严格的字段,data以避免各种性能问题,例如:
data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义.由于对该数据的函数操作是惰性的,因此不会牺牲可组合性.
但是,如果我添加一个Maybe字段:
data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
, personAddress :: !(Maybe Address)
}
Run Code Online (Sandbox Code Playgroud)
我将懒惰引入数据结构,毕竟Maybe是一个控制结构.是不是可以毫无价值地躲在Just构造函数后面?
但是,有严格Maybe的strict或通过strict-base-types.但是根据反向依赖(strict,strict-base-types),它们并没有被广泛使用.
所以问题是:为什么Maybe在非控制数据定义中应该或不应该使用strict ?
使用严格的 Either/Maybe/Tuple 类型的原因:
\n\n如果您分析代码并发现空间泄漏,这可能是堵塞泄漏的方法
严格的数据类型被广泛认为对于高性能代码来说是有用的,即使是最新的 GHC 8.0 语言扩展也是如此
其他人也在这样做(那些严格的包可能不受欢迎,但它们存在是有原因的 \xe2\x80\x93 你也可以说,你需要这些严格的包的应用程序可能不会被上传哈奇)
不的原因:
\n\nPrelude 中没有,所以它是一个额外的包
您可能没有编写高性能代码
你的程序可能不会因为你把爆炸向内推一层而变得更快
如果您正在编写高性能代码,则无论如何您都可以手动强制对 thunk 进行评估Maybe
总的来说,我不认为存在任何一种教条。这只是一个方便的问题。
\n| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |