ruby-trunk-changes r48409 - r48430

今日はインクリメンタル GC のチューニングや GC.stat の互換性強化などがあります。

akr: r48409 2014-11-14 01:05:37 +0900

ruby 自体のテストを書くためのユーティリティ test/ruby/envutil.rb や find_executable.rb、memory_status.rb を test/lib/envutil.rb に移動しています。 test/lib には ruby のテスト用のライブラリが置かれているのでそこにまとめるようにして test/lib/test/unit.rb で require しておくようにしています。

svn: r48410 2014-11-14 01:06:01 +0900

version.h の日付更新。

shugo: r48411 2014-11-14 01:32:15 +0900

標準添付ライブラリ net/imap で MODSEQ というコマンド?をパースできるように修正しています。 [ruby-core:64203] [Bug #10112]

svn: r48412 2014-11-14 01:32:45 +0900

r48411 で行末の空白があったのを削っています。

ko1: r48413 2014-11-14 05:16:59 +0900

インクリメンタルGC (RincGC という略称を使うようにしたんですね)のパラメータのチューニングをしています。1度の GC の mark のステップでマークする slot の数を開きスロットの数と Major marking でマークした slot 数から計算して調節するようにしています。 現実的なアプリの状態で minor GC の mark で全ての slot をマークしてしまっていて、インクリメンタル GC の意味がなかったのを、状況に合わせて一度に mark する数を調節して停止時間が短くなるように修正しています。

ko1: r48414 2014-11-14 05:31:29 +0900

gc.c でインクリメンタル GC が有効かどうかのチェックに USE_RINCGC を使ってたところを GC_ENABLE_INCREMENTAL_MARK を使うように修正しています。また GC 理由の記録のために RGENGC_FORCE_MAJOR_GC をチェックするようにしています。

normal: r48415 2014-11-14 06:55:28 +0900

succ メソッドの VM 命令での最適化で Time#succ を最適化していたのをやめています。 Time#succ は deprecated なメソッドなので vm_exec_core() のコードサイズを小さくして icache に収まりやすくするようにしています。 いやー、さすが normalperson ですね。コードサイズ削減の鬼です。 [ruby-core:66233] [Feature #10501]

hsbt: r48416 2014-11-14 08:12:45 +0900

r48413 で型の暗黙の変換で clang でビルドエラーになっていたのを修正するためにキャストを追加しています。

normal: r48417 2014-11-14 09:26:26 +0900

rb_yield_splat() に RB_GC_GUARD() を追加してコンパイラ最適化による GC マーク漏れを防ぐようにしています。 [ruby-core:66272] [Bug #10509]

normal: r48418 2014-11-14 10:23:58 +0900

vm_eval.c の rb_eval_cmd() でメソッド呼び出しのために rb_intern("call") を呼んでいたのを定義済みの idCall を使うようにしています。

ko1: r48419 2014-11-14 10:44:57 +0900

gc.c で GC_ENABLE_INCREMENTAL_MARK と GC_ENABLE_LAZY_SWEEP のチェックで条件コンパイルするのが漏れていたのを修正しています。

nobu: r48420 2014-11-14 12:38:42 +0900

昨日の r48397 の影響だと思いますが proc_new() の引数 is_lambda の型を int -> int8_t に変更しています。 VC6 でのコンパイル時警告を修正しているそうです。

usa: r48421 2014-11-14 14:03:38 +0900

NEWS ファイルに Windows 版での IO#nonblock_read, IO#nonblock_write のサポート追加について追記しています。

nobu: r48422 2014-11-14 15:55:05 +0900

r47913 あたりで Symbol GC のための実装で dynamic symbol を ID と対応させて管理しないようにした時に ATTRSET などの元となる Symbol とセットになる Symbol も ID で mask した時の通し番号を別のものを使うように修正しています。 ID には元となる通し番号と、ID_TYPE を指定するビットフラグの組み合わせでできていますが、ID_ATTRSET などの Symbol は :a と :a= などのものは同じ通し番号に ID_TYPE を指定するビットだけ変えたものを使っていたのですが、管理方法の変更で別の通し番号が必要になったそうです。

ko1: r48423 2014-11-14 16:29:33 +0900

GC.stat が返す Hash オブジェクトが 2.2 からインクリメンタル GC も入って項目が変化したので([Feature #9924])、古い項目を参照した時に警告を出力しつつ対応する値があればそれを返すように対応しています。 Hash の default_proc を利用しているようです。

ko1: r48424 2014-11-14 16:35:05 +0900

r48423 の続き。 default_proc_for_compat_func() から compat_key() を切り出して gc_stat_internal() でも使いまわすようにしています。

nobu: r48425 2014-11-14 16:59:55 +0900

r48423 と r48424 の続きで default_proc_for_compat_func() で引数 hash の型をチェックするようにしています。 Hash#default_proc でこの Proc オブジェクトを取り出して呼ばれる可能性があるので、普通は Hash のはずですが別のオブジェクトが渡される可能性もあるとのこと。

usa: r48426 2014-11-14 17:17:42 +0900

r48423 の ChangeLogtypo を修正しています。

akr: r48427 2014-11-14 17:37:47 +0900

tool/update-deps を GNU Make 4.0 をサポートするようにしているそうです。

kazu: r48428 2014-11-14 19:08:15 +0900

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

kazu: r48429 2014-11-14 19:08:25 +0900

r48394 の ChangeLogtypo 修正。

kazu: r48430 2014-11-14 19:08:33 +0900

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