ruby-trunk-changes 2023-04-17

今日は主に構造体 rb_classext_t のメンバー変更やレイアウト変更でサイズを小さくして Variable Width Allocation で 32bit 環境でも slot 内に埋め込めるようにする変更などがありました。

[ad3d4e87d7] Peter Zhu 2023-04-14 20:25:06 UTC

T_CLASS 型オブジェクトの struct RBasic::flags にセットしていた RCLASS_CLONED というビットフラグを構造体 rb_classext_t に cloned というメンバーを追加してこちらを利用するように移動しています。ついでに permanent_classpath という bool 型のメンバーと一緒に bit field として定義するようにしています。なので構造体サイズは増えてないはず?

[d7bb7e70cc] Peter Zhu 2023-04-14 20:26:46 UTC

R_MODULE 型の flags のための RMODULE_ALLOCATED_BUT_NOT_INITIALIZED というフラグの定義を RUBY_FL_USER5 から RUBY_FL_USER1 にビット位置を変更しています。ad3d4e87d7e20c7e7ff2836567a44bb29368f3ec で RCLASS_CLONED をなくしたのでできた空きを利用するように変更したみたいです。

[24b137336b] Peter Zhu 2023-04-14 20:27:37 UTC

今度は逆に構造体 rb_classext_t のメンバー shape_id を struct RBasic::flags に埋め込むのを環境によってはあきらめていたのを常に埋め込むように変更しています。

[a0d1069e03] Peter Zhu 2023-04-14 20:28:14 UTC

Variable Width Allocation を用いて T_CLASS 型オブジェクトで rb_classext_t を埋め込むのを 32bit 環境ではあきらめていたのを 24b137336b71f77bf9ae9c532c0a5520709f73e8 でメンバーを減らしたので埋め込めるようになったようで常に埋め込むようにしているようです。

[f3979aec76] Jean Boussier 2023-04-14 09:26:09 UTC

rubyspec に Warning[:performance] カテゴリの設定についてのテストを追加しています。 [ruby-core:112933] [Feature #19538]