ruby-trunk-changes 2026-05-06

今日は主に Object Shapes の実装で単にインスタンス変数が多い時も too_complex にして st_table で管理するように遷移する変更や、その too_complex という名前を単に complex と呼ぶようにするなどのリファクタリングがありました。

[6074e53703] Jean Boussier 2026-05-05 12:26:12 UTC

Object Shapes の rb_shape_id のキャッシュの初期化に使う定数 INVALID_SHAPE_ID を -1 をキャストして定義していたのを SHAPE_BUFFER_SIZE-1 として利用するビット数を減らして定義するようにしています。 uint64_t の変数に 2つの shape_id を詰めてキャッシュできるようにするためみたいです。

[2f5b746454] Jean Boussier 2026-05-05 15:06:42 UTC

6074e53703cf22b837c58f010c99651de7ad442f の INVALID_SHAPE_ID の変更で下準備しておいた shape_id のキャッシュを uint64_t に source shape と destination shape をセットにして詰めるよう省スペース化する変更です。構造体や関数の追加もあり結構大きな差分ですね。

[9cee5c73cb] Burdette Lamar 2026-05-05 21:33:00 UTC

IO.read の rdoc 用コメントのサンプルにマルチバイト文字や ASCII-8BIT のデータを含んだ例を追加しています。また IO.read を使ってたサンプルを File.read に変更しています。まあファイルからの読み込みには File.read を使うのが推奨されるため("|" を含んだファイルパスでコマンド実行する問題を回避するため)だからだと思いますが IO.read メソッドのサンプルなので微妙なところですね。

[f56ee25ca9] BurdetteLamar 2026-05-05 14:30:14 UTC

Pathname#write の rdoc 用コメントを追加しています。

[d3c770dd67] Burdette Lamar 2026-05-05 21:43:53 UTC

IO.write メソッドの rdoc 用コメントにもサンプルを追加し、サンプルコードでは IO.write ではなく File.write を使うようにしています。 https://github.com/ruby/ruby/pull/16857

[7ced2c8810] Peter Zhu 2026-05-05 21:40:09 UTC

IO.binwrite の rdoc 用コメントの call-seq にキーワード引数について追記しています。

[bb21539f11] "dependabot[bot]" 2026-05-06 02:13:26 UTC

GitHub Actions の workflows で利用しているアクションのバージョンを更新しています。

[678d86f5e4] Jean Boussier 2026-04-29 08:23:39 UTC

Object Shapes で管理するインスタンス変数の数が slot に埋め込めないケースで xmalloc() でヒープからメモリを確保するパスをやめて、単純にインスタンス変数の数が多い時も too_complex に遷移させて st_table でインスタンス変数を管理させるようにしています。 Variable Width Allocation での slot サイズの拡張上限が引き上げられたためインスタンス変数や object_id 用の fields_obj に 126個まで値を格納できるようになったため、これを越えるようなインスタンス変数を持つケースというのはかなり例外的なので too_complex とまとめて処理してしまっていいだろうという判断みたいです。この副産物としてこのフィールドのインデックスとして使う attr_index_t 型を 16 bits から 8 bits に縮小しています。

[4eeec614bb] Jean Boussier 2026-05-06 06:42:37 UTC

Object Shapes において従来はインスタンス変数の初期化順番のパターンが多い時に st_table による管理にしていた too_complex (ひとつ前の 678d86f5e46d57432169d0d5eaf71a41c6d21526 で単にインスタンス変数が 126 を越える時も too_complex に遷移させるように変更された)について、単に complex という prefix を利用するように改名しています。

[deceb9f62e] Jean Boussier 2026-05-06 06:45:20 UTC

Object Shapes の実装に関連して rb_shape_obj_*() という関数名を rb_obj_shape_*() と改名しています。