ruby-trunk-changes 2022-11-23

今日は Time#deconstruct_keys メソッドの新規追加、initialize メソッド定義時にその内容からインスタンス変数の数を推定する最適化などがありました。

[9c5e3671eb] Jemma Issroff 2022-11-22 20:28:14 UTC

T_CLASS 型のオブジェクト(つまりクラス)に initialize メソッドを定義する時に initialize 内で初期化するインスタンス変数を ISeq を解析することで推測して struct rb_classext_t::max_iv_count にセットしておくことでそのクラスのインスタンスが持つインスタンス変数の数を事前に推定しておくことで後で拡張の必要を減らす最適化。 https://github.com/ruby/ruby/pull/6788

[63f4a7a1ec] Takashi Kokubun 2022-11-22 20:57:17 UTC

YJIT の Rust 実装の生成する機械語のジャンプ命令の後の nop 命令による padding が不要な場合に抑制するように最適化しています。 https://github.com/ruby/ruby/pull/6790

[eaf2b6c439] zverok 2022-10-19 19:07:23 UTC

pattern match の Hash パターンに Time オブジェクトを利用できるようにするため Time#deconstruct_keys メソッドの定義を追加しています。 :year, :month, :day などの項目ごとの値に分解した Hash を返すようです。 [ruby-core:110422] [Feature #19071]

[c4e99ac454] Maxime Chevalier-Boisvert 2022-11-22 21:18:31 UTC

doc/yjit/yjit.md に YJIT を production で使ってる事例があったら教えてねという記述を追記しています。

[003f8ea809] Peter Zhu 2022-11-14 16:22:00 UTC

rb_obj_copy_ivar() 内で同じ処理が繰り返し書かれてて冗長になっていたコードがあったので削除しています。

[aedf682bfa] Aaron Patterson 2022-11-22 21:54:30 UTC

9c5e3671ebd9c07c178ca5dac08ad15ad1eae411 でクラスの initialize メソッド定義時にインスタンス変数の数を推定する処理を実装した関数 rb_estimate_iv_count() で関数内で確保した struct rb_id_table をの解放が漏れていてメモリリークしていたので修正しています。