ruby-trunk-changes r55002 - r55009

今日は Module#deprecate_constant による警告を通常の定数参照でも出るようにする変更や、その他配列の参照の最適化などがありました。

naruse: r55002 2016-05-15 03:43:11 +0900

r54976 でインスタンス変数のインラインキャッシュの共有のために導入された struct rb_iseq_compile_data::ivar_cache_table を st_table から rb_id_table に変更して、初期化を最初の要素を追加する時まで遅延するようにして不要なテーブルの確保を抑制しています。

svn: r55003 2016-05-15 03:43:12 +0900

version.h の日付更新。

nobu: r55004 2016-05-15 08:21:31 +0900

random.c の rand_init() で r54994 と同様に seed 計算に使った buf を explicit_bzero() でゼロクリアするようにしています。

nobu: r55005 2016-05-15 10:57:28 +0900

Module#deprecate_constant で deprecate とマークした定数を Module#const_get で参照すると警告が出るという機能を、namespace なしでの通常の定数参照でも有効にしています。 [ruby-core:75505] [Bug #12382]

nobu: r55006 2016-05-15 12:03:45 +0900

random.c の random_ulong_limited() で n bytes の連続した bit mask を作る初期化で long が 32 bit 以下で shift 量が long の幅を超える場合に警告が出るので、条件分岐を入れて shift を使わず全bitを立てるようにしています。

naruse: r55007 2016-05-15 16:17:46 +0900

Array#[ ] で引数が整数の時という最もよく使われるケースを実装している rb_ary_entry() で rb_ary_elt() を offset が負数の時の正規化した後で呼んでいたのを、同様の処理を関数内に展開しています。 RARRAY_LEN() の分岐が繰り返されるのを避ける最適化のためみたいです。

seki: r55008 2016-05-15 20:59:00 +0900

標準添付ライブラリ drb で dRuby でプロセスをまたがったオブジェクト参照を考慮して GC を抑制するための DRb::TimerIdConv::TimerHolder2 で Thread を使っていたのを、Thread なしにして add や fetch を呼ぶ時に expire してないかチェックして参照を消すようにしています。 Thread が停止されないというのを修正するためだそうです。 add や fetch が呼ばれないと消えないけどそれはいいんでしょうか。まあ最後の1つの参照が消えないというだけなので、どうせ exact GC でないし、あまり問題ないような気はします。 [ruby-core:75331] [Bug #12342]

nobu: r55009 2016-05-15 22:54:57 +0900

io.c で PRI_OFF_T_PREFIX というフォーマット文字列用の指示子のマクロを独自に定義して使っていましたが、このマクロ定義は削除して PRI_OFFT_PREFIX を利用するようにしています。 cygwin での指示子が間違ってたそうです。