ruby-trunk-changes 2020-03-11

今日は MJIT のメソッドキャッシュの扱いの修正や最適化などがありました。

[2fd779fcd9] Nobuyoshi Nakada 2020-03-10 12:47:18 UTC

rubyspec OpenSSL::Config のテストに openssl のバージョンによる guard を追加しています。

[21039d9c73] Kazuhiro NISHIYAMA 2020-03-10 13:18:35 UTC

doc/make_cheatsheet.md に benchmark/README.md へのリンクを追加しています。

[bf9abc4772] Kazuhiro NISHIYAMA 2020-03-10 13:20:18 UTC

21039d9c73d3c6f735d5178c9dd89950945002c3 のリンクを GitHub へのリンクに変更しています。

[d9135743c0] Koichi Sasada 2020-03-10 15:23:56 UTC

VMDEBUG を定義した時の RubyVM.mtbl というメソッドと同様のデバッグ用メソッド RubyVM.mtbl2 を追加しています。引数のクラスの mtbl でなくその引数自体の mtbl をダンプするもの。ただ mtbl の定義(rb_define_singleton_method()) が重複してしまっていますね。

[ec78b8b62a] Koichi Sasada 2020-03-10 17:43:28 UTC

gc.c の rb_raw_obj_info() で T_IMEMO 型で imemo_ment (メソッドエントリ)の時の表示で ISeq のポインタを表示していたのを obj_info() で文字列として %s で埋め込むようにしています。

[2943ff9d44] Koichi Sasada 2020-03-10 17:45:49 UTC

b9007b6c548f91e88fd3f2ffa23de740431fa969 のメソッドキャッシュの実装の変更の修正。よくわかってないですがメソッドキャッシュをクリアする時に METHOD_ENTRY_COMPLEMENTED() が真の時の分岐を追加しています。 method entry の complement は r52614 あたりでメソッドエントリの参照数を導入して Module を include した時に参照されてるのがわかるようにするためのもので、Module の m_tbl にメソッドエントリを追加しないようにするためとのこと。 [ruby-core:97334] [Bug #16669]

[d05455d083] Koichi Sasada 2020-03-10 17:55:07 UTC

ec78b8b62a84fd57eb93d7b5de5b83ea517ad7c4 の rb_raw_obj_info での imemo_ment の表示時に obj_info() に渡す引数を VALUE 型に明示的にキャストするようにしています。

[12009fb3b9] git 2020-03-10 17:55:28 UTC

version.h の日付更新

[e0512b29aa] Takashi Kokubun 2020-03-11 05:26:22 UTC

標準添付ライブラリ net/http の Net::HTTP.get メソッドで引数のヘッダーを指定する Hash を渡せるようにしています。第1引数を URI オブジェクトにして第2引数に渡すことで使えるようですね。 https://github.com/ruby/ruby/pull/2957 [ruby-core:97444] [Feature #16686]

[de4999ef23] Takashi Kokubun 2020-03-11 05:29:39 UTC

e0512b29aa47d4b79a27b0c0356bf47ec9b4e072 の NEWS への追記の英文修正。

[da6948753e] Takashi Kokubun 2020-03-11 05:36:48 UTC

e0512b29aa47d4b79a27b0c0356bf47ec9b4e072 の rdoc 用コメントへの追加の例を修正。

[9511b4c8fa] Takashi Kokubun 2020-03-11 06:18:45 UTC

tool/ruby_vm/views/_mjit_compile_send.erb で生成する C コード内の call cache のチェックで struct rb_call_data::cc との比較をしているところは GC.compact 対策で導入されていて、call cache のオブジェクトは pin されているのでもう不要ということで削っています。パフォーマンスのためのようです。

[da4b97a0e3] Takashi Kokubun 2020-03-11 07:54:18 UTC

9511b4c8facf583073ed8ecfd3d84710565572a6 と同様に tool/ruby_vm/views/_mjit_compile_send.erb で生成する C コード内での call cache のチェックで vm_cc_valid_p() を呼ばずに生成時に呼んでおいたポインタをそのまま埋め込むようにしています。このために rb_iseq_mark() で vm_cc_cme() の結果も rb_gc_mark() を呼んで pin down しておくようにしています。

[276859e03e] Nobuyoshi Nakada 2020-03-10 14:19:50 UTC

parse.y のルールで keyword splat の引数渡しの有無の差を吸収する f_any_kwrest や p_any_kwrest といったルールを追加してルールの記述をシンプルにしています。

[f020d340f4] Nobuyoshi Nakada 2020-03-11 09:11:24 UTC

parse.y に new_nil_at() というユーティリティ関数を追加して NEW_NIL() のノード生成のコード位置の指定をシンプルに書けるようにリファクタリングしています。