ruby-trunk-changes 2023-04-19

今日は主に rubygemsYAML の読み込みに bundler に同梱されていた pure ruby 実装を利用して psych 依存をなくす変更や VM 最適化命令 opt_newarray_send の追加などがありました。

[2dff1d4fda] John Hawthorn 2023-04-18 14:09:16 UTC

YJIT の trace のためのサンプリング時に VM スタックサイズの算出が間違っていたのを修正しているようです。 https://github.com/ruby/ruby/pull/7728

[b09f5c7bf7] Vladimir Dementyev 2023-04-18 23:19:31 UTC

正規表現のマッチ結果から名前つきの capture 結果を取得する MatchData#named_captures にキーワード引数 symbolize_names を追加してキーを Symbol にした Hash を返せるようにしています。 https://github.com/ruby/ruby/pull/6952

[3016f30c95] Aaron Patterson 2023-04-18 21:45:18 UTC

shape.c の rb_shape_traverse_from_new_root() で次の rb_shape_t がテーブル内にみつからなかった時に NULL を返すように修正しています。

[c5fc1ce975] Aaron Patterson 2022-06-07 00:27:56 UTC

VM 命令に opt_newarray_send という VM スタックのトップから配列を作ってそのメソッドを呼ぶというのを一度に行う最適化命令を追加しています。 [a, b, c].max みたいなのはよく書くと思われるのでそれを最適化するためみたいです。どのくらい効くのかな。 [ruby-core:109147] [Feature #18897]

[66938fc703] Aaron Patterson 2022-07-05 22:36:23 UTC

YJIT のための C binding 定義のファイル yjit/src/cruby_bindings.inc.rs を再生成しています。

[b816ea8772] Aaron Patterson 2023-04-18 20:16:14 UTC

c5fc1ce975ecdf1c6818714e47579c5d3531c4ca で追加した VM 命令 opt_newarray_send の YJIT 対応を追加しています。

[bdffcd6df3] Aaron Patterson 2023-04-18 20:53:37 UTC

c5fc1ce975ecdf1c6818714e47579c5d3531c4ca で追加した VM 命令 opt_newarray_send の RJIT 対応も追加しています。

[7b3932a9c9] Nobuyoshi Nakada 2023-04-19 00:23:13 UTC

GitHub Actions の annocheck の実行といろんなコンパイラオプションをためす workflow で .md ファイルの変更のみのコミットはスキップするようにしています。

[8023da746c] Nobuyoshi Nakada 2023-04-19 00:23:28 UTC

compile.c の switch 文のインデント修正のみ。

[a1c2c274ee] TSUYUSATO Kitsune 2023-04-19 04:08:28 UTC

差分が大きくて読みきれてませんが正規表現のマッチの memo 化の実装で不正メモリアクセスする可能性があったのを修正している? みたいです。修正そのものは https://github.com/ruby/ruby/pull/7694 で実施されてるとのことなのでその変更のリファクタリングかも? https://github.com/ruby/ruby/pull/7724 [Bug #19537]

[62781d479b] git 2023-04-19 04:08:48 UTC

test/ruby/test_regexp.rb の行末の空白除去。

[628e432739] Koichi Sasada 2023-04-19 02:40:16 UTC

定数参照で定数がみつからなかった時の rb_mod_const_missing() で NameError 例外を発生させる際に ec->private_const_reference を 0 クリアするように修正しています。ごく稀に異常終了する可能性があったようです。

[6f50ecfe66] Hiroshi SHIBATA 2023-04-17 04:44:17 UTC

rubygems で Gem.load_yaml のかわりに Bundler::YAMLSerializer というのを使うようにしています。 psych でなくて pure rubyYAML ライブラリが bundler に同梱? されててそれを使うようにしているようです。

[2014dc5e3a] Hiroshi SHIBATA 2023-04-17 05:42:23 UTC

6f50ecfe664924c086879273a29a2ecea9e51683rubygems でも使うようにした bundler 配下の Bundler::YAMLSerializer で Hash のキーが Symbol の場合に対応するようにしています。また整数と真偽値の decode 処理も追加しています。

[fd981ebf4c] Hiroshi SHIBATA 2023-04-17 05:45:00 UTC

2014dc5e3aef50eb59b05138af8f0f72935c4f58 の続きで Bundler::YAMLSerializer で Hash の値の Symbol にも対応するようにしています。

[2c91ec0869] Hiroshi SHIBATA 2023-04-17 06:05:11 UTC

さらに 2014dc5e3aef50eb59b05138af8f0f72935c4f58 からの続きで Bundler::YAMLSerializer で空文字列を nil に decode するようにしています。

[038c6e773f] Hiroshi SHIBATA 2023-04-17 06:05:31 UTC

lib/rubygems/gemcutter_utilities.rb に Gem.load_yaml を追加しています。 6f50ecfe664924c086879273a29a2ecea9e51683 で別のファイルで Gem.load_yaml を消したのでそちらに依存してたところがあったみたいです。

[1225eff38f] Hiroshi SHIBATA 2023-04-17 06:10:55 UTC

038c6e773f1140485840e0789e275e0cdf880f0a で一旦 lib/rubygems/gemcutter_utilities.rb に追加した Gem.load_yaml を削除して他と同じように Bundler::YAMLSerializer を利用するように変更しています。

[9365492f63] Hiroshi SHIBATA 2023-04-17 06:26:00 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの続きで fd981ebf4c9661bb3ce243477a18fdb5413dde4e で Bundler::YAMLSrializer を使った時に値の Symbol 対応した時に先頭の ":" まで名前に含めてしまってたのを修正しています。

[e684eb9e61] Hiroshi SHIBATA 2023-04-17 06:45:53 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの続きで再修正。 require "bundler/yaml_serializer" が抜けていたところがあったので追加しています。

[7e537e9613] Hiroshi SHIBATA 2023-04-17 07:10:26 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 Bundler::YAMLSerializer で key が URL の時の変換処理があってそれを "__" が含まれる時だけ呼ぶようにしています。なんだろうこれ。

[364c2fea34] Hiroshi SHIBATA 2023-04-17 07:45:14 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 Bundler::YAMLSerializer で空の Hash を nil に変換する? ようにしています。このクラスは純粋な YAML ではなくてなんかちょっと特殊な挙動をするみたいですね。

[bf8d8ce1ee] Hiroshi SHIBATA 2023-04-17 09:54:29 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 Bundler::YAMLSerializer の変更の 7e537e96131fd5f244544d3b07a362a2938ad1a2 は revert して 364c2fea345a2b0cc5f1d975e1b55c7f542a7936 の特殊な処理は呼び元の lib/rubygems/config_file.rb で行うように移動しています。

[3988b1d471] Hiroshi SHIBATA 2023-04-17 10:06:36 UTC

rubygems のログインのテストで api_key に数字だけの文字列を使ってたのをアルファベットを含めるようにしています。これも Bundler::YAMLSerializer 利用がらみの変更かな。数字のみの文字列が dump->load すると数値になってしまう的な。

[d0dc617917] Hiroshi SHIBATA 2023-04-17 10:07:03 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 rubygems のテストで使う load_yaml_file メソッドで Psych を利用していたのを Bundler::YAMLSerializer を利用するように変更しています。

[30b3290f26] Hiroshi SHIBATA 2023-04-17 10:21:46 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 Bundler::YAMLSerializer でキーが URL の時の特別処理をやっぱり lib/bundler/yaml_serializer.rb に移動して Bundler::YAMLSerializer.load にキーワード引数 is_rubygems を追加してこの指定で変換する挙動を on/off するようにしています。

[7b959f6288] Hiroshi SHIBATA 2023-04-17 10:57:36 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 30b3290f266609d502791ec5d2edb4885d89d462 はやっぱり revert して rubygems 用の特別処理はやっぱり lib/rubygems/config_file.rb に書くように変更しています。

[cdc2e3de10] Hiroshi SHIBATA 2023-04-17 11:24:13 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 rubygems 向けの特別処理は convert_rubygems_config_hash という専用のメソッドに切り出してこれを lib/rubygems/gemcutter_utilities.rb や test/rubygems/helper.rb から呼び出すようにリファクタリングしています。

[45655089da] Hiroshi SHIBATA 2023-04-17 11:46:40 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 rubygems 向けの特別処理で URL のキーに "__" が含まれているかのチェックを String#include? を使うようにしています。また末尾の "/" を削るようにしています。

[644d7df021] Hiroshi SHIBATA 2023-04-18 00:51:06 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 lib/rubygems/config_file.rb で Bundler::YAMLSerializer を利用してさらに rubygems 向けの変換を行う一連の処理を Gem::ConfigFile.dump_with_rubygems_yaml というクラスメソッドに切り出しています。

[ef54a9aeb6] Hiroshi SHIBATA 2023-04-18 00:57:56 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 rubygems の他のファイルでも 644d7df021e17c70932da3173ec309ae1c8063d5 で追加した Gem::ConfigFile.load_with_rubygems_config_hash メソッドを利用するように変更しています。

[92ab4e41dd] Hiroshi SHIBATA 2023-04-18 01:13:43 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。rubygems の他のテストでも 644d7df021e17c70932da3173ec309ae1c8063d5 で追加した Gem::ConfigFile.load_with_rubygems_config_hash メソッドを利用するように変更しています。

[8b95b33a9d] Hiroshi SHIBATA 2023-04-18 01:59:25 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 644d7df021e17c70932da3173ec309ae1c8063d5 で追加した Gem::ConfigFile.load_with_rubygems_config_hash で YAML を load した結果が Hash でない時の分岐を削除しています。

[62e5ba537a] Hiroshi SHIBATA 2023-04-18 02:03:50 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 644d7df021e17c70932da3173ec309ae1c8063d5 で追加した Gem::ConfigFile.load_with_rubygems_config_hash のテストを追加。

[40d1a00040] Hiroshi SHIBATA 2023-04-18 10:30:39 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 bundler の Bundler::YAMLSerializer を rubygems にも Gem::YAMLSrializer として移植して lib/rubygems/config_file.rb ではこちらを利用するように変更しています。

[d1c42da7a1] Hiroshi SHIBATA 2023-04-18 10:37:47 UTC

6f50ecfe664924c086879273a29a2ecea9e51683 からの一連の変更の続き。 40d1a0004041f60301c8090ab8955024ebc35cc2rubygems 側に移植した Gem::YAMLSerializer を逆に bundler のほうでも可能なら利用するように変更しています。

[7477284043] Hiroshi SHIBATA 2023-04-18 04:30:21 UTC

rubygems のテスト用のライブラリである Gem::MockGemUi の定義を lib//rubygems/mock_gem_ui.rb から test/rubygems/mock_gem_ui.rb に移動しています。