ruby-trunk-changes 2023-02-22

今日は rubygems の更新で gem exec サブコマンドを追加する変更や YJIT の最適化拡張、拡張ライブラリ bigdecimal のバージョン更新や GC.stat の項目追加などいろいろな変更がありました。

[d2520b7b76] Jean Boussier 2023-02-16 11:18:27 UTC

Marshal.load が Regexp オブジェクトのインスタンス変数が設定されている時にそれをロードしないという不具合を修正しています。 [ruby-core:112433] [Bug #19439]

[d7c1ca48bf] Peter Zhu 2023-02-14 20:50:45 UTC

GC の処理で gc_continue() という関数内で mark 処理の呼び出し時に mark 処理が完了したらすぐに gc_sweep() も呼び出すようにしています。これはこれまで gc_marks_step() という関数内で直接 gc_sweep() を呼んでいたのがわかりにくいので一旦呼び元まで戻ってそこで呼ぶように mark と sweep の処理の流れをわかりやすくするという意味のリファクタリングかなぁと思います。

[93ac7405b8] Peter Zhu 2023-02-14 20:55:25 UTC

GC の統計情報を得る GC.stat に :marking_time と :sweeping_time という項目を追加しています。 d7c1ca48bf7754a23bfe1559422736029b4787a0 もこの変更のための布石だったみたいですね。 [ruby-core:112427] [Feature #19437]

[5077cc2be6] Benoit Daloze 2023-02-21 13:12:51 UTC

拡張ライブラリ bigdecimal の RB_GC_GUARD() の使いかたを代入の左辺値で使うのを避けるようにしています。TruffleRuby の実装でこの書きかたがサポートされていないとのこと。

[7b768e4335] Benoit Daloze 2023-02-21 13:16:45 UTC

5077cc2be68a29339748b50b2346285f545392ea の続きで拡張ライブラリ bigdecimal の get_vp_value() という関数内の RB_GC_GUARD() の呼び出しを関数の末尾に移動してまとめて列挙するようにしています。

[0cde887eb9] Nobuyoshi Nakada 2023-02-21 13:36:01 UTC

拡張ライブラリ bigdecimal のバージョンを 3.1.4 に更新しています。

[ace116fceb] git 2023-02-21 15:36:48 UTC

NEWS の default gems のバージョンリストに bigdecimal を追記しています。

[a26a0af074] Nobuyoshi Nakada 2023-02-21 15:37:18 UTC

rubyspec の拡張ライブラリ bigdecima についてのテストで ruby_version で guard していたのを BigDecimal::VERSION を使って bigdecimal のバージョンでテスト実施有無を分けるようにしています。

[3c01342e19] Matt Valentine-House 2023-02-16 23:11:07 UTC

ヘッダなどの依存関係をコンパイラに生成させて common.mk や depend ファイルを更新する tool/update-deps で不要な出力を削る処理を修正している? みたいです。

[0a9efe8701] Nobuyoshi Nakada 2023-02-21 08:09:32 UTC

defs/gmake.mk の bundled gems のビルドのための? 依存関係管理のためのタイムスタンプの依存関係の書きかたをなにやら変更しています。 clone したリポジトリの .git/ ディレクトリを .gemspec ファイルのかわりに使っているようです。 minitest がリポジトリ内に minitest.gemspec がコミットされていないためとのこと。

[241c4cfdd4] Nobuyoshi Nakada 2023-02-21 09:17:02 UTC

0a9efe8701c43f80ad8b23d89d6b34d13d9d9ade の続きで bundled gems の minitest のビルドのためのダミーの .gemspec ファイル生成の特別処理を tool/lib/bundled_gem.rb 内でメソッドとして切り出して defs/gmake.mk に .gemspec ファイルの生成ルールを作ってそこから BASERUBY を起動してメソッドを呼ぶようにしています。

[289080e4d8] Nobuyoshi Nakada 2023-02-21 11:30:08 UTC

0a9efe8701c43f80ad8b23d89d6b34d13d9d9ade241c4cfdd47c3f5df0738bb636d3f3954101de49 のさらに続きで minitest のように .gemspec ファイルのない bundled gems のリポジトリからのビルド時の処理を common.mk の clone-bundled-gems-src というターゲットで実行するようにして make extract-gems 時に実行させるようにしています。

[37b6d98840] Nobuyoshi Nakada 2023-02-21 14:24:24 UTC

tool/lib/bundled_gem.rb の gem パッケージビルド時の処理に Gem::Package.build を使ってたのを Gem::Package#build を利用するようにしています。 BASERUBY が古い ruby の場合に Gem::Package.build がない可能性があるみたいです。

[d579f47558] Takashi Kokubun 2023-02-21 18:00:39 UTC

Object Shapes で管理するインスタンス変数の数の上限を 50 から 80 に引き上げています。 https://github.com/ruby/ruby/pull/7344

[5baef07506] Jimmy Miller 2023-02-21 18:21:25 UTC

YJIT の Rust 実装でメソッドの不要な引数を削除しています。 https://github.com/ruby/ruby/pull/7348

[50e77b6a9c] Stan Lo 2023-02-21 19:38:03 UTC

標準添付ライブラリ irbIRB::RubyLex のテストのための専用の assertion メソッドを改善して 2つの assertion でチェックしていたところを 1つで実施するようにしています。

[0353277b20] Takashi Kokubun 2023-02-21 21:10:10 UTC

YJIT の生成する命令で冗長で不要だった分岐を削除しています。 https://github.com/ruby/ruby/pull/7350

[9f8056a7dd] Alan Wu 2023-02-21 21:41:23 UTC

YJIT で Module#=== メソッドの呼び出しを専用の命令を生成する最適化を追加しています。 https://github.com/ruby/ruby/pull/7351

[ae9e1aee59] eileencodes 2023-02-17 20:04:51 UTC

YJIT で setinstancevariable 命令によるインスタンス変数のセットでインスタンス変数の数が多いなどで rb_vm_setinstancevariable() 関数の呼び出しに fallback する条件に ctx.get_chain_depth() が上限に達してたというのも追加しています。JIT コード利用自体をあきらめるよりはこっちのほうが速いってことかな。

[1ddda4c0d7] Hiroshi SHIBATA 2023-02-22 00:44:53 UTC

拡張ライブラリ readline のテストのために test/lib/core_assertions.rb や test/lib/envutil.rb といったユーティリティファイルを追加しています。これ多分どこかに重複して存在しているはずなので、後で整理されると思います。

[088919065e] Hiroshi SHIBATA 2023-02-22 00:58:48 UTC

1ddda4c0d7d2b83658ab149e36e088961ca0b2dc の続きで拡張ライブラリ radline のテストの一部を macOS で skip するようにしています。

[fc59b58715] Hiroshi SHIBATA 2023-02-22 01:13:38 UTC

1ddda4c0d7d2b83658ab149e36e088961ca0b2dc で追加された test/lib/core_assertions.rb はやはり削除されて test/lib/envutil.rb を利用するように修正されています。

[015bf5c461] Hiroshi SHIBATA 2023-02-22 01:20:20 UTC

fc59b587156e7ab80b6d5c8cd6708041c6da0dc8 の続きで 1ddda4c0d7d2b83658ab149e36e088961ca0b2dc で追加された test/lib/nvutil.rb と tst/lib/find_excutable.rb もやはり削除されています。

[ac5a949c2a] Nobuyoshi Nakada 2023-02-22 01:05:09 UTC

tool/lib/bundled_gem.rb で git リポジトリを clone する時のコマンド実行のエラー時に例外を発生させてエラー検出しやすくしています。

[d025ff29c4] Nobuyoshi Nakada 2023-02-22 01:10:11 UTC

289080e4d86c70f8231a74a78892b2db65a86e9a で make extract-gems 時に dummy の .gemspec ファイルの生成する clone-bundled-gems-src への依存関係をつけていたのを GIT コマンドが利用可能な時だけにするようにしています。

[2798b13e33] "dependabot[bot]" 2023-02-22 02:26:36 UTC

GitHub Actions の workflows で利用している actions/cache アクションのバージョンを更新しています。

[65ef20d2a7] 小MAO钓鱼 2023-02-22 04:11:33 UTC

Fiber のための coroutine の実装に LoongArch という CPU アーキテクチャのための実装を追加しています。聞きなれないチップ名ですね。 https://github.com/ruby/ruby/pull/7343

[693e4dec23] Nobuyoshi Nakada 2023-02-22 01:57:51 UTC

.appveyor.yml のビルド時に HAVE_GIT=no をセットすることで dummy の gemspec 生成の処理を抑制しようとしているようです。

[cbe14cc8e6] Samuel Giddins 2023-01-26 01:08:14 UTC

rubygems に gem exec というサブコマンドを追加してその gem の executable に含まれるコマンドを実行できるようにしているようです。

[d81be0609b] Samuel Giddins 2023-01-26 02:49:02 UTC

rubygems のテストに cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した exec サブコマンドについてのテストを追加しています。

[3f0f9a7942] Samuel Giddins 2023-02-06 06:08:38 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのヘルプメッセージを追加しています。

[612ebd10c0] Samuel Giddins 2023-02-13 03:19:17 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンド実行時にその gem の依存関係の gem もインストールされるようにしているみたいです。

[47d4f73ee7] Samuel Giddins 2023-02-14 01:22:54 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドで依存している gem に拡張ライブラリを含むものがあった時のために platform の指定をしないようにしている? みたいです。

[2dd9698350] Samuel Giddins 2023-02-14 02:39:08 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドに gem exec gem で gem コマンド自体を実行できるようにしている? みたいです。これは結局なにがしたいんだろう?

[80bfa1b30a] Samuel Giddins 2023-02-14 02:46:24 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドで環境変数 GEM_XXX を一時的に上書きするようにしています。

[931db21208] Samuel Giddins 2023-02-14 18:11:56 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのテストに pre-release 版の gem の対応についてのテストを追加しています。

[ae5deb1ebc] Samuel Giddins 2023-02-14 18:28:22 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのテストで assert_raises を使ってたのを assert_raise を使うように修正しています。

[616a7e1f6c] Samuel Giddins 2023-02-14 18:29:16 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのテストで teardown 時に Gem.configuration を nil でクリアするようにしています。

[0ca3a095be] Samuel Giddins 2023-02-21 12:52:53 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドで上書きする GEM_XXX 系の環境変数は値が設定されているものだけ上書きするようにしています。

[a17b1b19b1] Samuel Giddins 2023-02-21 21:06:35 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドで環境変数 GEM_PATH に指定するパスを区切る文字は Gem.path_separator ではなく File::PATH_SEPARATOR を利用するようにしています。Gem.path_separator は用途が違ったみたいで Regexp オブジェクトの場合があったみたいです。

[151ae9790f] Samuel Giddins 2023-02-22 00:48:47 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのテストの setup と teardown で環境の復旧するように修正しています。

[6232e1b9c0] Samuel Giddins 2023-02-22 00:50:10 UTC

cbe14cc8e6ff7da4ec6d2a3ea9de139cb6dcedbf で追加した rubygems の gem exec サブコマンドのテストで JRuby で問題のあったテストを skip するようにしています。