ruby-trunk-changes r52357 - r52394

今日は CI でのテストの対策やオブジェクト生成の高速化、RubyGems の更新や bundled gems のバージョン更新などがありました。2.3 のリリースに向けてコミット数が増えてきて活発になってきましたね。

usa: r52357 2015-10-29 23:21:05 +0900

test/ruby/test_io.rb で子プロセスを起動する時に :rlimit_nproc を指定するかどうかを RUBY_PLATFORM で判定していたのを Process::RLIMIT_NPROC をチェックするように修正しています。

nobu: r52359 2015-10-29 23:31:48 +0900

encoding.c の ENC_ASSERT() をビルド時に無効なら消えるように式として展開されるようにして、また T_STRING 型のオブジェクトをチェックする MUST_STRING() というマクロも定義して使うようにしています。

naruse: r52363 2015-10-30 06:08:30 +0900

r52311 や r52326、r52331 などのテストの Solaris 上の CI のために GC を追加したり :rlimit_core を設定したりした変更を revert しています。

naruse: r52364 2015-10-30 06:08:33 +0900

finalizer 中の SIGINT 受信時のテストで Solaris 上で psig(1) を使って signal mask を表示させるようにしています。 CI のテストの調査のため。

svn: r52365 2015-10-30 06:08:52 +0900

version.h の日付更新。

ko1: r52366 2015-10-30 06:14:29 +0900

VM_CHECK_MODE が1以上の時に VM の control frame をチェックするデバッグ用の関数 vm_check_frame_detail() で frame type が VM_FRAME_FLAG_BMETHOD の時に req_me を真にして method entry があるかどうかチェックするようにチェックを強化しています。

ko1: r52367 2015-10-30 06:16:19 +0900

vm.c で常に VM_CHECK_MODE を 0 に定義するようになっていたので、未定義の時だけ(コンパイルオプションなどで与えられなかった時は) 0 にするように修正しています。

ko1: r52368 2015-10-30 06:21:13 +0900

VM の setinlinecache 命令で IC::ic_value::value が Qundef だったら iseq の mark_ary に登録するようにしていましたが、そもそも未初期化なのがおかしいので VM_ASSERT() でデバッグ時はチェックしつつ分岐を削っています。

ko1: r52369 2015-10-30 06:45:07 +0900

rb_vm_cref() にて cfp のチェックに 0 を使ってたところを NULL に修正しています。

ko1: r52370 2015-10-30 06:47:05 +0900

rb_vm_get_cref() でもポインタのチェックに 0 でなく NULL との比較を使うように修正。また vm_env_cref() に inline 修飾子を追加しています。

ko1: r52371 2015-10-30 07:43:45 +0900

r49874 で class << obj; end のような特異クラス記法で独自の定数を定義できるように namespace を持つようにしたのですが、inline cache の扱いを追随させているようです。

hsbt: r52373 2015-10-30 09:57:28 +0900

bundled gems の test-unit と minitest のバージョンをそれぞれ 3.1.5 と 5.8.2 に更新しています。

normal: r52374 2015-10-30 10:40:28 +0900

rb_st_insert_id_and_value() の引数から st_table *tbl を削って、関数内で RCLASS_IV_TBL(obj) を使って取り出すようにリファクタリングしています。

naruse: r52375 2015-10-30 10:57:57 +0900

test/ruby/test_io.rb で子プロセス内で Process.setrlimit を使っていたところを assert_separately に渡すオプションで Process.spawn にオプションを渡して設定するようにしてシンプルにしています。

naruse: r52376 2015-10-30 10:58:13 +0900

r52364 の Solaris での CI のための signal mask の表示を再修正して Process.kill でシグナル送信後の情報を表示するようにしています。また Solaris での表示だけでなくて /proc/self/status があったら(Linux?)それも表示するようにしています。

nobu: r52377 2015-10-30 11:31:38 +0900

r52376 の再修正。 エラー時のメッセージ psig の結果や /proc/self/status を追加するところの文法の間違いを修正。

normal: r52378 2015-10-30 11:37:59 +0900

r50678 で T_DATA 型のオブジェクトのインスタンス変数の管理を変更した時の不具合修正とのことで、generic_ivar_remove() で第3引数 valp に削除した値を返すはずが代入していなかったのを修正しています。 また generic_ivar_remove() の引数 valp を st_data_t* から VALUE* に変更しています。

