ruby-trunk-changes 2023-08-20

今日は主に bundler の細かな最適化や標準添付ライブラリ reline の timeout への依存をやめる変更などがありました。

[70ce3c8947] Nobuyoshi Nakada 2023-08-19 12:00:19 UTC

rubygems のテストで一時ファイルの fd が leak していたのを修正しています。

[d5ffbca5c4] Nobuyoshi Nakada 2023-08-20 04:29:42 UTC

version.c の MKSTR() という関数マクロの呼び出しを rb_define_global_const() の引数内で書いてたのを変数に一度格納して渡すようにしています。ただ MKSTR() マクロは fake.rb を作る時に? ソースコードから切り出して使うために参照されるみたいなのでコメントとして MKSTR() を残しています。

[f69f775f24] Akira Matsuda 2023-08-20 04:06:33 UTC

rubygems の gem uninstall 時の削除するバージョンの指定の入力のチェックの不具合を修正しています。

[1935433f5f] Samuel Giddins 2023-08-17 22:38:53 UTC

rubygems で Gem::Specification の Marshal.load での読み込みにリトライを追加しています。よくわからないですが YAML 関係のクラスのロード状況で結果が変わるっぽいです。

[b68be40e24] Samuel Giddins 2023-08-17 22:47:46 UTC

rubygems のテストで assert_raises を利用していたところを assert_raise に変更しています。

[921c2bba4e] Josh Nichols 2023-08-16 18:57:48 UTC

bundler で ENV.to_h の結果に #select のかわりに #select! を呼んで不要な中間オブジェクトの生成を抑制しています。

[79b187a45e] Josh Nichols 2023-08-16 18:59:17 UTC

bundler の Bundler::Settings#[] の実装でも破壊的メソッドを利用することで中間オブジェクトの生成を抑制しています。

[2a61e1dccc] Josh Nichols 2023-08-16 19:04:06 UTC

同じく bundler の Bundler::Settings#all でも Array#| のかわりに Array#union を使うことで中間オブジェクトの生成を抑制しています。

[b97e45d01a] Josh Nichols 2023-08-16 19:04:34 UTC

同じく bundler の Bundler::Settings#all の実装で map のかわりに破壊的変更する map! を利用することで中間オブジェクト生成を抑制しています。

[7cb6cbee95] Josh Nichols 2023-08-16 19:05:39 UTC

bundler の BUndler::Settings#local_overrides で正規表現によるマッチのかわりに String#start_with? を使うようにしています。

[e921efa476] Josh Nichols 2023-08-16 19:06:11 UTC

bundler の Bundler::Settings#is_bool の実装で同じオブジェクトに to_s を2回呼んでたのをローカル変数に格納しておくようにしています。

[598048e3dd] Josh Nichols 2023-08-16 19:07:31 UTC

e921efa476dc24246dcb40452fa1e9c02e75675d と同様に bundler の Bundler::Settings#is_string でも to_s メソッドの呼び出し結果をローカル変数に格納して複数の呼び出しを抑制しています。

[239e35254b] Josh Nichols 2023-08-16 19:08:38 UTC

bundler の Bundler::Settings#to_bool で case 文の when 節に正規表現を置いてたのを引数が String 型かどうかを先に when 節で確認してその時だけ正規表現マッチを試すように最適化しています。不要な MatchData オブジェクトの生成を抑制するため。

[29aab66e6b] Josh Nichols 2023-08-16 19:08:54 UTC

bundler の Bundler::Settings#converted_value で引数の key を先に to_s で文字列化しておくようにしています。

[b5a0630cd0] Josh Nichols 2023-08-16 19:09:00 UTC

bundler の Bundler::Settings.key_for で文字列の破壊的メソッドを利用することで中間オブジェクトの生成を抑制しています。

[f0bf9391dc] Martin Emde 2023-08-18 16:31:48 UTC

7cb6cbee953b8cf020e4e337bdbadd426460c71f で bundler の Bundler::Settings#local_overrides の実装で正規表現のかわりに String#start_with? を使うようにしましたがその後特殊変数 $' を利用しているところがあったのでそこも修正しています。

[e5efa01c7d] Josh Nichols 2023-08-19 16:23:11 UTC

921c2bba4e4f0bb89d9ff354c05a176174586064 の bundler の Bundler::Settings#initialize で ENV.to_hn の結果を破壊的メソッド利用するようにした時についでに正規表現のかわりに String#start_with? を使うようにしていましたが、そのため従来は弾けていた "BUNDLE_" のみという変数名が通ってしまっていたのであらためて削るようにしています。

[3544200513] Josh Nichols 2023-08-19 16:33:44 UTC

bundler のコーディングスタイルの修正のみ。

[7c226291d3] Stan Lo 2023-08-20 10:40:42 UTC

標準添付ライブラリ reline で入力待ちのタイムアウトをするのに標準添付ライブラリ timeout の Timeout.timeout を利用していたのをやめて io/console の IO#getc の引数でタイムアウト指定をする機能を利用するように変更しています。irb の debug.gem 統合の時に Thread を利用していると問題があるので Thread を利用する timeout の実装を避けるようにしたみたいです。 https://github.com/ruby/reline/pull/580

[f0923164d8] Nobuyoshi Nakada 2023-08-19 10:35:24 UTC

Marshal.dump の実装で利用している構造体 struct dump_arg の num_entries の型を unsigned long から st_index_t に修正しています。

[812272bdb2] Nobuyoshi Nakada 2023-08-19 10:51:20 UTC

Marshal のテストで Tempfile で一時ファイルを作っていたところを pipe で済ませるようにしています。