Parallel and Concurrent Programming in Haskell 読書会 第5回
#PCPjH mask_ は mask の restore が無い版。mask を quasiquote とすると mask_ は quote。
2013-10-14 17:33:01前回も言ったように、GHC HEAD (7.8.1) の readMVar は primitive になっています。(もちろん、説明のためにはこの本やコメントに書いてある実装の方が良いですけれど。) https://t.co/PYhGTdZ914 #PCPjH
2013-10-14 17:36:03#PCPjH "Timeouts" の節の直前のコードきわどい。大変きわどい。takeMVar/putMVar がブロックしないと中断可能にならないからセーフとかトリッキーすぐる。
2013-10-14 17:38:27Uniqute の実装(newUnique 関数の実装には、atomicModifyIORef 関数が使われている。なぜ実装に STM を使わない(使えない)のかについては、コメントを参照のこと) http://t.co/Rl8nxYR57s #PCPjH
2013-10-14 17:43:30#PCPjH スレ A と B がお互いに throwTo 合戦した場合、throwTo 自身が割り込み可能な関係で必ず一方が勝つようになっている。ややこしい。
2013-10-14 17:52:21#PCPjH このへんの並行プログラミングの同期の難しさは他の言語とあんまり変わらんなー。まだ低レベル API をカバーしてるからではあるんだけど、ちょっと自分でガチコードで使う気にはならない。後の章で紹介される STM に期待。
2013-10-14 17:53:39#PCPjH 例外ハンドラの中で非同期例外が飛ぶとどんなプログラマも涙目になってしまうので、Haskell ランタイムはハンドラは全部自動的に mask する。落とし穴:ハンドラがいつまでも返らないといつまでも mask から出なくなってしまう。
2013-10-14 17:59:06#PCPjH forkIO で生まれたスレが実行を開始する前に非同期例外が飛んでくると死産になってしまうので、forkIO は親スレの mask 状態を子スレに継承させる。なので mask $ \res -> forkIO (try (res ...)) とかでおk。
2013-10-14 18:05:00[再掲かな?] handle = flip catch http://t.co/3PXug2VhW8 #PCPjH
2013-10-14 18:05:14Control-C = AsynException 型の UserInterrupt http://t.co/itJ55jKHhr #PCPjH
2013-10-14 18:07:50#PCPjH STM をデフォルトで使うのが一番。性能面で問題が出るまで MVar+非同期例外からはひたすら逃げまわるのが一番。 …という空気が醸成されております
2013-10-14 18:11:21#PCPjH "dining philosophers problem" というフレーズでは明らかに philosopher という単語が「頭おかしい人」の意味で用いられている。
2013-10-14 18:20:18Parallel and Concurrent Programming in Haskell のサンプルコードはHackageに上げられてた。。。 http://t.co/sIuGlcjISB #PCPjH
2013-10-14 18:20:35休憩終わり。 Chapter 10. Software Transactional Memory 開始 #PCPjH
2013-10-14 18:23:09まず MVar を使ったプログラムの例を見せて、問題点を指摘し、問題の解決策として STM を紹介するというストーリー #PCPjH
2013-10-14 18:33:38