ruby-trunk-changes 2023-08-26

今日は ObjectSpace::WeakMap や ObjectSpace::WeakKeyMap の実装のために GC に weak reference のための mark 関数の実装を追加する変更 String#start_with? や String#delete_prefix の不具合修正、yarp の更新などがありました。

[ec7a2fdc03] Kevin Newton 2023-08-25 12:49:28 UTC

yarp の不具合修正。ですが conflict がそのままマージされているようです。

[633243958c] Peter Zhu 2023-07-24 14:42:04 UTC

b_darray_xxx_without_gc() という関数群を追加しています。メモリ確保失敗した時に GC を起動せずに rb_bug() で異常終了するというバージョンみたいで、GC を起動できない場面で使うんでしょうけどうーん [BUG] で異常終了してしまってもそれはそれで困るような。NoMemoryError 例外は新規メモリ確保できなくても raise できるように確保されてるんじゃなかったっけ?

[bfb395c620] Peter Zhu 2023-07-24 18:21:50 UTC

rb_gc_mark_weak() という弱参照を表す mark 関数を追加しています。どうもこの関数の実装のために 633243958c1b19e7d934442e23ed3d7cc3d7691b で rb_darray_xxx_without_gc() 関数群を追加したみたいですけど、ということはかなりまともに呼ばれるみたいなのでそういうところで rb_bug() が呼ばれる可能性があるのはちょっと怖いなぁ。 [ruby-core:114274] [Feature #19783]

[2091bf9493] Peter Zhu 2023-07-24 14:48:39 UTC

GC.latest_gc_info の返す統計情報に bfb395c620b811b4b3cb7d535d58721268af285d で追加した weak reference 関連の項目 :weak_references_count と :retained_weak_references_count を追加しています。 [ruby-core:114274] [Feature #19783]

[ee9cc8e32e] Peter Zhu 2023-07-24 19:26:10 UTC

bfb395c620b811b4b3cb7d535d58721268af285d で追加した rb_gc_mark_weak() を使って ObjectSpace::WeakMap を実装するようにしています。WeakMap の現在の実装でなにか問題があったのかというとそういうわけでもなくてパフォーマンスと compaction のサポートの強化のためということみたいです。まあ確かにこれほど GC と深く関連する実装が WeakMap/WeakKeyMap というモジュールに独自に存在するよりは gc.c にあるほうが自然というのはそうかも。

[f5c8bdaa8a] Peter Zhu 2023-07-24 19:26:50 UTC

ee9cc8e32e04597a4a86b391df2c19aed9fde3e5 に続いて ObjectSpace::WeakKeyMap の実装も rb_gc_mark_weak() を利用するように変更しています。

[fe73f9f24b] Nobuyoshi Nakada 2023-08-25 14:27:52 UTC

rubyparser.h の構造体 rb_parser_config_t のメンバー snprintf を削除して parse.y で snprintf を呼び出してたところを独自の実装を利用するようにリファクタリングしています。

[40efbc7e40] Nobuyoshi Nakada 2023-08-25 15:51:39 UTC

拡張ライブラリ ripper の Ripper#parse でメソッドの全引数委譲する時の m(...) の記法の時に不要なイベントを発火させていたのを修正しています。 [ruby-core:114535] [Bug #19851]

[7d32011399] Nobuyoshi Nakada 2023-08-25 16:49:24 UTC

70272ca65c59f787e48c219c8946b22ce310fef0 の bundler の再定義する require での bigdecimal の警告出力についての変更でエラーが起きてたのを修正しています。 [ruby-core:114539] [Bug #19852]

[4825600da5] Takashi Kokubun 2023-08-25 19:00:15 UTC

NEWS の YJIT の変更点のリストを書き直しています。

[dd07b70253] Kevin Newton 2023-08-25 19:33:14 UTC

common.mk に yarp の自動生成するファイルのターゲットを追加しています。

[f603497105] Benoit Daloze 2023-08-21 14:27:06 UTC

yarp のバージョンを gemspec ファイルに直接書いてたのを lib/yarp/version.rb を追加してこれを読み込むようにしています。また自動生成するファイルにもバージョンを埋め込むようにしているようです。

[934552618e] Kevin Newton 2023-08-25 19:48:45 UTC

yarp の f603497105bd41c1863490a557ff105bf7e17830 の gemspec ファイルから version.rb を require するパスの指定を upstream と ruby 本体の時とで変更する分岐を追加。

[85c8e8b9bd] Kevin Newton 2023-08-25 19:53:01 UTC

common.mk の yarp/yarp.o への依存関係の yarp/version.h のパスの指定に {$(VPATH)} を利用するように修正。

[439f069b4b] Kevin Newton 2023-08-25 13:23:46 UTC

yarp の upstream でのテストのファイル位置を変更したみたいで(ruby 本体側に合わせるようにしたみたいなので同期時に吸収されてこちらでは移動はみえない) require の方法を require_relative を利用するように変更しています。

[b2d1c720ec] Samuel Williams 2023-08-25 21:59:45 UTC

doc/contributing/building_ruby.md にデバッグ用に ruby をビルドする時の configure のオプションの指定の推奨について追記しています。 --enable-debug-env オプションは知らなかったなあ。 https://github.com/ruby/ruby/pull/8290

[aea7e91828] Kevin Newton 2023-08-25 21:23:15 UTC

tool/sync_default_gems.rb で yarp の同期時のテストファイルの位置を 439f069b4b421964dab39b0a01e0afdae89ea26c に追随して変更しています。

[ca9a44795b] Kevin Newton 2023-08-25 21:54:01 UTC

f603497105bd41c1863490a557ff105bf7e17830 およびその後の yarp の自動生成するファイルにバージョンを埋め込む機構に関する変更を revert しているようです。

[293959a745] Kevin Newton 2023-08-25 22:06:38 UTC

yarp/version.h というヘッダファイルを追加(復活?)させています。また common.mk の yarp 関連の依存関係を更新しています。

[00ec8dedb1] Kevin Newton 2023-08-25 22:19:35 UTC

common.mk の依存関係を再生成しています。

[480aee4363] Zack Deveau 2023-08-25 22:27:56 UTC

debug_counter.h の debug 用カウンタの項目に未定義のまま利用されていたものがあったので追加しています。 https://github.com/ruby/ruby/pull/8297

[96a809f621] Takashi Kokubun 2023-08-25 22:32:13 UTC

拡張ライブラリ json のテストで利用している test_helper.rb の require に require_relative を利用するようにしています。 yarp の同名のファイルと衝突しているのでそれを避けるためとのこと。

[cfdbbd6726] yui-knk 2023-08-24 12:58:51 UTC

parse.y で NODE_DVAR の nd_cflag という子ノードは 9720136d9cbd4ef484b8b5c1f03a48bef5493d6e というずいぶん昔から未使用になってたので代入している箇所を削除しています。

[00ac3a64ba] Nobuyoshi Nakada 2023-08-24 09:32:46 UTC

文字列のバッファの指定の位置が文字の境界になっているかどうかを判定する at_char_boundary() という inline 関数を導入して使いまわすリファクタリング

[808b067088] Nobuyoshi Nakada 2023-08-24 15:49:03 UTC

test/ruby/test_string.rb の巨大なテストメソッドを複数のテストメソッドに分割しています。

[b054c2fe06] Nobuyoshi Nakada 2023-08-24 15:52:53 UTC

String#start_with? や String#delete_prefix がその文字列の Encoding 上での 1文字に満たないバイト列にもマッチしてしまう挙動を不具合として修正しています。なるほどなぁ。バイト列としてチェックしたい時は明示的に receiver を ASCII-8BIT にしておけってことですね。 [ruby-core:114276] [Bug #19784]

[e2b8eac767] Kevin Newton 2023-08-26 00:17:14 UTC

yarp のバージョンを 0.9.0 に更新しています。

[487d91fde1] git 2023-08-26 00:22:09 UTC

NEWS の default gems のバージョンリストの yarp のバージョンを更新しています。

[9ea9f99248] Peter Zhu 2023-08-24 18:23:19 UTC

b98838b65cbf8fa2d228f9e0249414cba4e3197d で Variable Width Allocation による slot サイズ別の heap 毎に slot 数の初期値を指定する環境変数 RUBY_GC_HEAP_INIT_SIZE_#_SLOTS を導入したので、従来の RUBY_GC_HEAP_INIT_SLOTS の指定は無視して警告を出力するようにしています。これいきなり無効にしていいのかな? せめて 3.3 で警告出しつつ全サイズの初期値として利用するようにしておいてその次で削除としないと deprecation のポリシーに反するような。 https://github.com/ruby/ruby/pull/8147 [ruby-core:114290] [Feature #19785]