ruby-trunk-changes r29669 - r29679

今日はいろんなコミッタの方々によるコミットがありました。にぎやかな感じでいいですね。

kou:r29669 2010-11-02 21:47:18 +0900

NEWS ファイルの typo 修正

tenderlove:r29670 2010-11-03 06:24:54 +0900

拡張ライブラリ psych の Psych::Visitors::Visitor#accept の実装を case文による分岐から Hash を使ったものにして高速化しています。数値や Symbol、文字列だと VM が勝手にこの最適化をしてくれるんですけど、ここでは when に Class が渡されているので自前でやっています。

svn:r29671 2010-11-03 06:25:15 +0900

version.h の日付変更。

tenderlove:r29672 2010-11-03 06:25:27 +0900

Psych::Visitors::Visitor からインスタンス変数 @started, @finished とその reader を削除しています。Visitor クラスは継承して子クラスを使うためのクラスらしいので、そちらで適切な実装をしなさいということのようです。そして実際に継承している YAMLTree に実装が移動されています。

akr:r29673 2010-11-03 07:37:08 +0900

[ruby-core:32689] で報告されている、rb_clear_cache_by_class が頻繁に呼ばれるために non-blocking I/O のパフォーマンスが悪くなっているという現象の修正です。Class/Module が GC で回収される際にメソッドキャッシュのクリアが必要ないか検査されるのですが、インスタンスメソッドをひとつも持っていない Class/Module の場合はキャッシュを検査するまでもないのでスキップするようにしています。ところでなぜ non-blocking I/O で Class/Module が GC されるかというのは、ちょっと自信がないんですけど、read_nonblock や write_nonblock が発生する Errno::EAGAIN 例外はただの Errno::EAGAIN のインスタンスではなくて、そこに IO::WaitReadable や IO::WaitWritable を extend したものなので、extend するために特異クラスが発生してそれが GC 対象になるためだと思います。特異クラスじゃなくて IClass かな。 [追記] T_ICLASS はたんに Module のエイリアスとして挿入されるだけでメソッドエントリを持たないので、GC の回収時にメソッドキャッシュのクリアは呼ばれていませんので、特異クラスのほうですね。[/追記]
修正内容はほんの3行ですが、奥深い修正でした。

matz:r29674 2010-11-03 07:50:31 +0900

irb正規表現のオプション(/aaa/mi みたいに後ろにつく文字のことですね)が複数あると正しく parse できない不具合修正。[ruby-core:32988].

ko1:r29675 2010-11-03 10:01:12 +0900

USE_VALUE_CACHE の条件コンパイルオプションを削除しています。これは rb_thread_t あたりに Thread 毎に VALUE の配列をキャッシュとして持っていて、なにやら最適化の為に使ったりするらしい雰囲気を醸し出していたものの、実際には使われていなかったものです。消すことになったようです。
[追記][ruby-dev:42522] にあるように、Thread が本当に並行に動く実装の時に、解放したオブジェクトの struct RVALUE を使い回すためのものだったようです。freelist を Thread 毎にする提案がされているので、パッチを読んで予習しておかねば。[/追記]

nobu:r29676 2010-11-03 14:13:54 +0900

String#<< で文字を連結した結果、文字列の encoding が不正な状態になっているのに valid_encoding? が true を返してしまう現象の修正です。[ruby-core:33027]

nobu:r29677 2010-11-03 14:17:25 +0900

OpenStruct#delete_field でキーを削除した時に writer method の定義も削除するようにしています。[ruby-core:33010]

nobu:r29678 2010-11-03 14:23:56 +0900

irb正規表現の parse のところで連結(Regexp#|)を使っていたところを文字クラスを使うように修正しています。

nobu:r29679 2010-11-03 14:24:02 +0900

make install の時に SUDO が設定されていたらそれを使うようにしています。環境変数に設定して make install すれば使えるんじゃないかと思います。

$ SUDO=sudo make install

こんな感じでしょうか。