ruby-trunk-changes 2023-12-20

今日は irb の更新や --parser=prism 指定時の不具合修正、M:N Thread の macOS/BSD 対応、RubyVM::YJIT.enable のキーワード引数 stats 追加などがありました。

[1822acdf33] Doug Orleans 2023-12-16 00:37:40 UTC

doc/syntax/calling_methods.rdoc から 3.0 より前の古い ruby での splat 渡しでの最後の Hash の引数をキーワード引数に変換する挙動についての記述を削除しています。歴史的経緯でもあるから "This behavior will be removed in Ruby 3.0." のところだけ変えて残しててもいいような気もするけど。

[8e6f63df47] Peter Zhu 2023-12-14 19:15:17 UTC

IO::Buffer の実装で struct rb_io_buffer 構造体を Variable Width Allocation による拡張 slot に埋め込むようにしています。

[df0bfde2b2] Aaron Patterson 2023-12-18 23:16:31 UTC

コマンドラインオプションで --parser=prism を指定した時に -e でスクリプトを渡すと ruby 実装の組み込みクラスなどのメソッド定義や -r で指定されたファイルの require が完了していない状態で呼ばれていた? 不具合を修正しています。 [ruby-core:115793] [Bug #20073]

[084b44e79d] BurdetteLamar 2023-12-19 15:19:00 UTC

Complex#to_s や Complex#inspect の rdoc 用コメントを手直し。

[bd91c5127f] Takashi Kokubun 2023-12-19 19:47:27 UTC

RubyVM::YJIT.enable メソッドで起動後に YJIT を有効にする時にキーワード引数に stats を追加して --yjit-stats を指定したのと同様の挙動も指定できるようにしています。 https://github.com/ruby/ruby/pull/9297

[50d39219a9] Peter Zhu 2023-12-19 20:21:28 UTC

compaction 時の参照の移動への追随の処理で T_ICLASS 型オブジェクトの実装で RICLASS_OWNS_M_TBL_P() というマクロを利用するようにリファクタリングしています。

[28a6e4ea9d] Peter Zhu 2023-12-19 19:38:57 UTC

Module の複製や Module#include で T_ICLASS 型のオブジェクト(IClass)を作る時に struct RClass::m_tbl への代入をオブジェクトの確保後に GC が走る前に実施するように処理の順序を移動しています。 m_tbl をセットする前に GC が発生してしまうと RGenGC による Write Barrier が効かなくて異常終了に繋がる可能性があったようです。

[2fe5fc176b] Koichi Sasada 2023-12-19 21:14:51 UTC

詳細読んでませんが M:N Thread の実装で IO 待ちに入った Thread が別の Thread が対象の fd を close してしまった時に起きれなくなってしまう不具合があったのを修正しているようです。

[ec51a3c818] Koichi Sasada 2023-12-19 20:25:38 UTC

internal/thread.h に rb_thread_io_blocking_call() という関数の prototype 宣言を追加しています。

[7a0dfdea8c] Koichi Sasada 2023-12-19 21:15:15 UTC

io.c で IO 待ちの関数呼び出しのために rb_thread_io_blocking_region() を呼んでいたところを rb_thread_io_blocking_call() を直接呼んで適切な events フラグを指定するように修正しています。 https://github.com/ruby/ruby/pull/9178#issuecomment-1858711533

[054f56fd3e] Koichi Sasada 2023-12-19 18:45:41 UTC

複数 Ractor 間のオブジェクトの転送時に Object Shapes の shape ID をリセットするようにしています。Object Shapes の管理って Ractor 間で分離されてるんですね。Object Shapes の rb_shape_tree_ptr ってグローバル変数だから Ractor 間でも共有されるかと思ってたけどそうじゃないのかな。 [ruby-core:114992] [Bug #19917]

[f0b86f8c60] BurdetteLamar 2023-12-19 20:32:54 UTC

Complex#finite? と Complex#infinite? の rdoc 用コメントを手直し。

[32ecda354f] Peter Zhu 2023-12-18 21:55:19 UTC

デバッグ用に RGENGC_CHECK_MODE マクロを定義してビルドした時に GC.auto_compact= に :empty という Symbol を指定して compaction 時に処理する page の順序を逆にして極力移動を起こしやすいようにしています。テストで不具合を踏みやすくするため。

[ae2c4d0720] Mikhail Doronin 2023-12-18 20:13:47 UTC

5bb946228550c7f171c27725860b153a675404f3 で template/Makefile.in で $(PROGRAM) の依存関係から冗長な $(MAINLIBS) を削ったのを revert しています。 configure に --enable-shared と --with-jemalloc を指定した時に参照順の問題で不正なアドレス参照になって異常終了してしまうことがあったそうです。 [Bug #19831] [ruby-core:115779] [Bug #20072]

[7dca6b53a9] Jeremy Evans 2023-12-20 05:30:47 UTC

tool/missing-baseruby.bat というファイルを追加して configure で BASERUBY の指定が必要な時の警告出力をこのスクリプトで行うようにしています。 BASERUBY に echo コマンドを代入して警告主力するようにしていましたがこの中に ";" があるのが OpenBSD の make? shell? でうまく扱えなかったそうでこのようにしているようです。 [ruby-core:113572] [Bug #19683]

[7ef90b3978] HParker 2023-12-20 05:12:18 UTC

プロセス終了時に確保したメモリを全て解放してメモリプロファイラによるリーク検出をみやすくするための環境変数 RUBY_FREE_ON_EXIT を RUBY_FREE_AT_EXIT に変更して、対応して内部的な変数名なども改名しています。

[8782e02138] JP Camara 2023-12-07 01:01:14 UTC

M:N Thread の実装で epoll のかわりに kqueue が使える環境をサポートするようにしています。 BSD 系や macOS をサポートするようになるみたいです。

[256f34ab6b] JP Camara 2023-12-16 03:39:45 UTC

M:N Thread の実装(?)の thread_sched_wait_events_timeval() という関数に引数で rb_thread_t を渡すようにして GET_THREAD() の重複した呼び出しを抑制するようにしています。

[4927f25148] Koichi Sasada 2023-12-20 06:48:49 UTC

M:N Thread の実装で native thread のマシンスタックのために mmap() でメモリ確保する時のフラグに MAP_STACK を追加するのを FreeBSD では行なわないようにしています。

[7c2d819862] Jean Boussier 2023-12-20 08:05:44 UTC

ba1d1522d35a7dd2595603ead57cd0fa8b21ba8b および f6ad49b87c110b618632a4a258896e3f5673000b で Object Shapes の too_complex になった時の警告メッセージに対策の suggestion を追記したところの英文法の修正。

[2793a30b69] Stan Lo 2023-12-18 14:36:55 UTC

irb で irbrc ファイルのロード時のエラーをただの print で出力していたのを Kernel#warn を使って警告メッセージとして出力し、バックトレースの出力はなくしています。また Kernel#load 前にファイルの存在チェックをするようにしています。 https://github.com/ruby/irb/pull/817

[4ad1007fd2] Burdette Lamar 2023-12-18 23:26:43 UTC

irb のドキュメントを doc/irb/indexes.rdoc から doc/irb/indexes.md に移動して Markdown によるマークアップに変更しています。 https://github.com/ruby/irb/pull/812

[31959f1f13] Stan Lo 2023-12-20 10:04:53 UTC

irb のバージョンを 1.11.0 に更新しています。 https://github.com/ruby/irb/pull/818

[fac7d2c1ab] git 2023-12-20 10:36:35 UTC

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