ruby-trunk-changes r54037 - r54065

今日は Hash 複製した時に Write Barrier 保護を有効にする最適化や、ベンチマークスクリプトのメモリ使用量のベンチマーク機能追加などがありました。

headius: r54037 2016-03-09 03:38:28 +0900

require のテストで $" ($LOADED_FEATURES) からエントリを削除するのに Array#pop を使っていたのを delete_if を使って require したファイルのエントリを消すようにしています。しかしメソッド名からして pop で取り除くことを前提にしたテストなのでは……と元チケットの [Bug #7530] を確認してみたら、並列での require の排他処理についてのテストみたいなので特に pop には意味はなさそうですね…。

usa: r54046 2016-03-09 08:00:32 +0900

r54027 の変更で不要になった static 変数 disable を win32/win32.c の rb_w32_write_console() から削除しています。

odaira: r54047 2016-03-09 09:28:41 +0900

test/io/wait/test_io_wait.rb の test_wait_readwrite_timeout というテストで IO#wait が AIX では select(2) で pipe の書き込み側の fd についても書き込み可能として判定されてしまうため assertion の条件を変更しています。このテスト自体は IO#wait のタイムアウトの挙動をテストするためのものですが、AIX では pipe を使ってこの挙動を確認できないようです。

nobu: r54048 2016-03-09 12:48:33 +0900

test/lib/memory_status.rb から未使用の変数を削除しています。

nobu: r54049 2016-03-09 13:22:50 +0900

test/lib/memory_status.rb でメモリの使用状況を取得するのに ps コマンドがなかった時の挙動として MiniTest::Skip 例外を利用していたのを定数の有無で skip するかどうかを判定するようにしています。

nobu: r54050 2016-03-09 13:45:27 +0900

hash.c の tbl_update() のコールバック関数の型を typedef で宣言しておくようにしています。

nobu: r54051 2016-03-09 14:14:42 +0900

Hash#to_h が default 値用の設定は引き継ぐけどインスタンス変数はコピーしないという挙動についてのテストを追加しています。

ko1: r54052 2016-03-09 15:02:18 +0900

benchmark/driver.rb で子プロセスがシグナルによって停止した時は終了ステータスの Process::Status オブジェクトの内容を表示させるようにしています。

ko1: r54053 2016-03-09 15:05:53 +0900

大量に old オブジェクトがある状態での GCベンチマークスクリプトを benchmark/bm_vm3_gc_old_???.rb といったファイル名で3つ追加しています。

svn: r54054 2016-03-09 15:05:54 +0900

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

nobu: r54055 2016-03-09 16:17:01 +0900

Hashを rb_hash_dup() で複製する時に作成するオブジェクトの flags に Write Barrier のフラグをセットして作るようにしています。

nobu: r54056 2016-03-09 16:17:02 +0900

Hash#to_h で作成する Hash オブジェクトも r54055 でリファクタリングして括り出した hash_dup() という関数を利用するようにして、デフォルト値に関する flags のビットをコピーして作成するようにしています。

nobu: r54057 2016-03-09 16:17:03 +0900

T_HASH 型のオブジェクトにデフォルト値 ifnone をセットする処理を SET_DEFAULT というマクロとして定義するリファクタリング

nobu: r54058 2016-03-09 16:17:03 +0900

さらに hash.c でデフォルト値用の Proc オブジェクトを設定する SET_PROC_DEFAULT() マクロを定義してこれを利用するようにリファクタリングしています。

nobu: r54059 2016-03-09 16:17:04 +0900

さらに hash.c にデフォルト値用の flags のビットフラグと ifnone の設定をコピーするマクロ COPY_DEFAULT() を導入しています。

ko1: r54060 2016-03-09 16:22:27 +0900

benchmark/driver.rb にメモリ使用量のベンチマーク機能で計測する metrics を指定する --measure-target オプションを追加しています。 real, peak, size といった引数が指定できて、テスト用のライブラリ test/lib/memory_status.rb を再利用しているようです。

svn: r54061 2016-03-09 16:22:28 +0900

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

ko1: r54062 2016-03-09 16:42:32 +0900

r54060 の benchmark/driver.rb のメッセージの修正。またメモリ使用量取得の Memory::Status からの要素の取得で Struct で作ったクラスのインスタンスに対して member? だとうまくいかなかったということで respond_to? を使うようにしています。 Struct のオブジェクトの member? は Enumerable からきたメソッドだから意図したものではなかったみたいですね。

ko1: r54063 2016-03-09 16:49:06 +0900

r54062 で Hash リテラルの要素間のカンマが削られて syntax error になっていたのを修正。

nobu: r54064 2016-03-09 16:52:27 +0900

benchmark/driver.rb の未使用変数の削除。

nobu: r54065 2016-03-09 19:39:21 +0900

common.mk の依存関係を生成しなおして prelude.o, miniprelude.o, golfprelude.o などの依存関係に iseq.h が追加されています。