ruby-trunk-changes 2021-09-16

今日は GC の profile 情報の記録の不具合修正や require したファイル内で $LOADED_FEATURES を変更する時の不具合修正、MatchData の新規メソッド追加などの変更がありました。

[e624d0d202] Peter Zhu 2021-09-13 13:12:08 UTC

gc.c の invalidate_moved_plane() という関数に struct gc_sweep_context を引数として渡してそこで解放した slot 数を蓄積させていって後でまとめて objspace->profile.total_freed_objects や struct heap_page::free_slots に反映させていたのを、invalidate_moved_plane() の中で直接これらのメンバーを更新してくようにしてこの不要な引数を削除しています。page のほうの free_slots の更新の対象の page が移動先になってたのを移動元のほうを加算するように修正しているようです。

[a65ac2d6fa] Peter Zhu 2021-09-13 13:19:10 UTC

おそらく e624d0d202ef691f5c75841b90bf44a624e3cdcc の続きで gc.c の gc_page_sweep() で struct heap_page::free_slots を同様に struct gc_sweep_context に蓄積させておいてあとで代入しているところを、直接加算していることを考慮して上書きでなく加算するようにしています。

[db51bcada4] Peter Zhu 2021-09-15 13:37:46 UTC

e624d0d202ef691f5c75841b90bf44a624e3cdcc の追加修正で invalidate_moved_plane() で移動するオブジェクトの flags の FL_FROM_FREELIST というビットフラグの有無をみて total_freed_objects を加算するかどうか決めてるところを、移動後のオブジェクトのフラグをみてしまっていたので移動元のオブジェクトのほうで判定するように修正しています。

[67e3727d71] git 2021-09-15 18:37:51 UTC

version.h の日付更新

[68bd5626c3] "S.H" 2021-09-16 04:21:06 UTC

time.c に ruby_reset_leap_second_info() という関数の前方宣言がありましたが、この関数は static でなく internal/time.h に prototype 宣言もあって不要みたいなので削除しています。 https://github.com/ruby/ruby/pull/4824

[81fd91ab1b] Shugo Maeda 2021-09-16 08:28:31 UTC

NEWS の c60dbcd1c55cd77a24c41d5e1a9555622be8b2b8 の新記法のエントリの整形と、省略時に参照されるのは定数とローカル変数とメソッド呼び出しだけだという説明を追記しています。 予約語(if とか self とか break とか)を書いてもそれはローカル変数として検索される(なかったらメソッド名としても?)とのこと。 [ruby-core:85950] [Feature #14579]

[ddb32e6616] Nobuyoshi Nakada 2021-09-13 15:57:05 UTC

require したスクリプト内で $LOADED_FEATURES が変更されていて、さらにそこから require が呼ばれた場合に変更後の $LOADED_FEATURES にその feature が含まれていても load されるという不具合を修正しているようです。 rb_provide_feature() 内で配列オブジェクトに push する前に get_loaded_features_index() を呼び出すという修正なの、get_loaded_features_index() は内部で reset_loaded_features_snapshot() という関数を呼び出して変更された $LOADED_FEATURES を vm->loaded_features_snapshot にコピーするという処理をしているので、これを先にしておかないと追加した内容が消えてしまうんだそうです。 [ruby-core:105294] [Bug #18173]

[09d724e6f8] Nobuyoshi Nakada 2021-09-16 10:37:52 UTC

MatchData#match というメソッドを新規追加しています。引数にインデックス(またな名前付きグループの場合文字列か Symbol)を与えて正規表現のグループ化された部分ごとにマッチした部分文字列を返すというもの。こういうのありませんでしたっけ? MatchData#[] と似てるけど引数を 1つしか受け取らないという違いがあるのか。あと部分文字列を返すので効率が良い? [ruby-core:105290] [Feature #18172]

[f2cb6288bc] Nobuyoshi Nakada 2021-09-16 10:50:29 UTC

MatchData#match_length メソッドを追加しています。 MatchData#match と同様にインデックスか文字列/Symbol でグループに対応するマッチした部分文字列のサイズを返すメソッドです。 [ruby-core:105290] [Feature #18172]

[aa3d8388c0] Nobuyoshi Nakada 2021-09-16 10:55:31 UTC

09d724e6f846b4e53e8571d41ca7d3055d732d9ff2cb6288bc6f1d5e693841734ce5eb04ff41c2a9 で追加した MathData#match と MatchData#match_length メソッドについて NEWS に追記しています。 [ruby-core:105290] [Feature #18172]