ruby-trunk-changes 2022-11-10

今日は主に正規表現のマッチ速度の最適化や Random の乱数生成器の拡張ライブラリからの利用のためのインターフェースのバージョン導入などがありました。

[230267d1a8] Nobuyoshi Nakada 2022-11-09 11:15:48 UTC

parse.y に %require を追加して bison の必須バージョンの指定を 3.0 にしています。 f7db1affd10767d729866e95c02ffb26266829ab でコミットログには Bison 3.0 以降を要求するようになったと書いてあったけど明示的にチェックや制限しているところがなかったのでこれで古い Bison の時にバージョンの更新が必要なのがわかるようなエラーになるという感じですねきっと。

[881bf9a0b8] TSUYUSATO Kitsune 2022-10-03 13:21:56 UTC

ここから以下のチケットで提案されている正規表現のマッチにかかる時間が非常に長くなるケースに起因した脆弱性対策の一貫としてキャッシュを利用した処理時間の短縮を行う最適化の実装とそれに関連するテストなどの導入のコミットが続きます。 https://github.com/ruby/ruby/pull/6486 [ruby-core:110621] [Feature #19104]

[0e1e1b1980] Burdette Lamar 2022-11-09 16:15:39 UTC

doc/io_streams.rdoc に分離してた IO のドキュメントを削除して IO クラスの rdoc 用コメント内のセクションとして展開しているようです。 https://github.com/ruby/ruby/pull/6669

[9ab978b718] "Eileen M. Uchitelle" 2022-11-09 22:09:16 UTC

YJIT 用のオプション --yjit-stats を指定した時に自動的に --yjit-exit-locations の指定した時のファイルへのダンプも有効になるようにしています。 https://github.com/ruby/ruby/pull/6703

[5a4d9f91c4] yui-knk 2022-11-09 23:06:18 UTC

doc/contributing/building_ruby.md の ruby のビルドに必要な環境の bison の必要バージョンを更新しています。 [ruby-core:110383] [Feature #19068]

[b7504af8fc] Nobuyoshi Nakada 2022-11-09 13:04:28 UTC

bison の必要バージョンの更新に伴い古い bison をサポートするために parse.y を置換する tool/pure_parser.rb を削除しています。そういえばこんなのあったなぁ。 a064e46762ec0bfd40e6a04242d9e62fdd21e1f0 での導入ですね。

[0ae5de1a5d] Nobuyoshi Nakada 2022-11-10 00:11:20 UTC

insns.def と variable.c のインデントと C のスタイルの修正。

[6eaed20e14] Nobuyoshi Nakada 2022-11-08 00:06:21 UTC

Random の乱数生成器を拡張ライブラリから利用するためのインターフェースを規定する構造体 rb_random_interface_t にバージョンを指定するメンバーを追加してバージョンが不一致の時に初期化時に TypeError を発生させるようにしています。

[b7e8876704] Nobuyoshi Nakada 2022-11-09 10:36:37 UTC

Random の乱数生成器を拡張ライブラリから 利用するための rb_random_interface_t に init_int32 という関数ポインタのメンバーを追加しています。よく理解していませんが同じ seed からの乱数生成が ruby のバージョンによって変化してしまっていたという問題への対応でしょうか。 [ruby-core:110584] [Bug #19100] 0ae5de1a5ddcca407dd2ba30ca5d5f3d7c3ea4bc で導入した rb_random_interface_t のバージョンチェックはこの非互換の検出のためみたいですね。とはいえどのみち非互換は入るわけですがメモリレイアウト(ABI)の非互換を踏む前にバージョンチェックするから異常終了みたいなことにはならないということでしょうか。