ruby-trunk-changes r40935 - r40964

今日は TracePoint のイベント新規追加やフックの実行を遅延させる postponed job というしくみの導入、objspace でオブジェクトを確保したスクリプト上の位置を記録する機能の追加など、新機能がたくさんありました。

naruse:r40935 2013-05-27 00:51:13 +0900

tool/make-snapshot で autoconf を実行するところで環境変数 AUTOCONF を参照するようにして、実行するコマンドを変更できるようにしています。

svn:r40936 2013-05-27 00:51:17 +0900

version.h の日付更新。

ko1:r40937 2013-05-27 01:19:04 +0900

r40933 で追加した RGENGC 関連の Hash オブジェクトの write barrier 挿入の変更の追加だと思いますが、Hash の st_table を読み込み専用の目的でアクセスする時のために rb_hash_tbl_raw() という関数を追加して、write barrier を破棄せずにアクセスをするようにしています。

ko1:r40938 2013-05-27 01:43:21 +0900

RGENGC_PROFILE というマクロを 2以上に定義した時に RGENGC のプロファイル情報に収集する項目を追加しているようです。

ko1:r40939 2013-05-27 02:27:42 +0900

RGENGC_PROFILE が 2以上に定義されていた時に収集する RGENGC のプロファイル情報にもうひとつ promote_operation_count というのも追加しています。

ko1:r40940 2013-05-27 06:30:44 +0900

Ruby の C API に後で finalizer の実行をするタイミングで実行するために関数ポインタを登録しておく rb_postponed_job_register() および rb_postponed_job_register_one() という関数を追加しています。 GC 中や blocking region (GVL 解放中)で Ruby のメソッドの利用を含む処理を使えないので後で実行するジョブを登録しておく、というような用途で使えるのではないかと思います。 直接の用途としては [ruby-core:53478] [Feature #8107] のオブジェクトを確保した位置を保存する機能の追加のために導入したみたいなので、その2つの用途のどちらでもなさそうですが……。

nobu:r40941 2013-05-27 06:31:05 +0900

r40940 の行末の空白除去

nobu:r40942 2013-05-27 06:31:07 +0900

r40940 で新規追加したディレクトリの svn property 設定。

ko1:r40943 2013-05-27 08:40:01 +0900

r40940 で新規追加したテスト用の拡張ライブラリの Init_xxx() 関数の名称が規約に沿っていなかったのを修正。

nobu:r40944 2013-05-27 08:41:04 +0900

r40940 で新規追加したファイルの svn property 設定。

nobu:r40945 2013-05-27 08:42:41 +0900

r40940 で新規追加したファイルの svn property 設定。

ko1:r40946 2013-05-27 09:21:02 +0900

TracePoint のイベントに RUBY_INTERNAL_EVENT_NEWOBJ, RUBY_INTERNAL_EVENT_FREE, RUBY_INTERNAL_EVENT_GC_START などのオブジェクトの確保/解放/GC開始時に対応するイベントを追加しています。また RUBY_EVENT_SWITCH を RUBY_INTERNAL_EVENT_SWITCH と改名して、RUBY_INTERNAL_EVENT_XXX という名称のイベントは Ruby インタプリタの内部的な動作に関するイベントとするように命名規則をつけたみたいです。
この内部的イベントでは ruby のメソッド呼び出しなどの機能は使えないそうなので、ここで r40940 で導入した rb_postponed_job_register() を使うことを想定していたようです。 TracePoint のイベントだったかー。
このしくみを使って拡張ライブラリからフックを挿入してオブジェクトの確保時の情報などを付加することができるということみたいです。 [ruby-core:53478] [Feature #8107]

nobu:r40947 2013-05-27 09:23:48 +0900

r40946 で新規追加されたディレクトリの svn property 設定。

ko1:r40948 2013-05-27 09:24:23 +0900

r40940 で追加したテスト用の拡張ライブラリの引数名やクラス名の typo 修正。

nobu:r40949 2013-05-27 09:26:54 +0900

r40940 で新規追加されたファイルの svn property 設定。

nobu:r40950 2013-05-27 11:16:00 +0900

r40940 で新規追加されたファイルの最後の行に改行がなかったので追加しています。

nobu:r40951 2013-05-27 11:16:02 +0900

r40946 で新規追加されたファイルの svn property 設定。

kazu:r40952 2013-05-27 14:46:42 +0900

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

ko1:r40953 2013-05-27 16:17:30 +0900

r40940 で追加した rb_postponed_job_flush() と rb_postponed_job_register() で malloc(3)/free(3) のかわりに ruby_xmalloc()/xfree() を利用するようにしています。 これらのメモリ管理用の関数は GC 途中でも呼び出していいからとのこと。と、書いてあるのですが、ruby_xmalloc() は GC を走らせる可能性があるので本当かなぁ、というのと、rb_memerror() で例外を発生させる可能性があるので、使える場所に制限が増えてしまわないかなぁという懸念を憶えるのですがどうでしょう。

tmm1:r40954 2013-05-27 16:55:59 +0900

r40940 のコメントの typo 修正。

nobu:r40955 2013-05-27 17:33:44 +0900

vm_insnhelper.c で符号つき整数と符号なし整数を比較しているところのコンパイラ警告抑制のために明示的キャストを付加しています。

nobu:r40956 2013-05-27 17:33:47 +0900

tool/rbinstall.rb が再帰的にディレクトリをコピーする処理に最大の再帰レベルを指定できるようにしています。また空のファイルはコピーせず例外を発生させるようにしています。 よく状況がわかりませんがおかしな環境で make install に失敗するのに対処しているようです。 [ruby-core:55101] [Bug #8432]

ko1:r40957 2013-05-27 19:01:45 +0900

拡張ライブラリ objspace に ObjectSpace.trace_object_allocations というメソッドを新設して、TracePoint に追加されたイベントを利用してオブジェクトにそのオブジェクトを確保した位置を記録して調査できるようにしています。

nobu:r40958 2013-05-27 19:04:55 +0900

r40957 で新規追加したファイルの svn property 設定。

ko1:r40959 2013-05-27 19:28:25 +0900

TracePoint のイベントのマクロ名 RUBY_INTERNAL_EVENT_FREE を RUBY_INTERNAL_EVENT_FREEOBJ に改名しています。

akr:r40960 2013-05-27 22:11:06 +0900

include/ruby/ruby.h で定義されている struct RHash の要素数を返すマクロ RHASH_SIZE() の結果が符号つき整数と符号なし整数の比較の警告が出るのを抑制するため明示的な st_index_t へのキャストを追加しています。

ko1:r40961 2013-05-28 00:19:36 +0900

r40940 で導入した時のコメントが r40953 の変更で間違ったコメントになってしまっていたのを削除しています。

svn:r40962 2013-05-28 00:19:41 +0900

version.h の日付更新。

ko1:r40963 2013-05-28 00:40:27 +0900

TracePoint にさらに新しいイベント RUBY_INTERNAL_EVENT_GC_END を追加して after_sweep() の実行後に呼び出すフックを登録できるようにしています。

ko1:r40964 2013-05-28 00:46:09 +0900

r40963 の ChangeLog に Lazy Sweep を使わない時のイベントフックの呼び出しタイミングの解説を追加しています。