ruby-trunk-changes 2023-03-18

今日は主に拡張ライブラリなどで T_TYPEDDATA 型オブジェクトの構造体メンバーの VALUE 型のものをマクロを利用して宣言することで mark/compact 関数を定義せずに処理できるようにする機構の導入や RJIT の VM 命令のサポートの拡張などがありました。

[11f299fab7] Mau Magnaguagno 2023-03-17 14:29:42 UTC

YJIT の --yjit-stats オプションで JIT コードを使わなかった理由のカウンタを表示する処理で中間オブジェクト生成を抑制する最適化。 https://github.com/ruby/ruby/pull/7547

[a206ee6709] Peter Zhu 2023-03-16 19:13:32 UTC

gc.c の gc_is_moveable_obj() で finalizer が設定されているフラグが立っていた時に finalizer_table テーブルに登録済みであることのチェックを GC_ASSERT() にして通常時はチェックしないようにしています。

[418cf344fb] lukeg 2023-03-15 16:38:35 UTC

irb のテストのメソッドの再定義回避のための alias するメソッド名の改名や yamatanoorochi.gem を使うテストで require できなかった時の toplevel return のための rescue 節を require の直後になるようにする変更など。

[c62cf60d18] Takashi Kokubun 2023-03-17 16:06:52 UTC

bootstraptest/test_load.rb のテストで RJIT が有効な時に失敗することがあるテストを skip するようにしています。

[10e4fa3a0f] Alan Wu 2023-03-16 19:39:27 UTC

YJIT の Rust 実装でポインタの扱いの変更をして実行時(JIT コンパイルする処理の時という意味だと思いますが)のメモリ使用量を減らす最適化をしているようです。

[ccd2dbc4c1] Nobuyoshi Nakada 2023-03-17 06:53:18 UTC

cae4342dd559e34c1ce6219593f77f0ad80286da で revert した assert_linear_performance の引数の渡しかたの変更のリトライ。

[3592b24cdc] Jean Boussier 2023-03-16 08:52:22 UTC

ObjectSpace::WeakMap で同じ key に重複して代入すると古い値が GC された時にも key が削除されてしまっていた不具合を修正しています。既に存在する key への代入で既存のオブジェクトから key への参照を消す必要があったようです。 [ruby-core:112906] [Bug #19531]

[9fd94d6a0c] Takashi Kokubun 2023-03-17 18:53:17 UTC

YJIT の Rust 実装の変更ですがコミットログをみてもよく意味がわからなくてあきらめ。

[7142328a94] Matt Valentine-House 2023-03-16 22:23:17 UTC

拡張ライブラリなどで T_TYPEDDATA 型のオブジェクトのクラスを定義する時に適切な mark/free/compact などの関数を実装させるかわりに定義にマクロを使って構造体内の VALUE 型のメンバーの位置を配列で持たせてそれをみて処理する gc_mark_from_offset() や gc_ref_update_from_offset() という関数を導入して、rb_data_type_t::flags に RUBY_TYPED_DECL_MARKING フラグが立ってたらこれを利用するようにしています。なるほどなー。普及するかな。 [ruby-core:112200] [Feature #19406]

[405966e239] Matt Valentine-House 2023-03-16 22:26:08 UTC

Dir オブジェクトの実装に 7142328a94c85cc5f23630396f248b32133f87ab で導入したマクロを使った宣言的な VALUE 型メンバーの指定を使った mark 処理を利用するようにしています。うーん、これだけみるとあんまりメリットが感じられないけど……。

[22b349294b] Matt Valentine-House 2023-03-16 22:26:34 UTC

Enumerator クラスの実装でも mark と compact 用の実装を 7142328a94c85cc5f23630396f248b32133f87ab で導入したマクロによる VALEU 型メンバーの宣言による実装を利用するように変更しています。この例だと mark と compact の 2つ繰り返して似た関数を書かないといけないのが 1つになって嬉しいのがわかりますね。

[4f5e29f930] Matt Valentine-House 2023-03-16 22:27:12 UTC

7142328a94c85cc5f23630396f248b32133f87ab で導入した mark/compact 用の処理を構造体の VALUE 型メンバーをマクロで宣言する手法について doc/extension.rdoc に追記しています。

[5897a6f686] Matt Valentine-House 2023-03-16 22:27:24 UTC

common.mk の依存関係を再生成しています。

[c7862c68eb] Matt Valentine-House 2023-03-16 09:54:36 UTC

misc/lldb_rb/ に LLDBInterface というクラスを導入してこれを継承してコマンドの実装を書けるようにしています。またオブジェクトの情報の rp コマンドでの表示の実装を新たに書き下している? みたいです。

[5d0a1ffafa] Jimmy Miller 2023-03-17 20:11:30 UTC

YJIT で rest 引数とブロック引数を持つよう宣言されたメソッドの呼び出しの対応を追加。 https://github.com/ruby/ruby/pull/7557

[2a26a5e677] Alan Wu 2023-03-17 19:07:22 UTC

YJIT の Rust 実装に assertion を追加しています。

[7fc796f92a] Alan Wu 2023-03-17 20:16:17 UTC

YJIT 用オプション --yjit-global-constant-state のサポートを削除しています。 https://github.com/ruby/ruby/pull/7559

[6ba07df490] Maxime Chevalier-Boisvert 2023-03-17 20:16:34 UTC

YJIT の VM 命令からコード生成する時に VM スタックに push する値の型情報を一部詳しくしています。 https://github.com/ruby/ruby/pull/7555

[b9f411b3a8] Alan Wu 2023-03-17 20:43:04 UTC

YJIT の Rust 実装で型を変更するリファクタリング

[644c998525] Takashi Kokubun 2023-03-18 05:31:41 UTC

RJIT のオプション --rjit-stats を通常のビルドでも指定できるようにしているようです。

[39cd74d2a0] Takashi Kokubun 2023-03-18 06:17:25 UTC

configure のオプション --enable-rjit=dev が指定された時にマクロ RUBY_DEBUG=1 を定義していたのを RJIT_STATS=1 を定義するように変更しています。

[45a17013aa] Takashi Kokubun 2023-03-18 06:27:16 UTC

RJIT で VM 命令 throw のコンパイル対応を追加しています。

[2c8f2871a8] Josef Haider 2023-03-18 06:43:54 UTC

CESU-8 という文字エンコーディングでのサロゲートペアの扱いに不具合があったみたいでその対応を追加しているようです。チケット参照がないけどたぶんこれかな? https://github.com/ruby/ruby/pull/7510 [ruby-core:112918] [Bug #19532]

[93e05aaa74] Takashi Kokubun 2023-03-18 06:34:36 UTC

RJIT で VM 命令の putspecialobject の JIT コンパイル対応を追加しています。

[dc28ccbb6d] Takashi Kokubun 2023-03-18 07:00:18 UTC

RJIT で VM 命令 getspecial の JIT コンパイル対応を追加しています。