ruby-trunk-changes 2024-08-10

今日は主に文字列操作などの細やかな最適化などがありました。

[af44af238b] Jean Boussier 2024-08-08 10:14:50 UTC

文字列オブジェクトの struct RBasic::flags のビットフラグで freeze や chilled string のフラグ、IO の書き込みバッファに使われている時のロックのフラグが立っていた時に str_modifiable() や str_independent() でこれらのフラグをチェックするショートカットを追加しています。本体の処理もこれらのフラグのチェックですが、多くの場合例外は発生させないのでビットマスクでまとめてチェックすることでエラーにならない時のチェックを 1回ですませるようにするという最適化のようです。

[2bd5dc47ac] Jean Boussier 2024-08-08 10:42:04 UTC

string.c の str_capacity() で FL_TEST() のかわりに FL_ANY_RAW() マクロを利用するようにしています。不要な即値チェックを省くという最適化のようです。

[c91ec7ba1e] Peter Zhu 2024-08-07 15:12:49 UTC

GC の実装の外部化のインターフェースの objspace_mark という関数を削除しています。よくわかりませんが外部に切り出す必要がなかったということみたいです。

[e63a2115f6] Peter Zhu 2024-08-09 18:26:15 UTC

拡張ライブラリ psych のインデントのタブを空白に展開。

[c8708c72c4] Peter Zhu 2024-08-09 18:51:40 UTC

git blame で無視させるためのコミットを指定する .git-blame-ignore-revs に e63a2115f64433b21cb5dd67c5bf8b30f87ef293 のタブの展開を追加しています。

[712ac99e4d] Peter Zhu 2024-08-09 19:15:51 UTC

拡張ライブラリ psych のインデントのタブを空白に展開。

[d1474affa8] Peter Zhu 2024-08-09 19:16:08 UTC

拡張ライブラリ psych のテストのインデントのタブを空白に展開。

[ee482f48ee] Peter Zhu 2024-08-09 19:37:58 UTC

c8708c72c401fa99879b9ea01e6ccf1bd4c983eb と同様に git blame で無視するコミットの指定に 712ac99e4d0384a941c80a9f48f62943ba7d97c0d1474affa8e105bece209cc9d594bb0a989859e1 を追加。 d1474affa8e105bece209cc9d594bb0a989859e1 はインデントだけでなくてコメントの削除が含まれてますが、まあ削除だし問題ないか。

[5a570421a5] Alan Wu 2024-08-09 20:02:36 UTC

Regexp.last_match の rdoc 用コメントで特殊変数の言及で間違って $! と同等と書かれてたのを $~ に修正しています。

[a332367dad] Jean Boussier 2024-08-09 13:24:49 UTC

文字列の操作でバイト単位の操作が可能かどうかのチェックをする single_byte_optimizable() で最初に Encoding をチェックして ASCII-8BIT や US-ASCII だったら即 true を返し、UTF-8 なら coderange をチェックして ASCII-compatible かどうかチェックするショートカットを追加しています。

[3bac5f6af5] Jean Boussier 2024-08-09 13:27:42 UTC

string.c の str_ensure_byte_pos() で a332367dad3172e8a8c12efed3913c7fde684b06 で最適化した single_byte_optimizable() を呼び出して不要なチェックをスキップするように最適化しています。

[4e85b6b4c4] Jean Boussier 2024-08-08 09:48:04 UTC

String#bytesplice の実装で Encoding の設定をするところで引数に渡された文字列と Encoding が一致している時に不要な処理をスキップする最適化を追加しています。

[7b7dde37f5] Peter Zhu 2024-08-09 20:17:36 UTC

拡張ライブラリ psych で例外発生時のメモリリークを修正しています。

[6ee9a08d32] Jean Boussier 2024-08-08 12:11:37 UTC

Object Space の slot ではなく主にマシンスタック上のの変数を Array オブジェクトのように初期化する rb_setup_fake_ary() で引数 freeze を削除して不要な分岐をなくし、さらに struct RBasic::flags のビットフラグをプロセス起動時に一度計算しておいてそれを使いまわすようにする最適化。ずいぶん細かな最適化ですね。Array#pack の最適化になるんだと思います。

[b1f4222fc5] Jean Boussier 2024-08-10 09:50:44 UTC

magic comment shareable_constant_value についてのテストを追加しています。3.3 系でのみ存在する不具合に対応したテストみたいです。 [ruby-core:118797] [Bug #20668]