ruby-trunk-changes 2022-12-07

今日は主に initialize メソッドによるインスタンス変数の数の推定処理の軽量化のための実装変更や NEWS の記述の整理などがありました。 RC1 も出たのでしばらくはリリースに向けて大きな変更はないかと。

[9d4483f24d] Peter Zhu 2022-12-06 14:25:10 UTC

標準添付ライブラリ net/http の HTTP.start の rdoc 用コメントの call-seq のあとに空行を追加しています。

[c43951e60e] Daniel Colson 2022-12-01 01:28:14 UTC

enum ruby_basic_operators 型の定数の宣言を vm_core.h から internal/basic_operators.h という新しいヘッダファイルに切り出しています。また構造体 rb_vm_t の redefined_flag というメンバーを削除してこれを vm.c 内で定義したグローバル変数にしています。これは VM がプロセス内に 1つしか持てないということになりそうだけど、既にグローバルなテーブルに依存しているのでいまさらということみたいですね。

[e69b91fae4] Daniel Colson 2022-11-23 02:16:11 UTC

オブジェクトの比較で両辺が即値の Fixnum や Float のようなオブジェクトだった時に最適化したショートカット処理をするための判定マクロの CMP_OPTIMIZABLE() の定義を変更して c43951e60eed0b01f464cd25441b81751d2d5087 で切り出した enum ruby_basic_operators の定数に BOP_CMP を追加してこれを利用してメソッド再定義を検出する定義に変更しています。定義のヘッダファイルを切り出したのはこのために BOP_CMP の定義をあちこちで使うためだったみたいです。 https://github.com/ruby/ruby/pull/6851

[64cdf8bae7] Daniel Colson 2022-12-01 21:07:59 UTC

c43951e60eed0b01f464cd25441b81751d2d5087 のヘッダファイル追加に伴う common.mk などの依存関係の追加をしています。

[40a9964b89] Jemma Issroff 2022-12-06 19:52:11 UTC

インスタンス変数の管理のための Object Shapes でオブジェクトのインスタンス変数の数を推測するためにインスタンス変数のセット時に ISeq の inline cache 内にインスタンス変数名を格納しておくようにして initialize メソッドでの初期化するインスタンス変数の数の推定に利用するようにしているようです。また推定時に initialize が super を呼んでいるかどうかも initialize メソッド内の VM 命令列に invokesuper があるかで判定していたのですが、この変更で VM 命令列を再度スキャンする必要がなくなったので結果的にわからなくなったので、常に super は呼ばれているという前提でインスタンス変数の数を推定するようにしているようです。 推定を高速にしたかわりに正確性は犠牲にしているという感じですね。 https://github.com/ruby/ruby/pull/6870

[8684904cb4] Yusuke Endoh 2022-12-06 23:11:35 UTC

NWES に捕捉されなかった例外のメッセージの表示でエスケープシーケンスをエスケープするのをやめたことについて追記しています。 bachslash はたぶん backslash かな。 [ruby-core:106308] [Feature #18367]

[e6b63b382c] Takashi Kokubun 2022-12-07 05:27:46 UTC

MJIT の enum rb_mjit_iseq_func の名前を enum rb_mjit_func_state に改名して中の定数も MJIT_ を prefix に持つように全体的に改名しています。

[940b3170c1] 卜部昌平 2022-07-21 09:00:04 UTC

5bbba76489628f4509495ebf4ba0a7aad4c0b560 の rb_eval_string() 関数の仕様変更についての歴史的経緯をコメントに追記しています。

[7e20704000] Takashi Kokubun 2022-12-07 06:18:42 UTC

MJIT の統計情報のためのカウンターのうち mjit_add_iseq_to_process と mjit_unload_units というのを削除しています。これにより mjit_add_iseq_to_process() の最後の引数が不要になったようなので削除されています。

[98c41dfe6f] Takashi Kokubun 2022-12-07 06:40:03 UTC

MJIT でコンパイルした結果を管理するための構造体 struct rb_mjit_unit の確保に calloc(3) を利用していたのがもう MJIT の worker は ruby 実装になったので GC が発生する処理を使っても良くなっているので ZALLOC_N() マクロを利用するようにしています。

[718e4f6efc] Takashi Kokubun 2022-12-07 06:59:05 UTC

MJIT が実行時に起動するコンパイラに渡すオプションの設定を作ってるところのコメントの説明を少し詳細にしています。

[12916e283f] Takashi Kokubun 2022-12-07 07:00:12 UTC

98c41dfe6f986ed0a0277d8b1379ed632ec1ce82 と同様に MJIT は既に GC を気にしなくてよくなっているのでメモリ確保を ZALLOC_N() にしたのに対応して解放も free(3) から xfree() に変更しています。

[57cb4a8179] Takashi Kokubun 2022-12-07 07:01:30 UTC

MJIT のための debug counter 群を削除しています。MJIT 専用のはほぼ全て消してそうですね。

[17d45feeb6] Takashi Kokubun 2022-12-07 07:16:21 UTC

MJIT の mjit_wait() の引数を struct rb_iseq_constant_body * から struct rb_mjit_unit * に変更して rb_mjit_wait_call() という wrapper 関数を不要なものにしています。ちょっとよくわかりませんでしたがこれも worker thread をなくしたために状態管理が簡易になった影響かな。

[65545c6608] Takashi Kokubun 2022-12-07 07:45:49 UTC

17d45feeb6291c407e00b20a7f16ac472c7b1ef9 で追加した mjit_notify_waitpid() の VM_ASSERT() によるチェックに --mjit-wait オプションの指定があるかどうかの条件を追加しています。

[bcd8b2f00a] Yusuke Endoh 2022-12-07 03:31:00 UTC

NEWS に String#dedup の追加、Thread#each_caller_location の追加、Thread::Queue や Thread::SizedQueue の pop などに timoeut キーワード引数が追加されたことについての記述が漏れていたので追記しています。また NEWS のチケット参照をリンクにするための footnote を自動で追加するためのスクリプトを tool/update-NEWS-refs.rb に追加してこれにより footnote も追記されています。

[1968b4e2c7] Jean Boussier 2022-12-07 08:53:27 UTC

NEWS に新たに追加された C API について追記しています。

[c43203fd09] Nobuyoshi Nakada 2022-12-07 10:19:26 UTC

GitHub Actions の check_misc という workflow で行末の空白除去を自動化しているところに拡張子 .md ファイルの空行のみの行を削除する(空白じゃなくて行自体を削除)という変更も自動化するよう追加しています。

[58cc3c9f38] Nobuyoshi Nakada 2022-12-07 04:08:40 UTC

tzdata パッケージの更新により Time のテストが失敗する環境ができはじめたそうなのでテスト時に判定して分岐するように対応しています。 [ruby-core:111220] [Bug #19187]

[581b4a3c88] Nobuyoshi Nakada 2022-12-07 10:48:38 UTC

8684904cb418df3f6d15ea0b0ad5c7c357d7ef06 で NEWS に追記した例外メッセージの扱いの変更についての追記の不要と思われる do を削除しています。