self.receive がREPLでブロックされちゃう件について

原因わかったっぽい
0
Kenji Yoshida @xuwei_k

http://t.co/s5KHPBE9 これその通りためして、固まっちゃって、ターミナルを強制終了したところなう(´・ω・`)

2011-10-28 01:31:12
Kenji Yoshida @xuwei_k

はてなのコメントが編集できない(?)せいで、一人で3連続コメントだよ! http://t.co/DUKaP6zu

2011-10-28 01:53:48
kmizu @kmizu

@xuwei_k ちょっと気になって、実験してみました。 http://t.co/bYqhEg3i 結果、わかったのは、2.9.1.finalのREPLでは、入力ごとに別のスレッドが割り当てられているために、self を入力をまたいで参照すると、同じActorProxy(続く)

2011-10-30 02:04:34
kmizu @kmizu

@xuwei_k が返されないため、メッセージ送った先のselfと別のselfに対してreceiveすると、まだメッセージ送ってないActorに対してreceiveすることになり、結果無限にブロックするということかと。

2011-10-30 02:06:01
Kenji Yoshida @xuwei_k

@kmizu おーなるほど、(REPLの起動の高速化の関連で?) 入力ごとに別スレッドになってるわけですか。 ではバグとは言えないけど、コップ本のサンプルを2.9.1で試すと不都合生じることになって難しいですね・・・

2011-10-30 02:13:55
kmizu @kmizu

@xuwei_k で、2.10のnightly build(scala-2.10.0.r25900-b20111028024913)のREPLで確認してみたところ、やはり同じように固まります。原因も同じようです。 .@xuwei_k さんの環境と何か違ってるのかもしれませんが。

2011-10-30 02:15:24
Kenji Yoshida @xuwei_k

@kmizu いや、自分が2.10を試したのは、"sbt console" からなので、ダウンロードしてきて直にREPLを起動するとそうなるのかもしれません。今試したところ、同じ2.9.1でもsbt consoleから起動すると、入力に違うThreadは割り当てられないみたいです

2011-10-30 02:18:06
Kenji Yoshida @xuwei_k

"sbt console" からではなく、ここから http://t.co/leVFmuTr nightlyダウンロード( 2.10.0.r25900-b20111028020141)してREPL起動して試すと、やはり同じように固まるな

2011-10-30 02:39:15
Kenji Yoshida @xuwei_k

数時間のうちに、2つもblog書くという(`・ω・´)っ http://t.co/auEhgQEd #Scala 2.9.1のREPLにおいて、 Thread を無効にして、コップ本のActorの Sample を実行する方法

2011-11-05 20:40:32