今日は Hash#transform_values の不具合修正や Set#merge の不具合修正などがありました。
[2ca8769443] Jean Boussier 2025-05-13 12:11:11 UTC
クラスの rb_classext_t の T_ICLASS 用の includer というメンバーは T_ICLASS の時だけ使うので通常のクラスと singleton_class (いずれも T_CLASS) の時のための共用体に埋め込んで VALUE 1つぶん構造体のサイズを節約しています。
[1e2a67e1b0] Samuel Williams 2025-05-13 13:43:52 UTC
NEWS の余計なチケット参照だけ書かれた行を削除。
[bb180b87b4] Nobuyoshi Nakada 2025-05-13 13:34:18 UTC
Hash#transform_values のイテレータ内で Hash#rehash が呼ばれると free(3) 後のメモリを触ってしまう不具合を修正しています。 Hash の内容を書き換えるイテレーター用の関数 rb_hash_stlike_foreach_with_replace() を rb_ensure() を使って Hash のイテレーターの入れ子レベルの管理を行うようにしています。なるほど確かこの iter_lev が 0 になるまでは Hash の実装の st_table のバッファの要素は削除などのフラグだけ立てた状態にして実際には書き換えないようにするみたいなことをしてましたね。 [ruby-core:122052] [Bug #21331]
[96b823a211] BurdetteLamar 2025-05-13 15:30:24 UTC
String#<=> の rdoc 用関数の手直し。
[9420fc8ad6] Jean Boussier 2025-05-13 17:15:11 UTC
拡張ライブラリ stringio で struct RBasic::flags のビットフラグ用のマクロ RUBY_FL_USER2 と RUBY_FL_USER3 を使ってるところでコメントでそれぞれ STR_CHILLED_LITERAL と STR_CHILLED_SYMBOL_TO_S のつもり、と書いています。そのマクロ直接使えばいいような気もするけど、定義されてない場合を考慮してってことかな。その場合はフラグ立てても意味がないと思うから存在チェックして代替定義として 0 にしておくのがいい気がするけど……。 https://github.com/ruby/stringio/pull/128 https://github.com/ruby/stringio/pull/133
[735f28388c] Takashi Kokubun 2025-05-13 17:50:00 UTC
標準添付ライブラリ erb のサポートする ruby バージョンを 3.2.0 以降に更新して、require "cgi/escape" を lib/erb.rb から lib/erb/util.rb に移動しています。また古い cgi と一緒に使っている場合を考慮して CGI.escapeURIComponent が未定義だったら代替実装を使うようにしています。
[4a9d46ce07] Takashi Kokubun 2025-05-13 18:00:02 UTC
標準添付ライブラリ erb で require "erb/escape" で拡張ライブラリのロードをする時に LoadError を rescue していたのをやめています。 https://github.com/ruby/erb/pull/61
[8982bbcbee] Takashi Kokubun 2025-05-13 18:05:33 UTC
標準添付ライブラリ erb のバージョンを指定する定数 ERB::VERSION を private_constant にしてたので gemspec ファイルで Module#const_get を使わないといけなかったのをやめて普通の定数にしています。
[9db0704e67] Takashi Kokubun 2025-05-13 18:07:40 UTC
標準添付ライブラリ erb のバージョンを 5.0.0 に更新しています。
[f82dce148c] git 2025-05-13 18:10:46 UTC
NEWS の default gems のバージョンリストに erb の項目を追加しています。
[c71f9b8aee] Takashi Kokubun 2025-05-13 18:18:17 UTC
4a9d46ce07c5135e6a1fbc7da5ea9b1f21030d94 で標準添付ライブラリ erb での require "erb/escape" の LoadError 捕捉をやめてたのを revert しています。
[cbaf85cb32] Takashi Kokubun 2025-05-13 18:22:52 UTC
c71f9b8aee9b11467e2bb91d841e166f6b36c8af の続きで標準添付ライブラリ erb で require "erb/escape" の拡張ライブラリロードの LoadError 捕捉しているところのコメントを最新の理由(BASERUBY に古い ruby を使ってる場合を考慮)に合わせて書き直しています。
[2fee379f8f] Takashi Kokubun 2025-05-13 20:05:26 UTC
GitHub Actions のいろんなコンパイラオプションを試す workflow で actions/checkout アクションを使って .github/ ディレクトリだけ? clone するようにしています。slack 通知で利用するため?
[1d4822a175] Luke Gruber 2025-05-12 22:03:22 UTC
複数 Ractor で複数 Thread も利用して Ractor.receive や Ractor#take を重複して呼ぶとデッドロックというか Thread が起きなくなってしまうことがある不具合を修正しています。 [ruby-core:102473] [Bug #17624] [ruby-core:120671] [Bug #21037]
[1ee4b43a56] Jean Boussier 2025-05-13 19:39:48 UTC
組み込みクラスになった Set のイテレーション中に Set#merge で要素を追加しようとすると例外を発生させるようにしています。うーんなるほど。これは標準添付ライブラリ版の時も例外になってたのかな? [ruby-core:122053] [Bug #21332]
[b6698114e6] Jean Boussier 2025-05-13 20:30:50 UTC
rubyspec に Set のイテレーション中に Set#merge が例外を発生させるテストを追加しています。バージョンによる guard がないってことは昔からってことかな。と思ったけどこのテストは core に移動後のものだからファイル全体が 3.5 以降でしか実行されないのかも。
[2279da2c91] Takashi Kokubun 2025-05-13 20:39:45 UTC
リポジトリからのビルド時の BASERUBY の最低要求バージョンを 3.1 以降に引き上げています。 https://github.com/ruby/ruby/pull/13321
[e8e7daa71a] Takashi Kokubun 2025-05-13 23:29:45 UTC
標準添付ライブラリ erb で require "erb/escape" の LoadError 捕捉をやめるのを再度適用しています。BASERUBY が 3.1 以降になったので $LOAD_PATH.resolve_feature_path で例外発生しなくなったからとのこと。 https://github.com/ruby/erb/pull/61
[1d3221ad28] Takashi Kokubun 2025-05-13 23:52:03 UTC
e8e7daa71a4915e3cfcf0dccc8392cdacc55866e からのさらに続きで標準添付ライブラリ erb での require "erb/escape" のところで $LOAD_PATH.resolve_feature_path を使って拡張ライブラリがロードできるかのチェックをしていたのをやめて require してみて LoadError を捕捉する方法にしています。miniruby で実行すると $LOAD_PATH.resolve_feature_path の判定は成功するけど拡張ライブラリは読み込めないということが起きてしまうため。
[cb88edf0bf] Takashi Kokubun 2025-05-14 00:03:39 UTC
GitHub Actions の WASM/WASI 用の workflow で環境変数 WASMTIME_BACKTRACE_DETAILS を指定してテスト実行するようにしています。デバッグのため。
[b66c5c3b1b] Nobuyoshi Nakada 2025-05-14 01:23:16 UTC
bb180b87b43c45e17ff49735a26d7a188d5c8396 の Hash のイテレーターでの iter_lev 更新の漏れの修正を revert しています。 WASM/WASI 向けのビルド利用時に rb_ensure() で jmpbuf を確保するのが GC 中のメモリ確保で異常終了が起きてしまうため。 [ruby-core:122052] [Bug #21331]
[7f5b4fb26e] Nobuyoshi Nakada 2025-05-14 01:26:04 UTC
b66c5c3b1b31581960bcb69d49b618d69ae2a87f で revert した bb180b87b43c45e17ff49735a26d7a188d5c8396 のうち単に不要な代入を消してただけの修正とは無関係な hunk は再度適用しています。
[7793b59c8d] Nobuyoshi Nakada 2025-05-14 01:37:59 UTC
b66c5c3b1b31581960bcb69d49b618d69ae2a87f で revert した bb180b87b43c45e17ff49735a26d7a188d5c8396 のリトライ。rb_hash_stlike_foreach_with_replace() で iter_lev を増減させてたのはやめて transform_values() という Hash#transform_values, #transform_values! 専用の関数を導入してここで iter_lev の管理をするようにしています。問題になってたのは #transform_values 等の実装で内部的に使われる rb_hash_stlike_foreach_with_replace() を直接呼んでて、こいつは GC の処理でも呼ばれる可能性があったのでその外に rb_ensure() を使う関数の wrapper をさらに作ってあげてメソッド実装からはそちらを使うようにしたということみたいです。 [ruby-core:122052] [Bug #21331]
[86f5cec782] John Hawthorn 2025-05-13 22:39:39 UTC
misc/tsan_suppressions.txt というファイルを追加しています。TSAN とは ASAN とか MSAN みたいな仲間で Thread Sanitizer というツールのことで、どうもそのツールでの誤検出(というか既知の問題?)を抑制するための指定ファイルみたいですねこれは。
[3b459b5ab6] Hiroshi SHIBATA 2025-05-14 02:33:46 UTC
GitHub Actions の CodeQL を実行する workflow で github/codeql-action/init アクションに dependency-caching: false を指定してキャッシュを利用させないようにしています。
[af74130544] Hiroshi SHIBATA 2025-05-14 02:48:58 UTC
GitHub Actions の CodeQL を実行する workflow で dependency-caching や環境変数 CODEQL_ACTION_CLEANUP_TRAP_CACHES の指定はうまく効かなかったみたいで、最後に gh コマンドで明示的にキャッシュのパージを行なう step を追加して対応しています。
[a7af85a7bd] Hiroshi SHIBATA 2025-05-14 05:07:38 UTC
af7413054460c9fe2afb394d163dd4418f84f8bd の GitHub Actions の CodeQL 実行 workflow の再修正。gh extension で拡張のインストールをしていたのを gh コマンドの cache サブコマンドという組み込みの実装を使うように変更しています。
[52d72979ae] Hiroshi SHIBATA 2025-05-13 08:36:20 UTC
bundler に vendoring する gem の指定をするファイルで net-http および net-http-persistent を commit hash 指定するようにしています。
[a89460a8a0] David Rodríguez 2025-05-13 10:35:38 UTC
rubygems のテストで TruffleRuby 向けに skip していたテストの skip をやめています。
[cc3d304b47] Hiroshi SHIBATA 2025-05-14 01:23:51 UTC
bundler のテスト時に依存する cgi.gem のバージョンを 0.5.0.beta2 以降に更新しています。
[f855bcc6b2] Hiroshi SHIBATA 2025-05-13 08:36:38 UTC
bundler に vendoring している net-http と net-http-persistent を更新しています。
[130d6aaef2] Jean Boussier 2025-05-13 14:27:43 UTC
rb_classext_t の構造体サイズ削減のため superclass_depth というメンバーの型を size_t から uint16_t に変更して位置も移動しています。継承関係のリストの上限が小さくなりますが、まあ現実的に問題にはならないだろうということで。
[9400119702] Jean Boussier 2025-05-13 08:28:42 UTC
Object#object_id を Class/Module のインスタンス(T_CLASS, T_MODULE 型オブジェクト)の場合には struct RClass のメンバーに直接埋め込んでそちらを参照するようにしています。Namespace の導入でインスタンス変数は Namespace ごとに管理されるのと、最近 object_id の管理を Object Shapes によるインスタンス変数の管理に混ぜるように変更したのがちょうど衝突して、Namespace 毎にクラス/モジュールの object_id が変化してしまう? ようになってしまったのでその対策のようです。なるほど。
[f9c3feccf4] Jean Boussier 2025-05-14 08:53:04 UTC
gc.c の id_to_obj_tbl_XXX() という関数群を id2ref_tbl_XXX() と改名しています。
[074dce8370] Alan Wu 2025-05-08 16:19:16 UTC
ZJIT の Rust 実装に u8/u16/u32/u64 といった整数型への変換のための IntoUsize という trait の定義を追加しています。
[767e8e165a] Alan Wu 2025-05-08 13:18:09 UTC
ZJIT の Rust 実装で 074dce8370b480ccf0ef5843347b87af57b31000 で実装した IntoUsize によるキャストを利用しています。
[37d6de5331] Alan Wu 2025-05-14 10:18:23 UTC
ZJIT でメソッド引数の rest 引数が Array であることを前提にして推論するようにしています。
[4eff1727e3] Alan Wu 2025-05-08 16:17:37 UTC
ZJIT のメソッド引数処理のテストの追加。
[920dc0fe3a] Alan Wu 2025-05-14 10:39:40 UTC
ZJIT の Rust 実装のスタイルの修正。