ruby-trunk-changes r32600 - r32630

今日はコミット多めでした。???_defined? 系のメソッドに文字列を渡した時に不要なシンボル生成を抑制することでパフォーマンス向上を測る変更とか、Lion 向けの(llvm-gcc 向けの)修正などがありました。

marcandre:r32600 2011-07-22 06:37:43 +0900

CVS.generate がオプション引数の Hash オブジェクトを破壊的に変更してしまっていたので複製を作るようにしています。 [ruby-core:38356] [Bug #5070]

svn:r32601 2011-07-22 06:37:46 +0900

version.h の日付更新。

emboss:r32604 2011-07-22 09:13:07 +0900

拡張ライブラリ openssl で ENGINE という構造体は参照カウント方式でメモリ管理されているようなのですが、参照数のインクリメント不足で ENGINE_get_next() を実行すると OpenSSL 内部で free されてしまっていたのを ENGINE_up_ref() を読んで参照数インクリメントして回避しています。 [ruby-dev:44173] [Bug #5062]

emboss:r32606 2011-07-22 11:21:26 +0900

拡張ライブラリ openssl でハッシュ関数用の構造体の初期化を行なっている EVP_DigestInit_ex() や HMAC_Init_ex() の戻り値をチェックしていなかったので、エラーになった時に不正な状態の構造体を wrap したオブジェクトを返してしまって SEGV など起こす可能性があったので、エラー時には例外を発生させるようにしています。 [ruby-core:37670] [Bug #4944]

drbrain:r32608 2011-07-22 12:16:48 +0900

ruby に同梱されている gems パッケージ由来のライブラリ(rake, rdoc など)が Gem.bin_path("rake") などで取得できるはずのパスにインストールするようにしているようです。けど実際やってみると Gem.bin_path("rake", "rake") のように gem パッケージ名とコマンド名を両方指定しないといけませんでした。 [Bug #4485]

emboss:r32609 2011-07-22 13:11:38 +0900

r32606 で利用するようにした HMAC_Init_ex() は OpenSSL が 1.0.0 よりも前のものでは void 型だったようなので戻り値のチェックを一旦 revert しています。 [Bug #4944]

drbrain:r32612 2011-07-22 13:52:22 +0900

Readline.completion_proc= のサンプルの rdoc を追加しています。 [ruby-core:38200] [Bug #5057]

drbrain:r32614 2011-07-22 13:58:10 +0900

Net::HTTP の rdoc で接続を切るためのメソッドとして誤って close と書かれていたところを finish に改めています。 [ruby-core:38163] [Bug #5045]

nobu:r32616 2011-07-22 16:12:22 +0900

r32608 で同梱 gems パッケージの実行プログラムのインストールをサポートするようにした rbinstall.rb のリファクタリング。 install メソッドに複数のパスを渡せるようにしています。 [Bug #4485]

nobu:r32617 2011-07-22 18:33:41 +0900

Object#respond_to_missing? のデフォルト実装の関数の引数が足りていなかったのを修正。中身が常に false を返すだけなので顕在化していなかったようです。

nobu:r32618 2011-07-22 19:05:49 +0900

parse.y の記号トークンの取得のところで最後の1バイトを文字列の最後を越えて参照してしまう可能性があったところを修正しています。

kazu:r32619 2011-07-22 20:37:06 +0900

respond_to_missing? のテストで再定義している respond_to_missing? の第2引数が省略可能になっていたけど Object#respond_to_missing? は第2引数省略できないので、再定義のほうを変更しています。

nobu:r32620 2011-07-22 20:44:53 +0900

rb_is_global_id() と rb_is_attrset_id() という ID の属性をチェックする関数を公開しています。たぶん次のコミットのための伏線。

nobu:r32621 2011-07-22 21:06:42 +0900

defined? 系のメソッド(const_defined? とか instance_variable?、method_defined? など)へ String を渡した時に内部で Symbol に変換してから確認していましたが、メタプログラミングで大量の文字列でこれらのメソッドを呼ぶと全てシンボル(内部的には ID)が割り当てられて、現在の CRuby では Symbol は一度割り当てられると解放されることがないのでシンボルテーブルが不必要にふくれ上がってしまうので、intern する前に既にその Symbol が割り当て済みかチェックして、まだ割り当てられていなかったらそこでチェックをやめる(Symbol が割り当てられてないということはその名前のメソッドとか変数はまだ定義されていないはず)ようにしています。 [ruby-core:38367] [Feature #5072]

naruse:r32622 2011-07-22 21:29:13 +0900

lib/uri/generic.rb で正規表現をおそらくパフォーマンスのためにリファクタリングしています。

kosaki:r32628 2011-07-22 21:52:25 +0900

vm_call_cfunc() の宣言の引数 recv に volatile 指示子を付けています。 Mac OS X 10.7 (Lion) のコンパイラである llvm-gcc での最適化の不具合で GC 避けに失敗していたようです。 [ruby-dev:44185] [Bug #5074]
Lion さんかなり大胆ですね。

kosaki:r32630 2011-07-22 22:01:12 +0900

r32628 の ChangeLog のチケット番号を修正しています。