ruby-trunk-changes 2023-11-03

今日は主に prism の更新と Object Shapes まわりの修正(too complex 対応)や inline cache miss 時の最適化などがありました。

[944e0ae698] Peter Zhu 2023-11-02 12:46:54 UTC

6f5e378057a02dadbb0173072f69c8a3f30f5649 で generic_ivar_set() で Object Shapes の too complex のチェックを rb_shape_obj_too_complex() によるものを shape->type == SHAPE_OBJ_TOO_COMPLEX によるものと別に追加していたのですが、これは冗長だったらしき rb_shape_obj_too_complex() のチェックのほうを削除しています。なにか別の状況のチェックなのかと思ったけどそうじゃなかったのか。

[5f130e2111] Peter Zhu 2023-11-02 13:23:14 UTC

rb_copy_generic_ivar() のコピーしたオブジェクトの struct gen_ivtbl の配列への書き込み時の RGenGC 用の Write Barrier のための RB_OBJ_WRITTEN() に渡す書き込みポインタが間違っていたのを修正しています。

[ad4f973ecd] Takashi Kokubun 2023-11-02 16:15:48 UTC

YJIT のいくつかのメソッドのためのテーブル初期化を CodegenGlobals.init() というところで行なっていたのをプロセス初期化時に行なっておくようにしています。YJIT の有効化を動的にできるようにしたので組み込みメソッドを上書きされた状態で YJIT の初期化が走る可能性ができて、その時にエラーになる場合があったようです。 https://github.com/ruby/ruby/pull/8807

[38ba040d8b] Peter Zhu 2023-11-02 13:49:23 UTC

Object Shapes の実装の enum shape_type から SHAPE_INITIAL_CAPACITY というのを削除して最初に作成する rb_shape_t の type を SHAPE_ROOT で capa=0 で作成するようにしています。

[4c3cc25ea2] Peter Zhu 2023-11-02 15:01:35 UTC

Object Shapes の実装の T_MODULE/T_CLASS 型オブジェクトのインスタンス変数のセットでの capacity を越えた時の too complex に遷移させる? ような対応を追加しているようです。

[0cb1fc3850] Jean Boussier 2023-11-02 16:38:24 UTC

vm_getivar() でインスタンス変数の取得する時の Object Shapes の管理外(too complex)で st_table から取得する時の参照するテーブルの T_CLASS/T_MODULE 型オブジェクトの時の対応を追加しています。

[ac8ec004e5] Jean Boussier 2023-11-02 10:02:43 UTC

String.new クラスメソッドを明示的に定義してキーワード引数 capacity が指定されていた時に可能なかぎり embed されたオブジェクトを返すようにしているみたいです。割と影響の大きそうな変更のような気がするけど本当にこれやる意味あるのかな。

[8b02de8f41] Nobuyoshi Nakada 2023-11-03 00:32:32 UTC

C API のテストで Thread の leak 修正のため ensure 節での Thread#join を追加しています。

[5cff4c5aa3] Nobuyoshi Nakada 2023-11-02 14:35:19 UTC

regparse.c に onig_names_copy()、onig_renumber_name_table() といった関数を追加して USE_ST_LIBRARY というマクロが偽の時に st_table に依存しない実装を保つようにしています。

[1f1b9b0942] Jun Aruga 2023-10-30 15:32:37 UTC

標準添付ライブラリ rdoc のテストで powerpc64le の環境でエラーになるテストを skip するようにしています。

[35da6f864a] Jean Boussier 2023-11-03 09:42:20 UTC

インスタンス変数の有無をチェックする関数 rb_ivar_defined() で T_OBJECT 型オブジェクト以外の時の too complex 時に参照するべき st_table を修正しています。

[981ec1d44a] Nobuyoshi Nakada 2023-11-03 09:28:05 UTC

gems/bundled_gems および NEWS の bundled gems の racc のバージョンを 1.7.3.pre.1 に更新しています。

[0ae6a2a1cf] Jun Aruga 2023-10-30 16:31:19 UTC

Travis-CI の設定から ppc64le-linux でのビルドをエラーを無視するリストから削っています。

[b92b9e1e9e] Jean Boussier 2023-10-26 09:08:05 UTC

インスタンス変数参照の inline cache がヒットしなかった時にすぐにあきらめず、Object Shapes によるインスタンス変数管理を利用して木構造の親を辿って cache 内の shape との共通の親を探せたらそれを元に求める shape を探すような処理を差し込んでいます。結構複雑なループになってるのでこれで速くなるのか? と思いますがマイクロベンチマークの結果ではやっぱりインスタンス変数の参照のパターンによって異なるようです。

[a43a52d415] Jun Aruga 2023-11-03 11:44:36 UTC

Travis-CI の設定で make の -j オプションに渡す引数を NPROC の +1 したものにしていたのを NPROC のままにしています。