ruby-trunk-changes 2022-11-08

今日は coverage 利用時のブロック内の break が誤って LocalJumpError になることがある不具合の修正や同一 Thread 内の Fiber による Mutex の dead lock 検出の強化、ビルドに利用する bison の最低バージョンの変更などがありました。

[ca0b592673] Stan Lo 2022-11-06 14:55:24 UTC

irb の補完処理で require のファイルパスを補完する時に利用できる gem の gemspec ファイルを読み込んで require_paths の設定を撮り込む処理を毎回していたのを起動時に一度だけ実行して結果を定数に格納しておくようにしています。まあ毎回と言っても呼び元でクラス変数に結果を利用した load path をキャッシュしているので一回しか呼ばれないような気はしますが、コミットログによるとテスト時に繰り返し呼ばれてしまうことがあったみたいです。

[7442cb461b] Takashi Kokubun 2022-11-07 15:48:26 UTC

YJIT の Rust 実装でのコード領域の GC のための処理のタイミングを少し後のほうにずらしています。よくわかりませんが Ruby 本体のほうの API を使うことで GC が発生しうる処理があってその後に実施しないといけなかったということみたいです。どの関数だろう。 rb_yjit_tracing_invalidate_all() かなぁ。 https://github.com/ruby/ruby/pull/6676
なおコメントに typo がありそうです(VirtuamMem → VirtualMem)。

[9001e53e68] Takashi Kokubun 2022-11-07 17:29:24 UTC

irb の組み込みコマンド show_source で引数をクオートした文字列でなくても許容するようにしています。

[c99e4c4278] Benoit Daloze 2022-11-07 19:05:18 UTC

spec/mspec に upstream から最新版をマージしています。

[83decbb62b] Benoit Daloze 2022-11-07 19:05:30 UTC

spec/ruby に upstream から最新版をマージしています。

[b14f133054] Peter Zhu 2022-11-07 19:35:21 UTC

doc/contributing/building_ruby.md の ruby のビルド方法の例でインストール先のディレクトリを掘るステップとかもうちょっと具体的に一連の操作を追記したり拡張ライブラリのビルドのためのオプションの渡しかたとか HomeBrew の場合のリンクするサードパーティーライブラリのパスの取得のしかたとかを追記しています。

[cb2323a983] Nobuyoshi Nakada 2022-11-08 00:31:58 UTC

rubyspec の Thread#native_thread_id についてのテストは CRuby 以外の実装では未実装の場合もあるのでメソッド定義があるかどうかもチェックして未定義の時にテストを除外するようにしています。

[7456647eff] Peter Zhu 2022-11-08 00:47:12 UTC

b14f133054bb04e1187f9897fa546faa433d37e7 で doc/contributing/building_ruby.md のリストの番号を全て 1. にしてたのでちゃんと通し番号をつけるようにしています。

[f7db1affd1] yui-knk 2022-09-23 14:01:55 UTC

ruby のビルドに必要な Bison のバージョンを 3.0 以降に変更して、yydebug での出力をカスタマイズする %printer の指定を任意のノードに対して NODE のタイプ名を出力できるようにしています。この任意のノードを対象にするっていう記法が新しい bison でないとサポートされていないってことだと思います。 macOS では HomeBrew などで bison を別途インストールしないとリポジトリからのビルドができなくなるみたいですね。 [ruby-core:110383] [Feature #19068]

[4a7d6c2852] Yusuke Endoh 2022-11-08 02:52:22 UTC

拡張ライブラリ coverage で branch coverage の集計を有効にしているとブロックから break で抜ける時などの throw 命令が LocalJumpError の判定のためにチェックしている ISeq の命令列のパターンが崩れてしまって誤って LocalJumpError が発生してしまうという不具合の修正のため compile_iter() でブロックを命令列にコンパイルする時にジャンプ用のラベルを挿入する位置を調整する処理を追加しています。 [ruby-core:109822] [Bug #18991]

[001606097b] Nobuyoshi Nakada 2022-11-08 06:06:15 UTC

re.c の match_check() という関数の戻り値が void なのを VALUE にしています。特にその必要性があったわけでなく GCC の不具合で警告が出るのでそれを回避するために呼び元でこの戻り値を使うように書きかえているようです。

[4e728486b9] Yusuke Endoh 2022-11-08 05:41:04 UTC

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

[cdb3ec3af8] git 2022-11-08 08:08:48 UTC

4e728486b93eaec876ea8f876df9ecad350da269 に追随して NEWS の default gems のバージョン更新リストの error_highlight のバージョンも更新しています。

[eacedcfe44] Jean byroot Boussier 2022-11-08 11:43:16 UTC

Thread::Mutex#lock や Thread::Mutex#sleep の実装で通常の Fiber (non-blocking Fiber 用の Scheduler が設定されていない時)に同一の Thread 上の別々の Fiber が同一の Mutex のロック取得しようとしていた時の dead lock 検出が漏れていたのを修正しています。これって昔からかな。 https://github.com/ruby/ruby/pull/6680 [ruby-core:110626] [Bug #19105]