今日は主に Class/Module の名前の管理のための実装の変更や irb のリファクタリングやテストの整理、bundled gems の rbs や typeprof のバージョン更新/commit hash の指定などがありました。
標準添付ライブラリ reline のテストで teardown で Reline#test_mode を呼び出して状態を復帰させる後始末を追加しています。
Encoding#replicate メソッドを削除して dummy encoding を自由に作れないようにしています。
variable.c の Class/Module の名前を取得する関数 classname() で RCLASS_EXT() の NULL チェックをしていた if 文を削除しています。NULL はありえないからとのこと。
doc/regexp.rdoc に条件つきマッチの記法についてのドキュメントを追記しています。うーむ、これ知らなかった。
構造体 rb_classext_t の variation_count メンバーの型を uint32_t から unsigned char に変更しています。Object Shapes の variation の数の上限は 8bit でおさまるので小さくしたそうです。
Class/Module の名前は定数に代入した時に(class 文や module 文の場合は文の実行時に)決定されるため割と複雑な処理をしていて、名前を Class/Module の内部的な("@" ではじまらない)インスタンス変数に格納していたのですが、それを構造体 rb_classext_t のメンバーとして追加しています。 Module#const_set でベンチマークしていますが、定数代入そんなにたくさんするかな……とはいえインスタンス変数で保持していた実装はトリッキーな気がしてたのでこれは素直な実装になって良かった気はします。ただなんで元はインスタンス変数にしてたのかな、というのが実はなにか落し穴があったりして、というのが気になります。
vm_call_method_each_type() 内で struct rb_callcache の flags メンバーへの代入で不要な INVALID_SHAPE_ID の埋め込みを削除しています。 T_IMEMO 型オブジェクトなので不要ということかな。
標準添付ライブラリ irb の IRB::RubyLex#set_input の省略可能な第2引数を削除してブロックのかわりに Proc オブジェクトを受け取る仕様を削除しています。
標準添付ライブラリ irb のファイルのヘッダに CSV? RCS? の置換用文字列が残ってたのを削除しています。
標準添付ライブラリ irb の lib/irb/lc/ja/error.rb に script encoding を指定するマジックコメントが残ってたのを削除しています。デフォルトが UTF-8 になったので不要になっているので。
標準添付ライブラリ irb のファイル群のヘッダコメントを整形して余分なコメント行を削除しています。
標準添付ライブラリ racc の生成する ruby スクリプトに Ractor.make_shareable の呼び出しを追加して複数 Ractor 対応するようにしているようです。
標準添付ライブラリ racc でも class_eval する時に引数でファイル名と行番号の指定を追加して eval する文字列内の位置情報が得られるようにしています。
標準添付ライブラリ reline の Reline::LineEditor で check_multiline_prompt メソッドに色付けのための? エスケープシーケンスを含んだ文字列でなく元の文字列を渡すようにしています。
GitHub Actions の workflow .github/workflows/baseruby.yml と .github/workflows/spec_guards.yml の対象の ruby バージョンに 3.2 を追加しています。
make test-bundler-prepare で bundle install 相当のコマンド実行する時に --quiet オプションを渡してメッセージを抑制するようにしています。
標準添付ライブラリ mutex_m の gemspec ファイルに spec.required_ruby_version を追加して 2.4 以前のサポートを切っています。
標準添付ライブラリ mutex_m で alias を定義するためだけに module_eval を利用していたのを Module#alias_method メソッドを利用するようにリファクタリングしています。
hash.c 内の hash_stlike_lookup() という関数で関数ポインタで保持している st_table::type::hash の関数が 3種類のいずれかであることを確認する RUBY_ASSERT() を追加しています。コミットログを読んだ感じだとドキュメントとしてここで hash メンバーが持つ関数はこの 3つだけだぞ、というのを明示するためという意図みたいです。 https://github.com/ruby/ruby/pull/7107
標準添付ライブラリ reline の lib/reline/unicode/east_asian_width.rb で保持している Unicode テーブルを Unicode 15.0.0 に対応するよう更新しています。
標準添付ライブラリ irb の IRB::RubyLex#check_state や #process_continue, #check_code_block などの tokens という引数を省略可能にしていたのが不要だったみたいで必須の引数に変更しています。
gems/bundled_gems の typeprof のバージョンを 0.21.4 に更新しています。