ruby-trunk-changes 2023-12-23

今日は主に M:N Thread の不具合修正、RubyGems と bundler の再度更新、標準添付ライブラリ set の変更とバージョン更新などがありました。

[19d082dcfa] Takashi Kokubun 2023-12-22 19:20:45 UTC

RJIT でオブジェクトの構造を表現するのに RubyVM::RJIT::CType::Pointer というクラスを利用していたところのうち配列を指していたもの? のために RubyVM::RJIT::CType::Array というクラスを新設してこちらを利用するようにしています。

[bbfc262c99] Koichi Sasada 2023-12-22 18:57:53 UTC

M:N Thread の実装で IO 待ちに入る時に Thread を切り替える処理を thread_io_wait_events() という関数にまとめています。例外発生時? などの後始末の不具合修正のためみたいですがよくわからない。また static 関数の名前に rb_ の prefix が付いてたものを削っています。

[c974ee1abe] Koichi Sasada 2023-12-22 20:22:52 UTC

標準添付ライブラリ monitor のテストのエラー時の Thread が待ちのまま止まってしまうのを防ぐため ensure 節で Queue に nil を詰める処理を追加しています。

[a4b737213e] Koichi Sasada 2023-12-22 20:23:53 UTC

timer_thread_set_timeout() という関数でタイムアウト値を RB_HRTIME_PER_MSEC 単位にまるめる処理で切り捨てになっていたのを切り上げになるよう修正しています。これも M:N Thread 関係かな?

[2fe9e08578] Koichi Sasada 2023-12-22 22:44:36 UTC

rubyspec の ruby -v の出力をチェックするテストで M:N Thread が有効な時にも skip するようにしています。

[beec3d07c9] Koichi Sasada 2023-12-22 22:45:08 UTC

IO#readpartial, IO#read_nonblock などの実装から呼ばれる関数 io_read_memory_call() で rb_thread_io_blocking_call() を呼ぶ時の events 引数に RB_WAITFD_IN を渡していたのを 0 にするようにしています。これを渡すとブロックしてしまってメソッド実装の意図と異なるからかと思われます。

[fa5de8f68d] Koichi Sasada 2023-12-22 22:46:56 UTC

M:N Thread の実装で通常の Fiber (blocking Fiber、Scheduler による自動切り替えのない従来の Fiber)での実行の時のみ IO 待ちやタイムアウト待ちの処理を行なうようにしています。M:N Thread と nonblocking Fiber を併用した時には Fiber の Scheduler のほうが IO 待ちによる切り替えを先に(?)処理するということですね。

[7d7a84e99f] Hiroshi SHIBATA 2023-12-23 00:08:54 UTC

RubyGems と bundler の 3.5.3 と 2.5.3 をそれぞれマージしています。

[24ff13d8da] git 2023-12-23 00:35:43 UTC

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

[697a096c9b] John Hawthorn 2023-12-16 09:34:03 UTC

vm_trace.c の clean_hooks() という関数から未使用な引数 ec を削除しています。プロセス終了時に ec が取得できない時点でも呼べるようにするために消したいということみたいです。

[339978ef38] John Hawthorn 2023-12-22 20:15:07 UTC

環境変数 RUBY_FREE_AT_EXIT が設定されていてプロセス終了時にメモリ解放をする時の rb_free_default_rand_key() の呼び出しのタイミングを Ractor の解放後にずらしています。Ractor の解放時に Ractor 毎の local storage の key として必要な変数なのでその後まで残しておく必要があったとのこと。

[f1b7424cbe] John Hawthorn 2023-12-22 20:15:22 UTC

環境変数 RUBY_FREE_AT_EXIT を指定してプロセス終了時に全メモリ解放する時の処理で fork 後のプロセスだと VM スタックの領域の解放が不要ということで削って(分岐して)いるのと rb_threadptr_root_fiber_release() 内で rb_execution_context_t を参照した時の NULL チェックを追加しています。

[9b289d58f7] Burdette Lamar 2023-12-23 03:31:18 UTC

Complex#to_i や Complex#to_f, Complex#to_r などの rdoc 用コメントを書きなおしています。 https://github.com/ruby/ruby/pull/9307

[c25705c267] Takashi Kokubun 2023-12-23 04:20:03 UTC

tool/lib/test/unit.rb にあった RJIT 対応のためのモジュール? RJITFirst を削除しています。テストの方法を変更して不要になっていたみたい。

[ef06510265] Takashi Kokubun 2023-12-23 05:47:35 UTC

RJIT の ruby 実装部分で標準エラー出力を $stderr ではなく STDERR で参照するようにしています。

[da02d08f27] Takashi Kokubun 2023-12-23 06:17:58 UTC

RJIT 用の WITH_RJIT_ISOLATED_USING_PC() というマクロで評価される文の前後で rb_errinfo() を保護して例外コンテキストを元に戻すようにしています。

[271c74a473] Akinori MUSHA 2023-12-08 13:09:22 UTC

標準添付ライブラリ set のバージョンを 1.1.0.dev に更新し gemspec ファイルで要求する ruby バージョンを 3.0.0 以上に引き上げています。

[6fc3171e8a] Akinori MUSHA 2023-12-08 13:18:25 UTC

標準添付ライブラリ set で古い ruby のための分岐を削除しています。

[67882d7695] Akinori MUSHA 2023-12-08 13:20:14 UTC

標準添付ライブラリ set で Set#all? メソッドを利用しているところでブロックを使わず引数に Set オブジェクトを渡す呼びかたを利用するようにリファクタリングしています。性能のためかな。

[c66ff6face] Akinori MUSHA 2023-12-23 07:43:37 UTC

標準添付ライブラリ set のバージョンを 1.1.0 に更新しています。

[40bc7ede38] Akinori MUSHA 2023-12-23 07:51:41 UTC

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

[8c03bdacd1] Nobuyoshi Nakada 2023-12-22 16:51:23 UTC

common.mk で make test-all の実施前の依存関係として定義されている yes-test-all-precheck を直接依存せずに PRECHECK_TEST_ALL という変数経由で参照するようにして変数指定で制御できるように? しています。

[f6e9899e8a] Nobuyoshi Nakada 2023-12-22 16:54:35 UTC

common.mk の exe/ruby の依存関係にタイムスタンプファイルを追加して、また .extout/${arch}/ のサブディレクトリの下に rbconfig.rb への symbolic link をはるようにしています。 rubygems を読み込むのに失敗するためとのこと。

[dc7785e16b] Nobuyoshi Nakada 2023-12-23 09:15:26 UTC

rubyspec の標準添付ライブラリ set のテストで 1.1 の変更(67882d7695552202c47a62bae12e8a774f9e64ea の変更かな?)で引数に Set に似たようなインターフェースを持つ Enumerable を include したクラスのインスタンスを渡した時に動かなくなってたみたいなのでとりあえずテストを Set::VERSION で guard するようにしています。

[fd3dede7f4] Nobuyoshi Nakada 2023-12-23 09:57:47 UTC

dc7785e16ba54039d7341bba570ff551f146cf62 の rubyspec の Set::VERSION での guard ですが古い set のバージョンではそもそも Set::VERSION 定数によるバージョンの導入がされていないので defined? でのチェックをして set のバージョンを取得しておくようにしています。

[fe9e57bac8] Nobuyoshi Nakada 2023-12-23 10:36:21 UTC

test/ruby/test_syntax.rb のインデントの修正のみ。