Parallel and Concurrent Programming in Haskell 読書会 第5回

2013/Oct/14に開催された"Parallel and Concurrent Programming in Haskell" (by Simon Marlow) の読書会第5回についての呟きをまとめました。今回は、並行プログラミングにおける非同期・同期例外の取り扱いと、STMモナドの話。STM超便利。さくっと把握したい向きは最後の井上さんによるまとめを読みましょう。
5
前へ 1 2 3 ・・ 6 次へ
Jun Inoue @jun0inoue

#PCPjH readMVar は片っ端から withMVar に置き換えましょう。

2013-10-14 17:31:17
Jun Inoue @jun0inoue

#PCPjH mask_ は mask の restore が無い版。mask を quasiquote とすると mask_ は quote。

2013-10-14 17:33:01
shelarcy(しぇらーしぃ) @shelarcy

前回も言ったように、GHC HEAD (7.8.1) の readMVar は primitive になっています。(もちろん、説明のためにはこの本やコメントに書いてある実装の方が良いですけれど。) https://t.co/PYhGTdZ914 #PCPjH

2013-10-14 17:36:03
Jun Inoue @jun0inoue

#PCPjH "Timeouts" の節の直前のコードきわどい。大変きわどい。takeMVar/putMVar がブロックしないと中断可能にならないからセーフとかトリッキーすぐる。

2013-10-14 17:38:27
shelarcy(しぇらーしぃ) @shelarcy

Uniqute の実装(newUnique 関数の実装には、atomicModifyIORef 関数が使われている。なぜ実装に STM を使わない(使えない)のかについては、コメントを参照のこと) http://t.co/Rl8nxYR57s #PCPjH

2013-10-14 17:43:30
Jun Inoue @jun0inoue

#PCPjH timeout t m は timeout を呼んだスレで m を実行する。

2013-10-14 17:46:47
Jun Inoue @jun0inoue

#PCPjH timeout t m で m を時間内に実行し終わった場合、タイムキーパーを殺さないといけない。

2013-10-14 17:47:38
Jun Inoue @jun0inoue

#PCPjH スレ A と B がお互いに throwTo 合戦した場合、throwTo 自身が割り込み可能な関係で必ず一方が勝つようになっている。ややこしい。

2013-10-14 17:52:21
Jun Inoue @jun0inoue

#PCPjH このへんの並行プログラミングの同期の難しさは他の言語とあんまり変わらんなー。まだ低レベル API をカバーしてるからではあるんだけど、ちょっと自分でガチコードで使う気にはならない。後の章で紹介される STM に期待。

2013-10-14 17:53:39
もりた @MoritaYasuaki

#PCPjH 明示的にロック使ったりアトミック命令使いたくなる

2013-10-14 17:54:55
Jun Inoue @jun0inoue

#PCPjH handle と catch てどう違うんだっけ… 互いに flip の関係か。

2013-10-14 17:56:25
Jun Inoue @jun0inoue

#PCPjH 例外ハンドラの中で非同期例外が飛ぶとどんなプログラマも涙目になってしまうので、Haskell ランタイムはハンドラは全部自動的に mask する。落とし穴:ハンドラがいつまでも返らないといつまでも mask から出なくなってしまう。

2013-10-14 17:59:06
コスモ @cosmo__

ghc7.4.xから7.6.1以上に上げるだけでも便利になるんだなぁ。。。(forkFinally関数を見ながら) #PCPjH

2013-10-14 18:02:07
Jun Inoue @jun0inoue

#PCPjH forkIO で生まれたスレが実行を開始する前に非同期例外が飛んでくると死産になってしまうので、forkIO は親スレの mask 状態を子スレに継承させる。なので mask $ \res -> forkIO (try (res ...)) とかでおk。

2013-10-14 18:05:00
Jun Inoue @jun0inoue

#PCPjH STM をデフォルトで使うのが一番。性能面で問題が出るまで MVar+非同期例外からはひたすら逃げまわるのが一番。 …という空気が醸成されております

2013-10-14 18:11:21
Jun Inoue @jun0inoue

#PCPjH 休憩入り。ぶっちゃけ10章予習してないので今から読む(キリ

2013-10-14 18:12:04
Jun Inoue @jun0inoue

#PCPjH "dining philosophers problem" というフレーズでは明らかに philosopher という単語が「頭おかしい人」の意味で用いられている。

2013-10-14 18:20:18
コスモ @cosmo__

Parallel and Concurrent Programming in Haskell のサンプルコードはHackageに上げられてた。。。 http://t.co/sIuGlcjISB #PCPjH

2013-10-14 18:20:35
shelarcy(しぇらーしぃ) @shelarcy

休憩終わり。 Chapter 10. Software Transactional Memory 開始 #PCPjH

2013-10-14 18:23:09
shelarcy(しぇらーしぃ) @shelarcy

まず MVar を使ったプログラムの例を見せて、問題点を指摘し、問題の解決策として STM を紹介するというストーリー #PCPjH

2013-10-14 18:33:38
shelarcy(しぇらーしぃ) @shelarcy

Clojure の STM ってどうなっているの? IO 処理を型などで排除できるの? #PCPjH

2013-10-14 18:46:52
コスモ @cosmo__

STMって他の言語に有るのかなーと調べたらScalaにもあるようだ… http://t.co/BdsOr5WcAD #PCPjH

2013-10-14 18:47:24
前へ 1 2 3 ・・ 6 次へ