Concurrency

Concurrent ML の ivar in OCaml, Concurrent Cell: http://d.hatena.ne.jp/osiire/20081011
ウチでも同じようなことをしております(が、クローズドなので)。なのでこれには注目していきたい!

OCaml で multi thread なプログラムを書くと、初めのころは、大抵、

Thread.create! 媚びろ〜!! 媚びろ〜!! 俺は天才だ ファハハハ!!

な感じで初期アミバ様状態なのですが、油断していると、というか、大体すでに CAMLC=ocamlc -thread としている時点でアミバ的に油断しているのですが、

お前(のプログラム)はもう死んでいる。もう1000行書いてみろ

心配するな おれは天才だ おれに不可能はない!! Mutex.lock!

Segmentation fault

うわっ うわああ うわらば

ということになります。どんなに天才アミバ様でも、どっかで mutable operation を lock 掛けずにやってしまうので、まずうまくいきません。じゃあってことで至る所 mutex で守っても、dead lock したり、天才どころか醜くなるだけで相変わらず seg fault。プロジェクト終了。Ha,Haskell なら(副作用ないから)、よかったのか?ML終了の予感?

というのが私の ocamlc -thread に対する印象だったんだけど、CML 風にいろいろ書いてやると、

あ、あれ?Thread.create、Mutex.lockなんか一つも書かない(まあ、内部ではやってるわけだけど)のに平行に計算するよ! なんか monadic に綺麗に書けるよ! 無駄に thread 作らなくても concurrent になってるので、副作用バリバリでも Seg fault しないよ! あ、なんか体が軽い!光が見える!自由だー!(エクスタシーによる臨死体験)

というわけです。

大体 -thread 使うときって、ほんとにほしいのは手軽で安全な concurrency であって、ガチで multi thread がほしいって訳じゃないんですよね。

でも、実は内部が良くわかってないので、

Concurrent Programming in ML

Concurrent Programming in ML

を注文しました。