ruby-trunk-changes 2023-07-28

今日は主に拡張ライブラリ strscan の修正と ruby 本体の API を利用するようにするリファクタリング、callcache の実装によるメモリリーク修正、YJIT の統計情報カウンタの追加や対応命令の追加などがありました。

[e27eab2f85] Peter Zhu 2023-07-27 13:42:42 UTC

拡張ライブラリ strscan の StringScanner#named_captures の不具合修正。

[e5effa4bd0] Takashi Kokubun 2023-07-27 17:09:17 UTC

YJIT のメソッド呼び出しで receiver のクラスが多彩で実行コードに納まりきらなかった時の fallback 処理を cef60e93e6db859b47c818f745be809feb04ae48 で導入した dynamic dispatch を利用するように変更しているようです。 https://github.com/ruby/ruby/pull/8125

[7193b404a1] Peter Zhu 2023-07-26 19:57:03 UTC

拡張ライブラリ strscan で利用するために正規表現まわりの実装を re.c のものを再利用するようにしているみたいです。一応 HAVE_RB_REG_ONIG_MATCH マクロで preprocessor 分岐しているので古い ruby 向けにビルドした時のことも考えられてそうだけど、re.c の変更もかなり大きいのでコミットを分けたほうがよかったような。

[511c51e116] Peter Zhu 2023-07-27 18:04:02 UTC

7193b404a1a56e50f8046d0382914907020c1559 の続き? で re.c の rb_reg_prepare_re() という関数の呼び出しまわりでエラーメッセージのバッファの引数のとりまわしの変更。

[34825ed20d] Alan Wu 2023-07-26 22:22:23 UTC

37160be439c9a368c206b2eec713820dc97e4e0f の YJIT の統計情報のカウンタ名を一貫性のために改名したのを revert しています。勘違いだったみたいです。

[7633299c50] Alan Wu 2023-07-26 22:12:46 UTC

YJIT でブロックとして Proc オブジェクトを & でブロック引数として渡されてた時のブロック起動のコード生成の対応を追加しているようです。これまではどうなってたんだろう。

[f72f3ab15b] Peter Zhu 2023-07-27 19:39:05 UTC

regcomp.c の onig_new() で正規表現エンジンの regex_t の生成の処理を同様の処理をしている onig_new_without_alloc() を利用するように変リファクタリングしています。

[83f9d80c0b] Alan Wu 2023-07-27 21:09:08 UTC

tool/downloader.rb でダウンロード先のファイルが symbolic link でなおかつ指す先のファイルが存在しなくなってた場合にその symbolic link を削除しておくようにしています。 GitHub Actions で cache を利用している場合に symbolic link で共有されていて、タイミングによって指す先が存在していない状態がみえることがあるとかでエラーになることがあるのでその対策みたいです。

[5669a28fde] Maxime Chevalier-Boisvert 2023-07-27 21:47:29 UTC

YJIT で機械語命令の jg (jump if greater かな?) の生成処理がまだなかったので追加して、これを利用する Integer#<< メソッド呼び出しの最適化を導入、しているかとみせかけてコメントアウトされているっぽいですね。 https://github.com/ruby/ruby/pull/8130

[9721972175] Takashi Kokubun 2023-07-27 22:28:23 UTC

re.c の rb_reg_prepare_re() を static 関数から公開関数にしています。 7193b404a1a56e50f8046d0382914907020c1559 の拡張ライブラリ strscan の変更でこの関数を利用するようになっているため。

[437a4ccbf2] Xavier Noria 2023-07-27 21:01:00 UTC

bundler で再定義する require の警告対象の gem 名の "-" を "/" にする処理で引数が文字列じゃなかった時のための対応を追加しています。

[cf0c907bc7] Takashi Kokubun 2023-07-27 23:35:30 UTC

YJIT の統計情報にインスタンス変数のセット時に Object Shapes のバリエーションが多すぎて st_table 利用に fallback した時のカウンタ setivar_too_complex を追加しています。 https://github.com/ruby/ruby/pull/8131

[bf4d64d8d0] Takashi Kokubun 2023-07-27 23:50:32 UTC

