ruby-trunk-changes r42044 - r42071

今日は Set#to_set が self をそのまま返すようにする仕様変更、RGenGC について主に Array の実装で不要な Write Barrier を抑えるようにする最適化などがありました。

akr:r42044 2013-07-18 21:58:46 +0900

bignum.c の bary_sq_fast() でループの最後の1回の処理をループ内から外の括り出すようにしています。また bigfixize() で条件を修正しています。

zzak:r42045 2013-07-18 22:50:32 +0900

ドキュメントやコメント内の "ruby" を "Ruby" と capitalize しています。 https://github.com/ruby/ruby/issues/341

glass:r42046 2013-07-18 23:47:27 +0900

r42043 と同様に Array#sql でも2つの配列の RARRAY_PTR() が一致していたらその先の比較をスキップする最適を施しています。

eregon:r42047 2013-07-19 00:55:04 +0900

Array#count に引数を渡して == を再定義してその中で Array のサイズを切り詰めるケースのテストケースも追加しています。 [ruby-core:56072] [Bug #8654]

svn:r42048 2013-07-19 00:55:08 +0900

version.h の日付更新。

akr:r42049 2013-07-19 01:07:03 +0900

テスト用の拡張ライブラリで pack.c というファイル名で Init_pack() という初期化関数を作ってしまったため、本体の Init_pack() と同名のため Solaris でテスト側の初期化関数が呼ばれなくてテストがエラーになるそうなので、ファイル名を変更して初期化関数名も Init_intpack() に変更しています。 [ruby-dev:47526] [Bug #8655]

zzak:r42050 2013-07-19 11:12:20 +0900

lib/rake/file_utils_ext.rb と lib/rake/testtask.rb のコメントでも "ruby" を "Ruby" と capitalize しています。 https://github.com/ruby/ruby/pull/341

knu:r42051 2013-07-19 11:22:11 +0900

標準添付ライブラリ set.rb の Set#to_set がこれまでコピーを返していたのを自分自身をそのまま返すようにしています。 NEWS ファイルにも非互換の変更として追記しています。 https://github.com/ruby/ruby/pull/359 元は Set() メソッドで追加しようとしていたのですが to_set の変更という対応にしたようです。 [ruby-core:55952] [Feature #8626]

zzak:r42052 2013-07-19 11:24:31 +0900

lib/rubygems のファイル群のコメントでも "ruby" を "Ruby" と capitalize しています。 https://github.com/ruby/ruby/pull/341
rubygems の変更は upstream にも反映されてるんでしょうか?

zzak:r42053 2013-07-19 11:26:08 +0900

lib/rdoc/ 配下のファイル群のコメントでも "ruby" を "Ruby" と capitalize しています。 https://github.com/ruby/ruby/pull/341
これも upstream への反映が必要ですね。

zzak:r42054 2013-07-19 11:27:25 +0900

ext/psych/lib/ の配下のコメントでも "ruby" を "Ruby" に capitalize しています。
https://github.com/ruby/ruby/pull/341
upstream (ry

zzak:r42055 2013-07-19 11:28:16 +0900

lib/racc/parser.rb の rdoc 用コメントでも "ruby" を "Ruby" に capitalize しています。 racc は……、あれ公開リポジトリはあるのかなぁ。 https://github.com/ruby/ruby/pull/341

akr:r42056 2013-07-19 12:06:12 +0900

configure.in の コメントの typo を修正。

akr:r42057 2013-07-19 12:35:53 +0900

拡張ライブラリ socket のテストで TCPSocket.new にローカル側のアドレスの指定がありそれがエラーになった時のテストで Windows 環境だと先にサーバのポートでエラーになってしまってチェック内容を変更しないといけなかったのを、ローカルのアドレスとして利用できないアドレスを検出してそれを指定することでエラーを起こす方法に変更しています。

ktsj:r42058 2013-07-19 13:40:07 +0900

dir.c の Dir.new, Dir.open, Dir.foreach, Dir.entries などのメソッドが :encoding オプションを受け付けていることを rdoc 用コメントに追記しています。

nagai:r42059 2013-07-19 13:43:16 +0900

拡張ライブラリ tk の extconf.rb でリンクする tk の Tcl/Tk のバージョンを 8.4 と 8.5 だけに絞っています。 8.6 は現在未サポートとし、8.0 もサポート終了(?)としています。元は 8.7 というのも含まれてたみたいですね。
また Mac OS X 環境でのヘッダファイル検索時の引数のミスの修正をしています。 [ruby-core:56084] [Bug #8656]

ktsj:r42060 2013-07-19 14:21:38 +0900

拡張ライブラリ pathname の Pathname#inspect でパスの文字列を RSTRING_PTR() で char * を取り出して rb_sprintf() で整形していたのを PRIsVALUE (%i) 指示子を使うことで String オブジェクトをそのまま渡すようにしています。

ko1:r42061 2013-07-19 15:00:28 +0900

r42038 で array.c に追加したデバッグ用に Write Barrier の保護が外れたイベントのログを蓄積する関数の引数に VALUE を使っていたのですが include/ruby/ruby.h を #include する前で VALUE が使えないので unsigned long で宣言していましたが VALUE と long のバイト幅が一致しない環境もあるので void * に変更しています。

ko1:r42062 2013-07-19 15:11:09 +0900

gc.c に rb_gc_writebarrier_remember_promoted() という関数を追加しています。 internal.h にプロトタイプ宣言を追加しているので ruby 本体のソース内で呼べるようにしていますが、まだ呼び出しているところはないみたいです。内容は rgengc_remember() を呼んで引数の obj を remember set に追加するというものです。「RGenGC の Write Barrier 戦略に強く依存した実験的な API」だそうです。

ko1:r42063 2013-07-19 15:21:12 +0900

array.c の Array#equal や Array#push の実装内で配列のバッファを取り出すのに RARRAY_PTR() を使っていたところで、書き込みを行なわない場合には Write Bbarrier を含まない RARRAY_RAWPTR() を利用するようにしています。なるほどバッファ内に書き込みしない時は RARRAY_RAWPTR() を使うのですね。

ko1:r42064 2013-07-19 15:34:18 +0900

array.c の rb_ary_store() で配列サイズを拡張する時に Qnil でクリアする時にも、書き込みはしますが新たなオブジェクトへの参照が書き込まれないので Write Barrier が不要なので RARRAY_PTR_USE() というマクロを利用しています。なるほど、書き込むとしても Qnil とか即値だけなら Write Barrier を使わなくてもいいんですね。

ko1:r42065 2013-07-19 19:10:31 +0900

array.c に Write Barrier 保護つきで配列オブジェクトの一部を VALUE の配列で上書きする処理を ary_memcpy() という関数を追加して利用するようにしています。

ko1:r42066 2013-07-19 19:16:31 +0900

array.c の RGenGC 絡みの修正続き。 rb_ary_resurrect() で書き込みをしないバッファの取り出しを RARRAY_PTR() から RARRAY_RAWPTR() に変更。また rb_ary_new_from_values() では ary_memcpy() を利用するようにしています。新しく作った配列に格納しているのでまだ新世代のはずなので、Write Barrier の保護は不要なので RARRAY_PTR_USE() で直にセットしていましたけど r42065 で追加したチェック付きの ary_memcpy() を使うようにしています。念のため?

ko1:r42067 2013-07-19 19:19:19 +0900

r42066 で array.c のデバッグ用の機能を有効にする #define RGENGC_UNPROTECT_LOGGING 1 が一緒にコミットされてしまっていたので 0(off) に戻しています。

akr:r42068 2013-07-19 19:29:46 +0900

test/ruby/test_array.rb の未使用のローカル変数削除や組み込みクラス Fixnum の演算子の再定義のなどの警告除去。

akr:r42069 2013-07-19 19:57:47 +0900

test/ruby/test_array.rb でブロックパラメータによる外側のローカル変数の遮蔽の警告除去。

ko1:r42070 2013-07-19 20:08:13 +0900

array.c に ary_mem_clear() という Array のバッファの指定した範囲を Qnil でクリアする関数を追加して各所で利用するようにしています。また Write Barrier なしの RARRAY_RAWPTR() でよいところを RARRAY_PTR() から置き換える変更もいくつか一緒にしています。

ko1:r42071 2013-07-19 21:12:31 +0900

array.c の RGenGC 絡みの修正続き。 rb_ary_modify() でも書き込みしない配列のバッファのポインタ取り出しを RARRAY_RAWPTR() に置き換えて、またバッファの書き換えに ary_memcpy() を利用するように変更して不要な Write Barrier 保護をしないように最適化しています。