遠藤です。

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 が実行されないとリソースのリークやデータの欠損が発生
しかねないと思うので。

-- 
Yusuke Endoh <mame / tsg.ne.jp>