vm_opts.h の OPT_SUPPORT_CALL_C_FUNCTION というマクロがもう参照されているところがなくなってたので削除しています。

[38be9a9b72] Takashi Kokubun 2023-07-28 00:27:05 UTC

RubyVM の最適化手法の一種で現在デフォルトでは無効にされている stack caching の実装削除して、これを有効にするための OPT_STACK_CACHING マクロのサポートも削除しています。 https://github.com/ruby/ruby/pull/8132

[8c7cf2de98] Takashi Kokubun 2023-07-28 00:31:12 UTC

vm_exec.c の vm_exec_core() という関数の第2引数がもう利用されなくなっていたので削除しています。

[44b19b01e2] Takashi Kokubun 2023-07-28 00:36:07 UTC

8c7cf2de98c56039820c2861d1f0ed85c0961e12 に追随して WASM/WASI 環境向けの struct rb_vm_exec_context 構造体の初期化子から削除されたメンバーのものを削除しています。

[c330037c1a] Ruby 2023-07-26 04:39:31 UTC

T_IMEMO 型オブジェクトで call cache 用に使われているものの mark 関数で struct rb_callcache::cme_ メンバーを mark しないようにしています。この call cache から mark されてしまうと cache が残っているかぎり Class が削除されず、結果 cache が invalidate されないので Class がメモリリークしてしまうという問題があったようです。コミットの author をみると変な(?) アドレスになってますが committer をみる限りささださんのコミットみたいです。 [ruby-core:112399] [Bug #19436]

[426434556f] Hiroshi SHIBATA 2023-07-28 03:47:18 UTC

tool/bundler 配下にコミットされた .lock ファイルを削除しています。

[93f57dbcef] Hiroshi SHIBATA 2023-07-28 03:49:55 UTC

.gitignore の bundler のテスト用のファイル群についてのコメントを手直ししています。

[ce6c6c7cfa] Hiroshi SHIBATA 2023-07-28 04:15:12 UTC

tool/sync_default_gems.rb で bundler の同期を取る時の処理で .rb.lock ファイルはコピーしないようにしています。

[b9c2f4a424] Hiroshi SHIBATA 2023-07-28 05:49:03 UTC

ce6c6c7cfae7bb328ef796b57a8daa1e6fba9955 の再修正で bundler の同期時にコピーするファイルパスを修正。

[989f3add62] Nobuyoshi Nakada 2023-07-11 09:08:16 UTC

lib/bundled_gems.rb の bundler の再定義する require で警告を出力する元 default gems の gem の管理する定数を Gem::BUNDLED_GEMS::SINCE と改名して、またネストしたファイルの require も検出して警告するようにしているようです。で gem_prelude.rb から bundled_gems.rb を require しているんですが、これはなぜだろう。

[35517baae5] Hiroshi SHIBATA 2023-07-27 06:17:48 UTC

989f3add62f45d6bf0250810c3c14e2bf22ddb78 に追随して bundler で参照している require 時の警告対象の gem の定数名を変更しています。

[2deeb0e0bf] Hiroshi SHIBATA 2023-07-27 07:17:07 UTC

lib/bundled_gems.rb の 989f3add62f45d6bf0250810c3c14e2bf22ddb78 で追加したメソッドで不要なものを削除しています。

[5de82ed401] git 2023-07-28 06:59:38 UTC

gems/bundled_gems と NEWS の bundled gems のバージョンリストで rexml と rbs のバージョンを更新しています。

[6391132c03] Ruby 2023-07-28 02:03:32 UTC

c330037c1a38cc257dbe21022fcc7b13159c2821 と直接は関係ないですが struct RBasic::flags のビットフラグの定数マクロ VM_CALLCACH_{IVAR,BF} の typo を修正(CALLCACH → CALLCACHE)。

[7cfabe1acc] Nobuyoshi Nakada 2023-07-28 08:50:25 UTC

ruby 本体の require の処理の前後で例外情報や self の情報を保存しているところで rb_execution_context_t 構造体の情報も退避しておいて復旧させるようにしています。 ICC の新しいバージョンで最適化によって longjmp() で情報が壊れることがあったみたいです。