如何保护GHC7编译的程序占用所有内存?

Pet*_*lák 9 haskell memory-leaks ghc

在Haskell中使用各种算法时,我经常遇到我创建一个内存泄漏的程序,因为它经常发生在懒惰的评估中.占用所有记忆的程序并不是很有趣,如果我意识到这太晚了,我常常难以杀死它.

当使用GHC6时,我只是export GHCRTS='-M384m'在我的.bashrc.但是在GHC7中,他们添加了一个安全措施,除非编译一个程序,否则-rtsopts当它在命令行参数或者命令行参数中被赋予任何RTS选项时,它就会失败GHCRTS.不幸的是,几乎没有Haskell程序用这个标志编译,所以设置这个变量会使一切都失败(正如我在升级到GHC7后发现的那样,所有程序突然失败说"大多数RTS选项被禁用.链接-rtsopts启用它们. ").

任何想法如何使用GHCRTSGHC7,或另一种方便的方法如何防止我的程序占用所有内存?

Dan*_*ner 5

您可以编译自己的程序,-with-rtsopts=-M384m以便在编译时设置RTS选项(一劳永逸).您还可以设置一个不应该GHCRTS在您的计划中运行的程序的"黑名单" .bashrc; 也许是这样的

for i in foo bar baz
do
    alias $i="GHCRTS= $i"
done
Run Code Online (Sandbox Code Playgroud)