ruby-trunk-changes 2021-03-11

今日は主に ISeq のバイナリフォーマットでの dump/load 時の最適化や UnboundMethod#bind_call の最適化などがありました。

[4c80b9d063] Nobuyoshi Nakada 2021-03-10 13:13:06 UTC

f0b3700ddc678795129176f2a1ebcb4bd3235270 の続き。 configure.ac でまだ残ってた rb_cv_coroutine の変数を使ってたところも coroutine_type に改名しています。

[9d0ae387c8] John Hawthorn 2021-03-10 00:33:28 UTC

iseq.h の enum defined_type から DEFINED_IVAR2 という定数を削除しています。いつからか使われなくなってたようです。

[9cdb5a5153] git 2021-03-10 17:38:40 UTC

version.h の日付更新

[23a48d8fe6] eileencodes 2021-03-10 15:24:28 UTC

rb_class_ivar_set() に呼び元で常に行なわれてた RCLASS_IV_TBL() の初期化を移動して取り込むリファクタリング

[cbc7c1c061] eileencodes 2021-02-25 17:42:10 UTC

クラス変数が子クラスで定義された後に親クラスで上書き(というか参照先が変えられた)時のエラーのテストを追加しています。こんな挙動そういえばあったなぁ。

[d9fea496af] Jeremy Evans 2021-03-10 20:09:45 UTC

cbc7c1c06145b02b3d887a6fb2c3b6d9e4bb22dd で追加したテストメソッドに ensure 節を追加して、eval で追加している定数を Module#remove_const で削除するようにしています。

[a03653d386] Jean Boussier 2021-02-12 16:31:19 UTC

UnboundMethod#bind_call の最適化。動機とアイデアがコミットログに明確に書かれててわかりやすいのですが、UnboundMethod を使うのはメソッドの再定義を避けて本来呼びたいメソッドを確実に呼ぶためのことが多いけど、実際には再定義されてないケースも多いよねってことで bind しようとしたオブジェクトの対応する method entry が同じものだったら Method を生成せずにそのまま rb_vm_call_kw() で普通にメソッド呼び出ししちゃおうというものみたいです。

[8463c8a425] Jean Boussier 2021-01-22 21:23:30 UTC

ISeq のバイナリフォーマットでの dump/load で Symbol の処理を ibf_dump_object()/ibf_load_object() の一般的な処理を使ってたのを Symbol 用に専用の処理を用意するようにしています。これ互換性はなくなりそうだけど version 上げなくてもいいのかな。

[d00e7deb5c] Jean Boussier 2021-01-23 09:15:22 UTC

同じく ISeq のバイナリフォーマットでの load で String の処理 ibf_load_object_string() で freeze された文字列向けの最適化?

[2de7fbcdbb] Jean Boussier 2021-01-23 09:16:43 UTC

d00e7deb5c780d75e4edd3afa3e26ea02c296d8c とも関連してそうですが iseq_compile_each0() で class/module の ISeq に埋め込む名前の文字列を rb_str_freeze() で freeze しておくようにしています。

[1041bff3b2] Jean Boussier 2021-01-25 09:58:02 UTC

d00e7deb5c780d75e4edd3afa3e26ea02c296d8c2de7fbcdbb90b2431e03b4c457e05f1aa2d2dd64 の効果を測るためだと思いますが benchmark/iseq_load_from_binary.yml に ISeq のバイナリフォーマットからの load RubyVM::InstructionSequence.load_from_binary のベンチマークを追加しています。

[ef88225886] Jean Boussier 2021-02-01 16:58:06 UTC

8463c8a425758fd4dc58a5c202aba295c837b154 で Symbol 専用の処理に書きかえた ibf_dump_object_symbol() ですが、ibf_dump_object_string() にまるっと委譲することができたみたいで rb_sym2str() で文字列化してから ibf_dump_object_string() を呼ぶようにリファクタリングしています。ということは読み込むほうも互換性あるのかも。

[a6b5d70bca] Nobuyoshi Nakada 2021-03-11 00:21:21 UTC

test/ruby/test_file_exhaustive.rb のテスト内で一時ディレクトリを作成してそこに移動して実行するつもりが Dir.chdir の引数に渡しそこねてた不具合を修正しています。 https://github.com/ruby/ruby/pull/4255

[a6c93a1d1d] Kazuhiro NISHIYAMA 2021-03-11 01:46:01 UTC

b37f60fbd4b18f23e0443ae41b2cd7b991f0e11c の gems/bundled_gems の rbs のバージョン更新を revert しています。 make test-bundled-gems が CI で失敗していたため。