メッセージ。 - ちょっとOCamlを勉強中

# ちょっとOCamlを勉強中

ちょっとOCamlを勉強中。そもそもは、Haskellを使って大量データの統計を取るプログラムを書いていたのだけど、それがうまく動かなかったのだった。うまく動かない原因について、Haskell(GHC)のプロファイラを使って調べてみたのだけど、どうやら大量のデータをプログラムにロードする部分が重いらしい。具体的に言うと、CSVファイルを開いてそこに書かれている数字をreadするのだが、それ(read)が遅い。

もととなるCSVファイルは5MB(100万件)程度。プログラムを実行しているのは、ノートPC上のWindows XP上のcoLinux環境(メモリは192MB割り当てている)。5MBのデータで平均をとったり量子化して分類したりしたいのだけど、スワップを起こして20分以上待っても実行が終了しそうにない。Gaucheで同じプログラムを書き下して実行すると、2分30秒程度で終わるような処理内容なのに。

ちなみに、Haskell(GHC)でのプログラムのチューニングは、次のページの情報が非常に参考になった。
Chapter 25. Profiling and optimization

また、Haskellで性能劣化の原因となる「遅延評価によるスペースリーク」について、次のページの情報が導入として役に立った。
第9回 Haskellはなぜ遅いと思われているのか:ITpro

それでまぁ、現時点では、「Haskellは大量データを一括処理するのには向いていないのだろうなぁ」と結論づけた。だって、readという言語の中身がボトルネックなのだから改善しようがない(言語の中身をいじるほど力がいまのぼくにはない)。で、HaskellにかわるものとしてOCamlを勉強してみることにした。実際のところ、やろうとしている仕事に対してGaucheでも不足はないのだけど、静的型付き言語を魅力的に感じてしまったのだ。

ただ勉強しはじめてみると、OCamlもこれはこれで違和感があるなぁ。たとえば、ファイルの内容をいっぺんに読み込む関数が標準で用意されていないみたい。Gaucheでいうと、file->stringとかcall-with-input-fileとかがない。あとは、GHCみたいにライブラリの依存関係を自動で解決してくれないみたい。GHCだと、「ghc --make test.hs」などとやることで、ライブラリの依存関係を自動で解決してくれる。ちょっとしたことなんだけど、やる気にブレーキがかかるんだよなぁ。んー愚痴。
2008-11-19 10:52:29 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。