2013-08-22 14 views
7

私は本当にハスケルが好きです。特に強い型のシステムです。私がHaskellのプログラムをコンパイルすると、一般にバグがなくなるか、少なくともそれに近いです。ハスケル型安全な空間の使用

しかし、ハスケルの主な問題は、未知のスペースの使用です。少なくともC++では、プログラムの領域使用量についてかなり確信が持てます。オブジェクトを構築して分解するときは非常に明確です。

ハスケルでは、折りたたみのような単純なものは、正しく書き込まなければ、サンクで大量のスペースを使用できます。メモリ不足のためにプログラムがクラッシュすることは、他のバグよりはるかに良いとは言えません。

私はこれらのスペースリークを避ける方法があることを知っていますが、これらのスペースリークを避けるための型安全な方法を探しています。私が間違ってしまうと、何らかのコンパイルエラーが発生します。プログラムが稼動しているときに私のプログラムがメモリ不足に陥ることを願っているだけではありません。例えば、アキュムレータが厳密でない場合、コンパイルエラーを持つフォールドと言ってもよいでしょう)

ハスケルにこのようなことがありますか?

+0

リーク型システムの種類を制御する必要があり、この動物園http://blog.ezyang.com/2011/05/space-leak-zoo/を想定すると?ストリーミングリークの場合、導管で十分です。 –

+0

サンクのリークなど。また、コンジットがスペース使用量を制御するために純粋なコードで動作する方法についても説明できますか?(例:リストで漏れているがコンジットではないもの) – Clinton

+0

コンジットのような構造がいくつかあります。 iteratees、conduit、pipe、io-streamのほか、ストリーム融合と呼ばれる最適化を実行する高性能コンピューティングのライブラリも含まれます。 –

答えて

1

ハスケルのスペースについての推論は非常に困難であることはよく認識されています。サイモンペイトン・ジョーンズ

http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/

によって (1987)古い本は、このトピックに関する特別な章があります。

しかし、単純なジェネレータを使用して特定の方法でHaskellコードを書き込むと、 メモリ使用量を制御できます。次の論文(APLAS 2012で発表)は、かなり複雑なアルゴリズムのメモリとレイテンシについての推論の例を示しています。 pretty printing(BTW、Haskellの標準的なpretty-printingライブラリは最適ではありません) フォーマット時間は O(n)、nは入力の長さです)。実験結果は、メモリと時間の複雑さの予測を確認します。プロットを示すAPLASトークのスライドをご覧ください。

http://okmij.org/ftp/continuations/PPYield/index.html

関連する問題