ruby-trunk-changes r47483 - r47517

今日は主に GC.stat の項目の変更やら構造体のサイズ削減の最適化などがありました。

nagachika: r47483 2014-09-10 03:23:11 +0900

r47444 のインクリメンタルGC 追加時に MEMZERO() の第2引数に型をわたすべきところを sizeof() したサイズを渡してしまっていた不具合を修正。

svn: r47484 2014-09-10 03:23:18 +0900

version.h の日付更新。

ko1: r47487 2014-09-10 07:32:09 +0900

RGENGC_PROFILE で RGenGC の統計情報を出力する時の rb_objspace_t 構造体のメンバー名の変更や GC.stat のキー名の変更など。

ko1: r47488 2014-09-10 10:42:09 +0900

GC.stat が返す GC の統計情報の名称変更や項目追加をしています。 :heap_available_slots というキーを追加しています。 [ruby-core:63021] [Feature #9924]

ko1: r47489 2014-09-10 10:48:23 +0900

r47488 での GC.stat のキー名変更にテストを追随させています。

ko1: r47490 2014-09-10 11:13:41 +0900

GC.stat の GC 統計情報に :total_allocated_pages と :total_freed_pages という項目を追加しています。それぞれ文字通り page(slot の配列)の確保/解放回数が管理されるようです。 [ruby-core:63021] [Feature #9924]

ko1: r47491 2014-09-10 11:35:17 +0900

引き続き GC.stat のキー名の改名。 [ruby-core:63021] [Feature #9924]

ko1: r47493 2014-09-10 11:47:05 +0900

引き続き GC.stat のキー名の改名。 [ruby-core:63021] [Feature #9924]

ko1: r47495 2014-09-10 11:53:11 +0900

更に GC.stat のキー名の改名。 [ruby-core:63021] [Feature #9924]

ko1: r47496 2014-09-10 11:59:46 +0900

GC.stat の rdoc 用コメントに記述されていたサンプルをキーの追加、キー名の変更にあわせて改名しています。

usa: r47505 2014-09-10 14:16:21 +0900

先日の r47221 で EUC-KR の文字変換テーブルを追加したのに make しても反映されなかった(更新されなかった)ので、依存関係を反映させるようにしています。 enc/ の下の依存関係は enc.mk に書かれているので、常に enc.mk を指定して make するようにしています。依存関係に PHONY を追加すると常に再実行させることができるんですね。 [ruby-dev:48530] [Bug #10220]

normal: r47506 2014-09-10 15:01:36 +0900

Time の実装で TypedDateStruct で持たせたポインタの NULL チェックをしているところは、NULL にはなりえないのでチェックを削ってわずかに高速化させています。 [ruby-core:64907] [Feature #10219]

svn: r47507 2014-09-10 15:01:50 +0900

r47488 の変更の行末の空白除去。

normal: r47508 2014-09-10 15:14:07 +0900

rb_iseq_t の iseq と iseq_encoded というメンバの利用方法を変更して、iseq には disassemble や line_trace_(all|specify) などの RubyVM::InstructionSequence の特殊な機能を使うときだけコピーを作成するようにして、通常は iseq_encoded にのみ命令列を格納するようにしています。 なんとなく名前が逆転してるっぽい(元は iseq -> iseq_encoded にコピーされてたらしい)ですが、これで不要なメモリ確保や解放時の判定をシンプルにしているようです。 [ruby-core:64663] [Feature #10185] [ruby-core:64883]

normal: r47509 2014-09-10 15:32:44 +0900

構造体 rb_call_info_t のメンバの型の変更とアライメントを意識した順番の変更で構造体サイズを削っています。 1クラスあたりのインスタンス変数の数の上限が long から int になりましたが、まあそんなに使わない(というか先にメモリ容量が尽きる)ので問題ないでしょう。

ko1: r47510 2014-09-10 16:24:24 +0900

GC.stat のテストでチェックの条件を緩和(?)しています。

nobu: r47511 2014-09-10 17:04:59 +0900

pack.c の pack_pack() で、指示子 "p" と "P" によるポインタの取り出し時に nil (Qnil)に対して rb_obj_taint() を呼ばないようにしています。 実際には ruby スクリプトからは nil.taint は呼べる(何もしない)のですが、rb_check_frozen() を回避するためっぽいですね。 nil の freeze 化の布石と思われます。

nobu: r47512 2014-09-10 17:05:12 +0900

r47509 で rb_call_info_t の aux.index の型を long から int にした関係で念のためオーバフローしていないかチェックを追加しています。

nobu: r47513 2014-09-10 17:05:19 +0900

r47508 で追加した rb_iseq_original_iseq() で、不正なキャストをしていたところ(int 型の変数に代入するところで VALUE にキャストしていた)を削除しています。

nobu: r47514 2014-09-10 17:22:03 +0900

ObjectSpace.define_finalizer にファイナライザとして call メソッドがないオブジェクトを渡した時の例外メッセージの組み立てで PRIsVALUE を使うことでクラス名のエンコーディングを保持したままメッセージを作成するようにしています。

nobu: r47515 2014-09-10 17:25:05 +0900

date のテストで nil.frozen? についてチェックしていた assertion を削除しています。これも nil.freeze 化の布石っぽいですね。

ko1: r47516 2014-09-10 17:53:56 +0900

compile.c の rb_vm_addr2insn() を rb_vm_insn_addr2insn() に改名しています。

normal: r47517 2014-09-10 18:00:06 +0900

r47512 で追加した rb_call_info_t::aux.index のオーバフローチェックの重複していたチェックを削除しています。