ruby-trunk-changes 2026-01-01

今日は主に Thread::Queue, SizedQueue の最適化や GC の mmtk 実装の最適化などがありました。

[99249cc582] Nobuyoshi Nakada 2025-12-31 12:40:16 UTC

拡張ライブラリ jsonUnicode エスケープシーケンスの処理で char 型の変数に明示的に signed 修飾子をつけるようにしています。 char が signed か unsigned かというのはコンパイラ(環境?)によって異なるみたいなので意図を明示するようにしています。

[544770d566] Peter Zhu 2025-12-30 18:42:21 UTC

GC の mmtk 実装の並列処理化による最適化。

[dbfedeb3a3] Peter Zhu 2025-12-30 19:03:40 UTC

GC の mmtk 実装のリファクタリング。プロファイラの結果をみやすくするために関数を分割しているみたいです。

[b27d9353a7] Nobuyoshi Nakada 2025-12-31 14:56:58 UTC

GC の mmtk 実装から利用する C API の is_data_encoding() のかわりに is_obj_encoding() を利用するようにしています。 T_TYPEDDATA 型オブジェクトかどうかのチェックも含めるようにしています。

[7cf6cc83f3] Peter Zhu 2025-12-31 16:36:19 UTC

rb_method_entry_alloc() から明示的にオブジェクトを pin-down する新しく 01cd9c9fade0c1c6f13f11c86e86c0caeefd38bc で導入された rb_gc_register_pinning_obj() という C API を利用して method entry の T_IMEMO 型オブジェクトを pin-down しています。

[ea05c23ee8] Nobuyoshi Nakada 2026-01-01 00:24:32 UTC

include/ruby/internal/core/rtypeddata.h で T_TYPEDDATA 型オブジェクトかどうかチェックする処理を RBIMPL_TYPEDDATA_PRECONDITION() というマクロに切り出すリファクタリングと RTYPEDDATA_EMBEDDED_P() にチェックを追加しています。

[4129256214] Peter Zhu 2025-12-31 20:41:47 UTC

String オブジェクトのバッファを共有する複製の生成処理で STR_SET_SHARED() マクロを利用するようにしています。このマクロの展開結果のなかに rb_gc_register_pinning_obj() があるのでそれを呼ぶのが主眼の修正みたいです。

[8ce61f90ba] Jean Boussier 2025-12-31 12:54:00 UTC

Thread::Queue の実装を構造体 struct rb_queue 内に Array オブジェクトを持ってそれをバッファとして使っていたものを VALUE の配列型を直接持つ C 実装のリングバッファ構造を実装するよう変更しています。実行効率のためとのこと。