ruby-trunk-changes r30595 - r30603

今日は RubyGems 1.5 (release candidate) のマージ(とその後の修正)により同梱されている RubyGems が最新版に追随し(というか、RubyGems へ CRuby の trunk で加えられた変更を取り込んだものらしいです)、gemspec の文字コード問題と、直接 gem パッケージが require できない問題が解決されたようです。また gem_prelude を廃止する前よりは若干遅いものの、起動もだいぶ早くなっていてうれしいです。
またいくつか SEGV や潜在的な不正メモリアクセスの修正もありました。

naruse:r30595 2011-01-19 02:56:10 +0900

[ruby-dev:43062] によると sprintf("%f", 1e-7) を実行した時に不正なメモリアクセスがあったため、バッファの先頭の 0 クリアを追加しています。

svn:r30596 2011-01-19 02:56:12 +0900

version.h の日付更新。

mame:r30597 2011-01-19 03:17:29 +0900

'!_=%w~' のように、条件式の中の代入文の右辺に %w の閉じトークンがないものが書かれると SEGV する不具合を修正 [ruby-dev:43067] [Bug #4290]
さすが超絶技巧プログラマですね。こんな構文の不具合なかなか踏みそうにないです。

ところで、右辺が "" のような文字列の時と %w[] のような文字列 配列の時で警告の有無が違うのはただの警告漏れでしょうか。

% ruby -ve '!_=""'
ruby 1.9.3dev (2011-01-19 trunk 30599) [i686-linux]
-e:1: warning: found = in conditional, should be ==

% ruby -ve '!_=%w[]'
ruby 1.9.3dev (2011-01-19 trunk 30599) [i686-linux]

ryan:r30598 2011-01-19 07:38:34 +0900

r30589 の rubuygems/source_index.rb での gemspec ファイル読み込みの修正を revert しています。lib/rubygems は外部リポジトリで管理されてるのでそちらと同期させるためには 1.8 compatible じゃないとだめとのこと。

ryan:r30599 2011-01-19 09:08:49 +0900

rubygems 1.5.0 がマージされています。でかい。
gemspec の読み込み部分は元に戻されたままなので Encoding.default_internal を指定するテストで警告が出そうなものですがそれは出なくなっています。

しかし、この時点では require "rspec" みたいに gem パッケージを require するのが失敗するようになっていました。

drbrain:r30600 2011-01-19 12:09:42 +0900

RubyGems で削除された rubygems/source_info_cache.rb を require しているのを削っている、とあるのですが、 remove_source_caches というメソッドを消したりしていて、ファイルを削ったのがコミットミスだったんじゃないかという疑問も。

kosaki:r30601 2011-01-19 12:21:52 +0900

Proc オブジェクトへのブロック渡しの呼び出しでコンパイラの最適化により GC されすぎるために GC.stress = true 下で OptionParser に対応していないオプションを解析させると SEGV していた不具合を修正。 [Bug #4238][ruby-dev:42963]

drbrain:r30602 2011-01-19 12:33:00 +0900

rubygems/custom_require が 有効になっていなかった(RUBY_VERSION > "1.9" の条件で除外されてた)ので条件を削除。この修正で require できるようになりました。RubyGems の本家にも反映されているようなので一安心です。 https://github.com/rubygems/rubygems

drbrain:r30603 2011-01-19 13:17:17 +0900

rubygems/source_info_cache.rb 関連コードの消し漏れがあったようです。