ruby-trunk-changes 2023-07-10

今日は主に require などで読み込むファイルの realpath 解決結果をキャッシュする最適化や String#index/String#rindex の実装のリファクタリングなどがありました。

[5e79d5a560] Nobuyoshi Nakada 2023-07-09 07:39:28 UTC

String#rindex の実装で使っている rb_str_rindex() という関数の中で rb_str_sublen() を呼んでいたのをやめてバイト単位の位置を返すようにして呼び元で rb_str_sublen() を呼び出すようにしています。他の呼び元での不要な処理を削って高速化するためみたいです。

[9dcdffb8bf] Nobuyoshi Nakada 2023-07-09 09:45:51 UTC

String#index と String#rindex の実装を似せるようにリファクタリングしているみたいです。

[d516910b61] Nobuyoshi Nakada 2023-07-10 07:36:03 UTC

3cfcd3d1663169ad68e22e5efef35f8057173993 で common.mk の ripper_srcs というターゲットに .NOTPARALLEL という疑似ターゲットを使って並列実行を抑制していたのをやめて defs/gmake.mk で DOT_WAIT 変数を RIPPER_SRCS 変数の先頭に付加するようにしています。.NOTPARALLEL が古い make で期待したように動かなかったとのこと。

[abfac2222b] krk 2023-07-03 00:00:00 UTC

require したファイルのファイルパスの realpath を解決した結果を内部的な Hash オブジェクトでキャッシュすることで重複した realpath(3) の呼び出しを抑制する最適化を施しています。実行中にファイルの symlink とかをはりかえた時の挙動とかで過去になにか修正があったような気がしなくもないけど、どっちが(変更後のファイルを再度ロードするのかロード済みとするのか)正しい挙動なのかはっきり決まってなさそうだなぁ。

ractor.c の rb_ractor_make_shareable_copy() で rb_ractor_make_shareable() とほぼ同じ処理があったので委譲するようにリファクタリングしています。

[c8d0470bb0] Nobuyoshi Nakada 2023-07-10 10:18:48 UTC

入出力を空にするための /dev/null などのデバイスファイルを File::NULL または C のソースでは ruby_null_device を参照するようにソースコードや rdoc 用コメントをリファクタリングしています。

[2951e3d83b] Nobuyoshi Nakada 2023-07-10 10:19:37 UTC

標準添付ライブラリ mkmf.rb で標準エラー出力を捨てる処理の nmake (つまり Windows 環境)向けのコマンドの書きかたを変更しています。