ruby-trunk-changes 2023-02-16

今日は主に YJIT の is_a?/instance_of? メソッドの最適化や標準添付ライブラリ timeout の更新、特異クラスの内部構造の変更などがありました。

[7413079dae] Jean Boussier 2023-02-15 09:42:52 UTC

特異クラスをオブジェクトに紐付けるのに T_CLASS 型オブジェクトに内部的なインスタンス変数(名前が @ ではじまらない)を持たせているのを RCLASS_ATTACHED_OBJECT() というマクロを使って実現方法を遮蔽するようにしています。

[3a9d52466a] HASUMI Hitoshi 2023-02-15 14:53:27 UTC

irb の help メッセージの --multiline のほうが default になったのに記述が追随していなかったので修正しています。 https://github.com/ruby/irb/pull/506

[847a0df058] Burdette Lamar 2023-02-15 15:00:27 UTC

標準添付ライブラリ net/http の rdoc 用コメント手直し。

[ae2340c9d7] Aaron Patterson 2023-02-14 22:41:23 UTC

debug_counter.h のインスタンス変数の操作に関するカウンタに ivar_set_obj_hit や ivar_get_obj_miss などインラインキャッシュに関するカウンタを追加し、いくつかのカウンタは改名しています。

[8943b0d411] Jimmy Miller 2023-02-15 19:05:42 UTC

YJIT に Kernel#is_a? メソッドと Kernel#instance_of? メソッドを専用の実行コードにコンパイルする最適化を追加しています。 https://github.com/ruby/ruby/pull/7297

[610375edfc] Rick Blommers 2023-02-12 14:23:37 UTC

標準添付ライブラリ timeout でタイマー監視のためにプロセスに 1つだけ起動する Thread を ThreadGroup::Default というデフォルトの ThreadGroup に移動するという処理があったのですが、作成元の Thread が所属する ThreadGroup が enclose されていると移動ができなくてエラーが発生するので、ThreadGroup#encosed? でチェックしてその時はあきらめて移動しないようにしています。うーんなるほど。

[70d84a5f3d] Benoit Daloze 2023-02-15 18:26:13 UTC

610375edfc2ed487dc5798278a5923154aec1c1f で追加した標準添付ライブラリ timeout のテストをシンプルに書きなおしています。

[0b4b2cd1ee] Haldun Bayhantopcu 2023-02-15 20:13:54 UTC

Object Shapes でインスタンス変数の削除時のために新しい shape を作る時に対象のオブジェクトが T_MODULE/T_CLASS 型の場合は too complex shape で Object Shapes による管理外にしてしまわないようにしています。なんでだっけ。

[b03b251aa4] Haldun Bayhantopcu 2023-02-15 21:40:16 UTC

0b4b2cd1ee161f2875375181e0978d7757e25c8a の Object Shapes のインスタンス変数削除の時の処理の再修正で T_MODULE/T_CLASS の時だけ強制的に新たな shape を作る(too complex にしない)ようにしていたのを T_OBJECT 以外の型の時に適用するようにしています。

[65b6411e9d] Hiroshi SHIBATA 2023-02-16 00:49:21 UTC

標準添付ライブラリ timeout のバージョンを 0.3.2 に更新しています。

[2573730658] git 2023-02-16 00:58:12 UTC

65b6411e9db31591ae2a4928acaa0bc2cc03c427 に追随して NEWS の default gems のバージョンリストを更新しています。

[f736f50f38] Hiroshi SHIBATA 2023-02-16 01:16:58 UTC

GitHub Actions の .github/workflows/dependabot_automerge.yml という workflow 設定を追加して、dependabot による pull request は CI が成功したら自動的にマージするようにしています。また dependabot による更新を毎月にしていたのを毎日実施にしています。

[7e5df49539] Hiroshi SHIBATA 2023-02-16 02:00:18 UTC

f736f50f38bfbe1dddf418444121997311e271a2 の dependabot の pull request の auto merge 用の workflow で CI のチェック方法を修正しているようです。

[9aa0f656cb] "dependabot[bot]" 2023-02-16 02:02:39 UTC

GitHub Actions で利用されている ruby/setup-ruby アクションのバージョンを更新しています。

[0116650525] "dependabot[bot]" 2023-02-16 01:26:33 UTC

GitHub Actions で利用されている ruby/codeql-ruby アクションのバージョンを更新しています。

[1df75d6586] "dependabot[bot]" 2023-02-16 01:26:45 UTC

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

[1a4b4cd7f8] Jean Boussier 2023-02-15 14:18:01 UTC

7413079dae81e46aefc948cd8872497567945791 の続き? T_CLASS 型オブジェクトの rb_classext_t 構造体の allocator メンバーのところを共用体にして同じレイアウト部分を attached_object というメンバーとしても使いまわすようにして、7413079dae81e46aefc948cd8872497567945791 の時点でインスタンス変数を利用していた特異クラスに対応するオブジェクトはこの attached_object メンバーを使って参照するように変更しています。allocator は通常のクラスの時にしか使わず、attached_object は特異クラスの時しか使わないので共用体で同じメモリ上の位置を共有しても問題ない、というハックのようです。なるほどなー。