我正在编写一些一次性的 Haskell 脚本来解决一些Project Euler问题。我真的不想编译它们,因为我必须不断地进行大量更改,但在某些情况下,我发现堆栈空间已用完。
的文档runhaskell
说以下语法应该增加堆栈空间:
runhaskell +RTS -K5M -RTS Script.hs
这永远不会起作用(在我尝试过的任何排列中)。堆栈大小始终保持为 8,388,608。这很令人抓狂,我在谷歌上没有找到太多帮助。
有什么建议么?我究竟做错了什么?
我正在编写一些一次性的 Haskell 脚本来解决一些Project Euler问题。我真的不想编译它们,因为我必须不断地进行大量更改,但在某些情况下,我发现堆栈空间已用完。
的文档runhaskell
说以下语法应该增加堆栈空间:
runhaskell +RTS -K5M -RTS Script.hs
这永远不会起作用(在我尝试过的任何排列中)。堆栈大小始终保持为 8,388,608。这很令人抓狂,我在谷歌上没有找到太多帮助。
有什么建议么?我究竟做错了什么?
我猜你正在使用GHC。新发布的 6.10.1 的用户指南第 4 章说:
当前唯一的 runghc 标志是 -f /path/to/ghc,它告诉 runghc 使用哪个 GHC 来运行程序。
我没有看到在http://hackage.haskell.org/trac/ghc记录的错误。对我来说似乎很蹩脚。我建议在 irc #ghc 或 cvs-ghc 邮件列表上询问。
在其他 Haskell 编译器/解释器中,似乎只有 nhc98 允许您设置最大堆栈大小。根据您的操作系统,nhc98 可能是一个选项。
我正在做同样的事情(Project Euler)并且一直在使用 ghc。诀窍(感谢#haskell!)是告诉可执行文件有更多的堆栈大小而不是编译器。
$ ghc -O2 -o 23 23.hs
$ ./23 +RTS -K128M
只需编译它。
问题123.hs:
module Main where
main = do
print solution
solution = ...
简短而优美的命令行:
ghc --make -O3 Problem123.hs
./Problem123
最后一点:我不确定我会称它们为“脚本”。