ruby-trunk-changes r41502 - r41542

今日は RGenGC で T_REGEXP と T_STRUCT 型のオブジェクトに write barrier の挿入したり、GC::Profiler のプロファイル情報の追加、収集方法の修正などがありました。

akr:r41502 2013-06-21 00:42:23 +0900

拡張ライブラリ bigdecimal の実装が bignum.c の BDIGIT の定義を利用していたのを、bigdecimal は独自に定義した型を利用するようにしています。 r41379 で bignum.c の BDIGIT の型に uint128_t を利用可能にしたために bigdecimal のテストが失敗することがあったのに対処しています。 [ruby-dev:47413] [Feature #8509]

svn:r41503 2013-06-21 00:42:28 +0900

version.h の日付更新。

ko1:r41504 2013-06-21 05:39:20 +0900

r41453 で gc.c の gc_prof_sweep_timer_stop() で未初期化のまま参照される可能性があった変数のために代入を追加しています。

akr:r41505 2013-06-21 06:45:11 +0900

bignum.c の rb_ull2big() で BDIGIT のサイズに応じて条件コンパイルするようにしてリファクタリングしています。

nobu:r41506 2013-06-21 06:48:03 +0900

test/xmlrpc/test_client.rb に require "openssl" を追加しています。 autoload によるロードをさせないようにするためだそうです。

ko1:r41507 2013-06-21 07:38:08 +0900

GC::Profiler の収集するプロファイル情報に旧世代オブジェクト数や remember set に入っているオブジェクト数などを追加しています。しかし GC_ENABLE_LAZY_SWEEP が 0 に変更されているので LazySweep が off に変更されてしまっているようです。

kazu:r41508 2013-06-21 07:40:56 +0900

r41507 の ChangeLog エントリの typo 修正。

nobu:r41509 2013-06-21 07:41:07 +0900

r41507 での行末の空白除去。

tarui:r41510 2013-06-21 08:08:30 +0900

gc.c で objspace->heap.sweep_slots を参照して lazy_sweep 中かチェックしていたところで定義済みのマクロ is_lazy_sweeping() を利用するようにするリファクタリング

ko1:r41511 2013-06-21 08:10:34 +0900

struct objspace 内の rgengc に関するメンバを USE_RGENGC が真に定義されている時だけ宣言するように条件コンパイルの分岐を追加しています。

tarui:r41512 2013-06-21 08:15:18 +0900

gc.c でビットマップを実装するために bits_t という型を導入しています。内容は変化していませんが。

ko1:r41513 2013-06-21 09:24:14 +0900

gc.c の slot_sweep_body() でプロファイル情報の計測のコードをまとめるリファクタリング

nobu:r41514 2013-06-21 09:52:33 +0900

win32/Makefile.sub の config.h の生成時に tool/ifchange の実行する時のオプションに --timestamp を追加しています。不要な再コンパイルを抑制しているのだと思います。

ko1:r41515 2013-06-21 10:26:50 +0900

gc.c で GC に使う各種 bitmap を struct objspace に直接追いていたのから heaps_slot 構造体に移動しています。
なお RGENGC_CHECK_MODE のデフォルト値が 2 に変更されているみたいです。これはミス?

ko1:r41516 2013-06-21 11:20:10 +0900

gc.c の gc_marks_body() とデバッグ用の関数 gc_marks_test() の引数から rb_thread_t *th を削除して、関数内で GET_THREAD() で取得するうようにリファクタリングしています。

ko1:r41517 2013-06-21 12:36:40 +0900

r41515 で RGENGC_CHECK_MODE のデフォルト値を 2 にしてしまっていたのを 0 に戻しています。

ko1:r41518 2013-06-21 14:17:40 +0900

GC::Profiler で収集するプロファイル情報の heap_use_slots、heap_live_objects、heap_free_objects の計算方法を修正しているようです。

nobu:r41519 2013-06-21 14:31:38 +0900

test/ruby/test_env.rb で Windows 版での ENV の全体のサイズの制限についてのテストで上限まで ENV をセットする準備がうまく動いていなかったのを修正しています。またセットした ENV を後始末で戻していなかったので戻すようにしています。

nobu:r41520 2013-06-21 14:31:41 +0900

ENV で環境変数をセットする時にエラーが発生した時に生成する例外のメッセージに環境変数名を追加するようにしています。

ko1:r41521 2013-06-21 14:55:05 +0900

gc.c で GC のプロファイル情報の計算方法を修正しているみたいなのですが、また RGENGC_CHECK_MODE, RGENGC_PROFILE, GC_PROFILE_MORE_DETAIL, GC_ENABLE_LAZY_SWEEP のデフォルト値が変更されてしまっています。このため次で revert されています。

ko1:r41522 2013-06-21 15:04:29 +0900

r41521 を revert しています。

ko1:r41523 2013-06-21 15:08:07 +0900

r41507 で誤って LazySweep が off にされてしまっていたのを戻しています。

nobu:r41524 2013-06-21 15:15:34 +0900

test/webrick/test_filehandler.rb で IO.popen で開いた IO を開きっぱなしにしていて子プロセスを wait していなかったのを、バッククオートによる実行を使うことで修正しています。

nobu:r41525 2013-06-21 15:15:36 +0900

test/webrick/test_filehandler.rb でファイルシステムに NFTS を使っている時だけ使える機能のテストをチェックしてから実行するようにしています。
またチェックしているのは NTFS の代替データストリームという機能が使えるかどうかみたいです。初めて知る機能です。

ko1:r41526 2013-06-21 15:29:30 +0900

GC のプロファイル情報の修正です。 LazySweep が off の時の sweep 時間の集計ができていなかったのを修正しています。また デバッグ用関数 gc_marks_test() で旧世代オブジェクト数や remember set に入った shady オブジェクト数などの集計結果が上書きされてしまうのを復旧するようにしています。

charliesome:r41527 2013-06-21 16:39:15 +0900

拡張ライブラリ openssl で OSSL_X509ATTR_IS_SINGLE() と OSSL_X509ATTR_SET_SINGLE() というマクロ定義で構造体 X509_ATTRIBUTE の構造によってアクセスするメンバーを変更しているところで single というメンバがいないケースでコンパイルエラーが発生していたのを修正しているそうです。これはチケットはないんですかね? ううむ、バックポートが必要なのだろうか。

ko1:r41528 2013-06-21 17:57:18 +0900

benchmark/gc/gcbench.rb で結果のサマリに実行するベンチマーク名を含めたり、実行した ruby の情報の表示を改善したりしています。

akr:r41529 2013-06-21 19:09:34 +0900

bignum.c である型に BDIGIT が入る数を計算しているところで bdigit_roomof() マクロを利用するようにするリファクタリング

ko1:r41530 2013-06-21 19:14:04 +0900

T_REGEXP に write barrier を挿入して Regexp オブジェクトを shady じゃないオブジェクトにできるようにしています。Regexp は immutable なので生成時のみで済んでいるみたいですね。

ko1:r41531 2013-06-21 19:23:39 +0900

r41530 の ChangeLog エントリに T_MATCH にも Write Barrier 挿入は簡単にできるんだけど Match オブジェクトは一時的なオブジェクトであることが多いのでやってない、というコメントを追記しています。

akr:r41532 2013-06-21 19:25:40 +0900

pack.c で Array#pack の指示子が "c" と "C" の時の実装を整数の pack の部分に移動して goto でジャンプするようにしています。

akr:r41533 2013-06-21 19:40:19 +0900

bignum.c で BIGRAD - 1 という式を使っているところで BDIGMAX マクロを参照するようにリファクタリングしています。

ko1:r41534 2013-06-21 20:22:18 +0900

T_STRUCT 型のオブジェクトにも Write Barrier を挿入して shady でないオブジェクト化しています。struct RStruct のメンバーを const 化して操作用のマクロ RSTRUCT_RAWPTR()、RSTRUCT_GET()、RSTRUCT_SET() などを追加しています。

nobu:r41535 2013-06-21 20:26:05 +0900

r41534 の ChangeLog エントリの行末の空白除去。

ko1:r41536 2013-06-21 20:32:57 +0900

vm_eval.c の eval_string_with_cref() で Array の Write Barrier のためのマクロの使いかたが間違っていたのを修正。 RARRAY_AREF() を左辺値として使ってしまっていました。あれ、これ const によるエラーにならないんですね。

ko1:r41537 2013-06-21 20:53:33 +0900

と、思ったら r41536 の問題が顕在化しなかったのは struct RArray の as.heap.ptr および as.ary に const が付いていなかったからだったようで、これらのメンバに const を追加して直接代入がエラーになるようにしています。

ko1:r41538 2013-06-21 21:12:57 +0900

gc.c の allocate_sorted_heaps() で不要になったローカル変数 add を削除しています。

tarui:r41539 2013-06-21 21:31:13 +0900

gc.c の gc_profile_record_flag に GC 理由を表すビットフラグの定義を追加して GC::Profiler.report で詳しい理由を1文字の記号で表示するようにしています。

nobu:r41540 2013-06-21 21:36:06 +0900

r41539 の行末の空白除去。

kazu:r41541 2013-06-21 21:49:58 +0900

r41539 の ChangeLog エントリの typo 修正。

kazu:r41542 2013-06-21 22:00:18 +0900

r41528 の ChangeLog エントリの typo 修正。