ruby-trunk-changes 2023-04-04

今日は RJIT の不具合修正や最適化、deadlock 検出の不具合修正などがありました。

[3cb5e7558d] Takashi Kokubun 2023-04-03 15:44:16 UTC

RJIT でコンパイル済みのコードの検索で極力似てるものを検索してなかった時の fallback 処理を削除しています。よくわかりませんがテストのエラー対策みたいです。

[ba4ff2552e] Takashi Kokubun 2023-04-03 15:52:46 UTC

コマンドラインオプションの --enable のテストで RJIT 向けの条件分岐を追加しています。

[38209ffdca] Takashi Kokubun 2023-04-03 21:10:35 UTC

YJIT に Array#<<, #push メソッドのために専用のコード生成する最適化を実装しています。 https://github.com/ruby/ruby/pull/7645

[b2e848193a] Koichi Sasada 2023-04-03 18:39:30 UTC

9720f5ac894566ade2aabcf9adea0a3235de1353 で sleep に時間指定しなかった時の実装をリファクタリングした結果 deadlock が検出されるようになってしまったので再修正しています。9720f5ac894566ade2aabcf9adea0a3235de1353 で書いた「もしかするとよりしっかり眠るようになってるのかも」が実際に起きていて? 潜在的な deadlock 検出の不具合を表出したという感じでしょうか。

[05b7bbecc6] Nobuyoshi Nakada 2023-04-04 02:27:43 UTC

3be65f63c79492908e898d8d7281035445a2b9a1 で追加した Dir#chdir メソッドの実装で fchdir(2) が利用できない環境の場合の警告抑制のために VALUE 型の変数に一度値を受けてからポインタ参照するようにしています。

[1d529f382c] Nobuyoshi Nakada 2023-04-04 02:29:57 UTC

Process.pid のキャッシュの実装で Kernel#fork が未実装の環境(Windows)ではクリアするタイミングがないので clear_pid_cache() 関数の定義を HAVE_WORKING_FORK と HAVE_DAEMON のマクロをチェックする preprocessor 分岐内に入れて未使用関数の警告抑制しています。

[6a4087702b] Takashi Kokubun 2023-04-04 05:07:52 UTC

RJIT の VM 命令 setlocal のコンパイル時に型情報の推論を強化しているようです。

[822f01b36c] Hiroshi SHIBATA 2023-04-04 01:43:24 UTC

Msys2 で Rust の実装に不具合があるみたいで rubygems の Rust 実装の拡張ライブラリを利用するテストを MinGW 環境では skip するようにしています。

[f3acaf312c] Koichi Sasada 2023-04-04 06:42:37 UTC

rb_thread_t の通し番号を返す rb_th_serial() で引数の th が NULL の場合を受け入れて 0 を返すようにしています。 2093e4c2db1e19991e601bf5191eddb4652de35d の時の変更のためかなぁと思ったけど 2093e4c2db1e19991e601bf5191eddb4652de35d の変更では NULL を渡すことはなさそうなので将来の変更のためかな。

[2c560b976e] Takashi Kokubun 2023-04-04 07:30:49 UTC

RJIT のコンパイラ実装で C の binding の C::SPECIAL_CONST_P に渡す値の変換が不足していたのを修正しています。

[19506650ef] Takashi Kokubun 2023-04-04 05:52:38 UTC

RJIT のコンパイラで RubyVM::RJIT::Context の型情報を確認する --rjit-verify-ctx というオプションを追加しています。

[98f0e2c330] Takashi Kokubun 2023-04-04 07:40:31 UTC

2c560b976ed86730dfa305266fcc69033f6790cc の再修正で RJIT の C binding の C::SPECIAL_CONST_P に渡していた引数は元に戻して機械語生成の時に変換するようにしています。

[51b2f4c0f5] Takashi Kokubun 2023-04-04 08:17:23 UTC

RJIT のコンパイラでメソッド呼び出しの引数処理のための VM スタック操作でサイズ指定を間違えていたのを修正。