【发布时间】:2013-04-19 03:59:40
【问题描述】:
我非常喜欢 Haskell,但我担心 Haskell 的主要问题之一是难以推理空间使用情况。基本上,thunk 和递归的可能性似乎会造成一些棘手的情况,似乎必须通过添加正确的严格性来非常小心,以免程序在特定输入上耗尽内存。
我喜欢 C/C++ 的一点是,我可以很快确定程序空间使用的上限,尤其是在避免递归的情况下。变量一目了然。
我想知道是否有一种方法可以创建 Haskell 的类型安全“命令式”子集,它没有 thunk,并且是严格的。
我了解Data.STRef 提供了可变单元格,但据我了解,这些单元格本身仍然很懒惰并且可以包含 thunk。我正在考虑强制此类单元格中的数据严格,但我不确定如何以类型系统强制执行的方式执行此操作。
我在想类似“Strict Monad”的东西,但也许这不是这样做的正确形式。
【问题讨论】:
-
你见过Disciple language吗?
-
谢谢。我一直在寻找一种方法将其压缩到当前的 Haskell(嗯,就是 GHC)中,但这也很有趣。
-
在具有手动内存管理的程序中内存泄漏的普遍性反驳了您的论点,即很容易确定 C/C++ 程序的空间使用上限。也就是说,很好的问题!
-
@Clinton,哦,作为一名 C++ 开发人员,我深深地不同意内存管理“非常简单”。一般来说,这很困难,而且有很多抽象是因为它你根本无法做到的。
-
@Clinton 这有点像说“在 Haskell 中空间泄漏很容易避免,只需对数据进行管道化并使用严格注释(如有必要)”。当然有办法通过仔细编程来避免空间问题,但保证偶尔会出错,因为所有代码都有错误。
标签: haskell lazy-evaluation strictness