Vistaの延期はおれを直撃ああ、MSDNは1月で期限切れなのだった。お代官様わかりましただ。Rubyでデッドロックスクリプトがいきなりデッドロックだと言い出したのでびっくりして(スクリプトではなく)eval.cを眺めたら、なるほど確かにスクリプトのバグだった。うんと短縮するとこんな感じ。q.deqend.join実行すると次のようになる。dl.rb:5追記:考えてみたら、これはスクリプトのバグを示しているのに、ソースを見なければメッセージの意味がわからんという困ったやつだな。いうわけで読み方の説明。(追記の追記:スクリプトのバグじゃない可能性があるかも知れないのでwait_forの内容をまじめに出してるのかも)deadlockという行はすべてのスレッドの状態を示す。ソースファイル:行番号メインスレッドはワーカスレッドの終了を待つ。ワーカスレッドはエンキューを待つ。したがってどのスレッドも動けない。デッドロックというのはたすき掛けの競合状態をさすと思いこんでいたので、最初、原因がわからなかった(もちろん本当のスクリプトは遙かに複雑な仕組みだ)。すべての割り込みやシグナルやOSネイティブなキューによる実行状態への遷移を見誤ると無意味にデッドロックと判定されて困ることになるし、かといって永遠に待たれるのはバグを見つけるチャンスが相当減ることになる。考えてみたが、OSネイティブスレッドを利用した場合は、いずれにしろ、すさまじく限定された範囲でしかデッドロックは検出できないだろう(dlを利用して直接OSの機能とか呼ばれたらお手上げだ)。プログラミング言語によるバグ検出というのは、せいぜい静的型チェックとか文法エラーに毛が生えた程度のものを想像していたのだが、現在のRubyの実行時のバグ検出能力は遙かにレベルが高いな、と思ったのだった(言語ではなくスレッドライブラリがうまくできているのだ、という言い方も出来るのでちょっと違うかな?)。すげーよマイクロソフト知らぬはおればかりなりなのだとは思うけど、良くまあ、このドメインを取得できたものだな。