nobu: r52379 2015-10-30 12:02:14 +0900

r52378 でのテストの assertion 追加で assert_raises -> assert_raise に変更したり assert_not_send を利用したりと assertion の修正。

nobu: r52380 2015-10-30 12:07:06 +0900

rb_st_insert_id_and_value() という関数の名前を rb_class_ivar_set() と改名しています。

hsbt: r52381 2015-10-30 12:36:21 +0900

Module#method_defined? の rdoc 用コメントに protected や private のメソッドの場合についてサンプルを追加しています。あれ、private メソッドは継承されると効かないのか。またテストにも protected/private のメソッドのケースを追加しています。 https://github.com/ruby/ruby/pull/1071 https://github.com/ruby/ruby/pull/1072

hsbt: r52382 2015-10-30 12:49:06 +0900

r52381 の ChangeLog エントリの名前の修正。

hsbt: r52383 2015-10-30 12:56:06 +0900

obj.?meth 記法でメソッド呼び出しが行なわれる時だけ引数が評価されることを確認するテストを追加しています。 https://github.com/ruby/ruby/pull/1066

nobu: r52384 2015-10-30 13:37:13 +0900

テストで assert_raises を使っているところを assert_raise を使うように一括で置換しています。

naruse: r52385 2015-10-30 14:30:21 +0900

r52375 でテスト時の rlimit 設定に Proc.spawn に渡すオプションを利用するようにしたところで、rlimit_nofile を 1034 にしようとしていたところ、古い Linux では rlimit_nofile に 1024 という hard limit がありこれ以上増やせないそうなので、やっぱり子プロセス内で Process.setrlimit して Errno::EPERM を捕捉してスキップするようにしています。

naruse: r52386 2015-10-30 14:55:09 +0900

r52364、52376 などでの Solaris での CI で signal mask を表示するようにした件の続きですが、psig(1) や /proc/(pid)/status の情報を親プロセスのぶんも表示させるようにしています。

naruse: r52387 2015-10-30 16:01:36 +0900

テスト用のユーティリティ EnvUtil の子プロセスのエラー表示用の Proc オブジェクト FailDesc で子プロセスの標準出力などの先頭に "| " という prefix をつけるための String#gsub の呼び出し前に String#b でエンコーディングを ASCII-8BIT 化しておくようにしています。

nobu: r52388 2015-10-30 16:17:08 +0900

r52384 でテストの assert_raises を assert_raise に一括置換したのを、fiddle のテストについては元に戻しています。なんでだろ。

ko1: r52389 2015-10-30 18:33:08 +0900

newobj_of() で GC の起動が必要な時の newobj_slowpath() の呼び出しを wb_protected の引数を渡すかわりにここで分岐して、newobj_slowpath_wb_protected() と newobj_slowpath_wb_unprotected() という関数を導入してこれを呼ぶようにしています。結局これらの関数では引数に wb_protected を受け取る newobj_slowpath() を呼ぶので、なんだかまわりくどい感じですが、これによって引数を register だけで渡すようにしているそうです。こっちの引数の数が fastpath のほうにも影響するということかな? また fastpath と slowpath の分岐の LIKELY() を削っています。

ko1: r52390 2015-10-30 19:09:50 +0900

heap_get_freeobj_from_next_freepage() で使っていた UNLIKELY() を削っています。多分削ったほうが速かったということかと。

naruse: r52391 2015-10-30 19:18:29 +0900

finalizer 中の SIGINT 受信のテストや SIGQUIT 受信のテストで子プロセスの最初に Signal.trap でデフォルトの挙動にするようにしています。親プロセスの設定(SIG_IGN など)が引き継がれる場合があるので、それをリセットするためですね。多分 Solaris での CI 失敗の対策だと思われます。

ko1: r52392 2015-10-30 19:30:47 +0900

newobj_slowpath() で newobj_init() に渡す flags から FL_WB_PROTECTED を削っていましたが、独立した引数で明示的に指定するようになったので削らなくても良くなりました。

ktsj: r52393 2015-10-30 21:14:10 +0900

bundled gems の power_assert を 0.2.5 に更新しています。

kazu: r52394 2015-10-30 22:40:17 +0900

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