ruby-trunk-changes 2021-01-29

今日は Ractor 化の影響でメソッド呼び出しのパフォーマンスが悪化していたのを改善するための gccct の導入や拡張ライブラリ pathname の Pathname#each_line のキーワード引数の扱いの不具合修正などがありました。

[2e32b919b4] Benoit Daloze 2021-01-28 16:08:57 UTC

rubyspec を upstream からマージしています。珍しく直後にやりなおしがない。

[c10be4e9db] git 2021-01-28 16:09:44 UTC

version.h の日付更新

[f6387ae073] Nobuyoshi Nakada 2021-01-28 23:53:45 UTC

irbirb_load コマンドの実装でファイルパスが絶対パスかどうかの判定に Windows 環境で問題があって対応しています。ドライブレターを判定に加えるためみたいですね。

[522adbc945] Nobuyoshi Nakada 2021-01-28 23:37:37 UTC

rubyspec の Kernel#rand のテストで Float を比較するのに equal? ではなく eql? で同値チェックするようにしています。

[acb6b395b6] Kazuhiro NISHIYAMA 2021-01-29 02:59:42 UTC

bundler のテストで bundle gem で生成する Rakefile の確認で実行しているディレクトリの配下のディレクトリ構成に依存してしまうテストをチェックして問題があったら skip するようにしています。

[9241211538] Nobuyoshi Nakada 2021-01-29 04:09:38 UTC

拡張ライブラリ pathname の Pathname#each_line で File.foreach に委譲する時にキーワード引数も委譲するように rb_block_call_kw() を利用する修正。 [ruby-core:102280] [Bug #17589]

[1ecda21366] Koichi Sasada 2021-01-20 18:33:59 UTC

メソッド呼び出しの call cache を Ractor 対応のため inline cache を廃止したら性能が悪化してしまったとのことで、Global Call-Cache Cache Table (gccct) というものを導入して、inline cache のかわりに rb_vm_t::global_cc_cache_table にグローバルな cache table を持つことで代替としています。この table は Class/Module とメソッドの ID からハッシュ値を作ってそれをキーにして引いてますが、ここの操作は Ractor 間での排他は不要なのかな。ポインタの格納と参照だけだから競合はしないということだろうか……。 [ruby-core:101840] [Bug #17497]
gccct って名前強そう。

[98e27016c9] Koichi Sasada 2021-01-29 03:54:43 UTC

vm_eval.c の rb_method_call_status() の if 文の連なりを if ... else if に書きかえたりどの条件にもマッチしなかった時の return を早期 return に書きかえたりといったリファクタリング