ruby-trunk-changes 2020-02-26

今日は先日のメソッドキャッシュ実装の変更に追随した MJIT の対応などがありました。

[66d1900423] Takashi Kokubun 2020-02-25 17:27:11 UTC

CSV のテストのタイムアウトが MJIT 有効化時には足りないことがあるので RubyVM::MJIT.enabled? をみて調整するようにしています。

[6c66761c1f] git 2020-02-25 17:27:54 UTC

version.h の日付更新

[672213ef1c] "Chelsea Corvus (Battell)" 2020-02-25 18:43:17 UTC

Array#index の rdoc 用コメントに #index は #find_index の alias であると追記しています。厳密に言うと言語仕様としての alias ではなくて、同じ実装 C 関数を使って両方のメソッドが定義されているということですね。

[0686e4181d] Nobuyoshi Nakada 2020-02-26 01:16:32 UTC

66d1900423e6fb9774c2fe72dba8c2968b54d7ab の CSV のテストの MJIT 対応の再修正。古い Ruby で RubyVM::MJIT がない場合を考慮して defined? でのチェックも追加しています。

[e960ef6f18] Vít Ondruch 2019-10-01 10:03:33 UTC

tool/rbinstall.rb の gem パッケージインストール用の class/module のリファクタリング。Gem::Package のインスタンスに Module を extend して一部の挙動を書き換えてたのを専用のクラスを定義してそれを利用するようにしています。詳細はわからないけど rubygems の変更に対して強くするためかな。

[6609940a5e] Vít Ondruch 2019-10-01 10:25:07 UTC

tool/rbinstall.rb の bundled gem インストール時のオプションの prog_mode に渡すのを $prog_mode から $script_mode に変更しています。これもちょっとよくわからないけど意味的にこっちのほうが正統だろということみたい。

[c9fab1ac06] Vít Ondruch 2019-10-01 10:39:31 UTC

同じく tool/rbinstall.rb のファイルの mode を決めるのにグローバル変数を直接参照していたのを、accessor メソッド経由で取得するようにしています。

[e087b029e5] Vít Ondruch 2019-10-11 15:56:28 UTC

同じく tool/rbinstall.rb のインスタンス変数をわざわざローカル変数に入れて参照してたところを直接インスタンス変数参照するようにするリファクタリング

[b8a8fdba63] Vít Ondruch 2019-10-14 16:28:37 UTC

c9fab1ac06b83679b265c011481c80387c008735 で修正してた tool/rbinstall.rb のファイルパターンを "bin/*" で決め打ちにしてたのを spec.bindir を参照するようにしています。

[9d6d531527] Vít Ondruch 2019-10-15 13:15:25 UTC

tool/rbinstall.rb で同じ without_destdir 呼び出しがループ内にあって無駄だったのをループ外に出してローカル変数に結果を格納するリファクタリング

[e7bcb416af] 卜部昌平 2020-02-25 02:29:55 UTC

gc.c の gc_profile_dump_on() の中で preprocessor による #if ... #end の分岐を関数型マクロの引数の文字列リテラル連結の間に入れてたのを、一旦変数に受けてからマクロ呼び出しするようにしています。これは未定義の書きかただったとのこと。おお、そうなんだ。

[62c2b8c74e] 卜部昌平 2020-02-25 05:36:56 UTC

USE_RGENGC=0 に設定してビルドできない状態になっていたようなので、このマクロ自体消しています。RGenGC は 2.2 でしたっけ。もうだいぶたちましたね。

[fbd7f08e92] 卜部昌平 2020-02-26 01:35:16 UTC

ST_DEBUG というマクロも機能していないようなので消しています。 [ruby-core:96962] [Bug #16521]

[eb75f0d134] Takashi Kokubun 2020-02-26 07:24:24 UTC

b9007b6c548f91e88fd3f2ffa23de740431fa969 のメソッドキャッシュ実装の変更で不要になった mjit.c での create_unit() のプロトタイプ宣言を削除しています。

[8dab71b9d0] Nobuyoshi Nakada 2020-02-26 03:43:53 UTC

tool/rbinstall.rb のファイル名を .gemspec から .rb に変更するのを dirname と String#gsub を使ってたのを File.basename の第2引数で拡張子指定した時の挙動を利用して簡便に書きなおしています。

[55923ba883] Takashi Kokubun 2020-02-26 07:36:09 UTC

mjit_worker.c の先頭部分のコメントに xmalloc() で確保したメモリ領域を直接 free(3) で解放してるところが少しあるけどそれにどういう問題があるかというのを追記しています。 xmalloc() は確保した量を管理してるので解放が計上されずに管理上メモリが増え続けるようにみえちゃうというのと、本体と拡張ライブラリで別のメモリアロケーターを使ってると問題になることがある(MJIT では同じものを使ってるはずだから大丈夫とも書いてありますが)という一般論が書かれてます。

[daf7c48d88] Takashi Kokubun 2020-02-26 07:55:53 UTC

7ec23593746c8ccabd6c005cc34dde77d564c6c9 のメソッドキャッシュまわりの変更への追随での mjit worker の修正に TODO コメントを追記しています。

[69f377a3d6] Takashi Kokubun 2020-02-26 08:27:28 UTC

b9007b6c548f91e88fd3f2ffa23de740431fa969 のメソッドキャッシュ実装変更の MJIT 対応で TODO になっていた jit_unit->cc_entries の参照を mjit.c の関数に切り出して構造体 struct rb_mjit_unit の宣言を mjit_worker.c の中に閉じ込めています。

[33b78b89ac] Takashi Kokubun 2020-02-26 08:34:01 UTC

69f377a3d62b29bc927da7fdae99bcb5e7d096fe の追加修正。 mjit_iseq_cc_entries() の呼び出しを繰り返さずに結果を使いまわすようにしています。

[83705c42ce] Takashi Kokubun 2020-02-26 08:37:35 UTC

mjit_worker.c の free_unit() で struct rb_mjit_unit の解放処理時に cc_entries の解放を追加漏れていてメモリリークしていたのを修正しています。