【发布时间】:2014-04-24 22:22:22
【问题描述】:
我是一名中级 Haskell 程序员,在严格的 FP 和非 FP 语言方面拥有大量经验。我的大多数 Haskell 代码都分析中等大小的数据集(10^6..10^9 东西),所以懒惰总是潜伏着。我对 thunk、WHNF、模式匹配和共享有相当好的理解,并且我已经能够使用 bang 模式和 seq 修复泄漏,但是这种配置文件和祈祷的方法让人感觉肮脏和错误。
我想知道有经验的 Haskell 程序员是如何在设计时处理懒惰的。我不是在问简单的项目,比如 Data.ByteString.Lazy 或 foldl';相反,我想知道您如何看待导致运行时内存问题和棘手调试的低级惰性机制。
您如何看待设计时的 thunk、模式匹配和共享?
您使用哪些设计模式和惯用语来避免泄漏?
你是如何学习这些模式和习语的,你有一些好的参考吗?
如何避免过早优化非泄漏非问题?
(2014-05-15 修订时间预算):
您是否将大量的项目时间用于查找和修复内存问题?
或者,您的设计技能是否通常会规避内存问题,并且您会在开发周期的早期获得预期的内存消耗?
【问题讨论】:
-
这在很大程度上取决于您正在开发的应用程序类型。
-
如果您在为特定问题设计解决方案方面更加具体,则此问题可能会在流量和答案方面看到更多。就目前而言,它非常广泛,而且离题很近。就个人而言,我很乐意看到这个问题得到解答。
-
我在设计时不会想到这些东西。它们是实现细节。 耸耸肩
-
可能更适合programmers.stackexchange.com,因为它比特定问题更具概念性。似乎属于“开发方法和流程”,这是一个明确列出的适合程序员的主题。
标签: haskell design-patterns memory-leaks lazy-evaluation