2012-09-07 6 views
9

ハスケルでさまざまなアルゴリズムを試してみると、レイジーな評価がしばしば起こるため、メモリリークのあるプログラムを作成することがよくあります。すべての記憶を取っているプログラムは本当に楽しいものではありません。GHC7コンパイルされたプログラムからすべてのメモリを守る方法を教えてください。

GHC6を使用している場合、私は単に.bashrcexport GHCRTS='-M384m'を持っていました。しかしGHC7では、security measureを追加しました。プログラムが-rtsoptsでコンパイルされない限り、コマンドライン引数またはGHCRTSのいずれかでRTSオプションが指定されたときに失敗します。残念ながら、Haskellのプログラムはこのフラグでコンパイルされていないので、この変数を設定するとすべてが失敗します(After upgrading to GHC7, all programs suddenly fail saying "Most RTS options are disabled. Link with -rtsopts to enable them."で発見したように)。

GHCRTSをGHC7で使用する方法や、すべてのメモリを使用しているプログラムを防止する便利な方法はありますか?

+3

もちろん、特定のプロセスのメモリ使用量を制限するだけで、Haskellから独立したソリューションがあります。これはLinuxですか? - しかし、あなたが知っているプログラムに '-rtsopts'を使ってみてください。 – leftaroundabout

+1

@leftaroundabout彼が言っていることは、 'GHCRTS'環境変数を使って自分のプログラムで' -M384M'オプションをデフォルトでオンにしたいのですが、今は他のHaskellツール(おそらく、 'cabal-dev')は、' RTS'パラメータが与えられると失敗します。 –

+4

Linuxでは、 'ulimit -m'を使って、シェルが起動できるメモリプロセスの量を制限することができます。他の* nixはおそらく彼らが受け入れる 'ulimit'スイッチに多少のバリエーションがあります。 – ninjalj

答えて

5

-with-rtsopts=-M384mで独自のプログラムをコンパイルして、コンパイル時にRTSオプションを設定することができます。あなたは.bashrcGHCRTSで実行してはならないプログラムの「ブラックリスト」を設定することもできます。おそらく何か

for i in foo bar baz 
do 
    alias $i="GHCRTS= $i" 
done 
関連する問題