2012/7/2 Yusuke Endoh <mame / tsg.ne.jp>:
> 遠藤です。
>
> 2012/06/26 SASADA Koichi <ko1 / atdot.net>:
>> (2012/06/26 4:51), KOSAKI Motohiro wrote:
>>> 例外だと握りつぶせますけど、そこで kill
>>> したつもりのスレッドが生き残ってしまって誰が嬉しいんだっけという話だと思います。個人的には例外にしてしまうとたぶん壊れるコードが出てくるので変えたくないなあ。
>>>
>>  そうですよね.1.8 もそうだし,ここは変えないということで.
>
>
> その特殊な Object の意図はおそらく「握りつぶされたくない」だと
> 思うのですが、しかし実際には ensure を使えば握りつぶせます。
>
>
>   th = Thread.new do
>     begin
>       begin
>         sleep 1
>       ensure
>         p $!
>         raise
>       end
>     rescue
>       retry
>     end
>   end
>   sleep 0.5
>   th.kill
>
>   $ ruby t.rb
>   nil
>   nil
>   nil
>   ... (繰り返す、^C で止められない)
>
>
> かといって、この挙動を変えるべきではないと思います。
> ensure が実行されないとリソースのリークやデータの欠損が発生
> しかねないと思うので。

素晴らしい洞察ですね。しかしこの挙動は実装をしらないと絶対想像つかないはずで、
Thread.kill のケースで retryが動いてしまっているのはバグではないでしょうか

# これを許すぐらいならThreadKilledException に賛成したくなる