ruby-trunk-changes 2022-11-05

今日は主に Object Shapes 関連の潜在的不具合修正や適切な rustc が利用可能な環境ではデフォルトで YJIT が有効にビルドする変更などがありました。

[76a6c5d6d1] Alexander Momchilov 2022-11-03 18:59:48 UTC

UnboundMethod#bind で UnboundMethod から Method に変換する時に 引数のオブジェクトのクラスについての冗長なチェックがあったのを削除しています。

[93f364d65e] Peter Zhu 2022-11-04 13:02:58 UTC

76a6c5d6d16cd0e55df15d66d53c6d7a9614f3d6 の続きで UnboundMethod#bind で引数のオブジェクトのクラスをチェックする時に RTEST() マクロを利用するように修正しています。

[6b90910973] Nobuyoshi Nakada 2022-11-04 15:18:02 UTC

common.mk の依存関係を更新しています。

[6e4b97f1da] Jemma Issroff 2022-11-04 14:49:00 UTC

Object Shapes によるインスタンス変数管理の関連で struct rb_classext_t::max_iv_count を更新する処理を obj_free() で実際に slot を解放する時に実行していたのを gc_mark_children() で行うよう移動しています。そもそも free する時に更新してたのはなぜなんだろう。

[13395757fa] Nobuyoshi Nakada 2022-11-04 15:43:35 UTC

拡張ライブラリ digest の depend ファイルの依存関係を更新しています。

[b169d78c88] Takashi Kokubun 2022-11-04 16:46:23 UTC

dc5d06e9b145f7d5f8c5f7c3757b43f2d68833fd で導入した標準添付ライブラリ erb の escape_html の実装の拡張ライブラリの実装を Module#prepend を使って ERb::Util.html_escape のオリジナルの実装を上書きしてたのをやめて、拡張ライブラリのメソッド定義時に直接 ERb::Util.html_escape の実装を上書き定義するようにしています。

[367c072ac6] Stan Lo 2022-11-04 17:53:10 UTC

irb のテストの警告抑制のため IRB.conf[:VERBOSE] = false を追加しています。

[6d83590157] Peter Zhu 2022-11-04 19:36:30 UTC

make test-all のテスト中の各種リソースの leak checker で環境変数の変更を検出する処理で bundler 用の環境変数のバックアップのために定義される環境変数の追加については無視するようにしています。

[dd4ae9a475] Maxime Chevalier-Boisvert 2022-11-04 21:02:04 UTC

YJIT の Rust 実装のために利用する rustc のチェックを configure に追加して rustc の対象バージョン以上のものが利用可能で OS や CPU アーキテクチャがサポート対象ならばデフォルトで YJIT が有効になるようビルドされるようにしています。 https://github.com/ruby/ruby/pull/6662

[f276d5a7fe] Takashi Kokubun 2022-11-05 06:24:16 UTC

benchmark/ の CGI.escapeHTML のベンチマークの整理と ERb::Util.escape_html のベンチマークの追加。

[419d2fc14d] Takashi Kokubun 2022-11-05 06:58:43 UTC

標準添付ライブラリ erb の拡張ライブラリ版 ERb::Util.escape_html で strpbrk(3) で文字列内にエスケープ対象の文字が含まれるかチェックしてなかったらすぐかえすショートカットを追加しています。

[e8873e01b6] Takashi Kokubun 2022-11-05 07:26:32 UTC

419d2fc14d2bedc6d5a7080ee80df8330884ea6c の標準添付ライブラリ erb の拡張ライブラリでの strpbrk(3) を使った最適化は SIMD による高速化がきくように文字列のサイズが 16 bytes 以上の時だけ利用するようにしています。

[458d6fb15e] Takashi Kokubun 2022-11-05 07:41:52 UTC

標準添付ライブラリ erb の拡張ライブラリ版 ERb::Util.escape_html の最初に引数を rb_convert_type() で文字列オブジェクトにするのを RB_TYPE() で T_STRING 型じゃない時だけ呼ぶようにしています。rb_convert_type() の先頭でもオブジェクトの型のチェックしているけど、関数の呼び出しのコストも省略したいってことかな。

[9af344a421] Takashi Kokubun 2022-11-05 08:30:41 UTC

419d2fc14d2bedc6d5a7080ee80df8330884ea6ce8873e01b67629f93ebbd83397f2454e16e0d864 の標準添付ライブラリ erb の拡張ライブラリでの strpbrk(3) を利用した最適化を revert しています。 M1 チップで遅くなってしまったそうです。また短い文字列について呼ぶことが多いそうで SIMD による最適化の恩恵を受けにくいのであまり効果がなかったみたいです。