ruby-trunk-changes 2023-11-01

今日は主に Object Shapes で管理できなくて st_table に fallback する時の対応の不足の修正などがありました。

[b06b69e6dc] Nobuyoshi Nakada 2023-10-31 13:40:34 UTC

misc/lldb_rb/utilss.py のオブジェクトの表示で T_HASH 型オブジェクトの st_table または ar_table の内容も表示するようにしています。

[b5d54fc159] Cody Cutrer 2023-09-14 17:58:11 UTC

bundler の plugin の uninstall 時にキャッシュしている gem も削除するようにしています。

[4aacc559d9] Jean Boussier 2023-10-30 11:29:59 UTC

Object#dup で Object Shapes で管理できない多数のインスタンス変数の構成を持つものだった時の処理を追加しています。

[ac7f913ca3] Jean Boussier 2023-10-30 13:55:13 UTC

4aacc559d99988f395eced3534c7a6938bd356c8 の続きで Object Shapes で管理できない多数のインスタンス変数を持つオブジェクトの generic_ivar_set() での fallback 実装を追加しています。

[6f5e378057] Aaron Patterson 2023-10-30 16:50:56 UTC

ac7f913ca3af970225c9cc93b92eb5c403894180 のさらに続きで generic_ivar_set() で Object Shapes で管理できない多数のインスタンス変数を持つオブジェクトの時の分岐をさらにひとつ前にも追加しています。 ac7f913ca3af970225c9cc93b92eb5c403894180 での分岐は shape->type のチェックで、こちらは rb_shape_obj_too_complex() でのチェックで、rb_shape_get_shape_id() をみるか rb_shape_t::type をみるかの違いみたいですが複雑ですね。

[1c45124c49] Peter Zhu 2023-10-30 18:00:49 UTC

4aacc559d99988f395eced3534c7a6938bd356c8ac7f913ca3af970225c9cc93b92eb5c403894180 からの続きで rb_complex_ivar_set() でインスタンス変数管理のための st_table が未確保だった時に作成するようにしています。不具合修正っぽいですが関連するチケットはないのかなぁ。

[e2d950733e] Peter Zhu 2023-10-31 13:38:35 UTC

インスタンス変数の管理用の構造体 struct gen_ivtbl を可変長にして末尾を配列として使っていたのを最後の要素を共用体にして st_table のポインタを保持して st_table で管理する場合も同じ構造体を利用するようにしています。これを利用してインスタンス変数まわりのコピーとか GC の mark などの処理での rb_shape_obj_too_complex() が真の時の処理を追加しています。これまでちゃんと対応できてなかったという不具合があったというころだろうか?

[8889992b75] Peter Zhu 2023-10-31 20:38:05 UTC

Object#remove_instance_variable の実装で Object Shapes の rb_shape_obj_too_complex() が真の時の実装が漏れていたのを修正しています。

[60e207b47f] Peter Zhu 2023-10-31 21:01:28 UTC

8889992b75f85c8080fc09c7a3a1cb6123a098c1 で追加した Object Shapes のテストで同じクラスのインスタンス変数をたくさん追加してセットアップしていたのを毎回新しいクラスを使うようにしています。これってテストの意味あるのかな? Class.new で作成したクラス(Class のインスタンス)は Class のインスタンス変数管理の元にあるからいいのか?

[c3b7f27561] Peter Zhu 2023-10-31 21:04:40 UTC

8889992b75f85c8080fc09c7a3a1cb6123a098c1 の続きで Object#remove_instance_variable を Object Shapes の rb_shape_obj_too_complex() が真の時の対応の追加を、8889992b75f85c8080fc09c7a3a1cb6123a098c1 では T_MODULE と T_CLASS 型のオブジェクトの時に追加していたので今度は T_OBJECT/T_MODULE/T_CLASS 以外のその他の型のオブジェクトの時の対応を追加しています。 T_OBJECT の時はもともと対応済み。

[836d9fe46b] Cody Cutrer 2023-09-15 15:32:30 UTC

bundler の Bundler::Plugin.loaded? というメソッドを新規追加して、Bundler::Plugin.load_plugin で重複した load をしないようにしています。 ついでに plugin の管理に配列ではなく Set を利用するようにしています。

[a1e24ab484] Cody Cutrer 2023-10-11 16:05:58 UTC

836d9fe46b85dd28339d2dae891df2da153c8632 で bundler の plugin 管理に使うのを配列から Set に変えた部分を revert しています。 set への依存ができてしまうのでとのこと。load_plugin で重複した load をしないようになったので配列のままでも問題なかった模様。