我Heap exhausted在一个足够大的数据集上运行以下简短的Haskell程序时收到消息.例如,程序在20 Mb输入文件上失败(堆溢出),大约900k行.堆大小设置(通过-with-rtsopts)为1 Gb.如果longestCommonSubstrB被定义为更简单的东西,它运行正常,例如commonPrefix.我需要处理大约100 Mb的文件.
我使用以下命令行编译程序(GHC 7.8.3):
ghc -Wall -O2 -prof -fprof-auto "-with-rtsopts=-M512M -p -s -h -i0.1" SampleB.hs
Run Code Online (Sandbox Code Playgroud)
我希望任何帮助使这个东西在合理的空间(按输入文件大小的顺序)运行,但我特别欣赏找到瓶颈所在的思维过程以及在何处以及如何强制严格.
我的猜测是,以某种方式强制longestCommonSubstrB功能严格评估会解决问题,但我不知道该怎么做.
{-# LANGUAGE BangPatterns #-}
module Main where
import System.Environment (getArgs)
import qualified Data.ByteString.Lazy.Char8 as B
import Data.List (maximumBy, sort)
import Data.Function (on)
import Data.Char (isSpace)
-- | Returns a list of lexicon items, i.e. [[w1,w2,w3]]
readLexicon :: FilePath -> IO [[B.ByteString]]
readLexicon filename = do
text <- B.readFile filename
return …Run Code Online (Sandbox Code Playgroud) 是否有可能在 Windows 上安装真正可移植的 Haskell,以便与 Haskell 相关的所有内容都发生在一个目录下。我希望能够在 U 盘上安装 Haskell,这样我只需插入它就可以在任何其他 Windows 计算机上使用它。
这意味着当我说cabal install somePackage一切都发生在本地并且相对于该单个目录时(nb 对于不同的计算机,可能会为 USB 驱动器分配不同的驱动器号)。我希望能够cabal install somePackage在任何 Windows 计算机上运行它。此外,如果我可以将 USB 记忆棒的内容复制到本地硬盘并且它仍然可以从那里工作(在某些 Windows 机器上 USB 记忆棒安装为只读),那就太好了。
我知道这里和这里有以下相关的 StackOverflow 问题。我可以以使用相对路径的方式设置 cabal 的配置文件吗?其他 Haskell 工具(例如 winghci)呢?
那么,我该怎么做呢?以可移植模式安装 Haskell Platform 然后做什么?