今日は Thread のライフライクルイベントフックの Ractor や M:N Thread 対応やメソッドの keyword rest 引数とブロック引数の変換の処理順の修正などがありました。
[b2ad4fec1a] John Hawthorn 2023-12-09 05:16:02 UTC
デバッグ用の Thread のライフサイクルのイベントフックを複数 Ractor 利用時や M:N Thread で user-thread が切り替わるタイミングでの呼び出しを追加しています。 [ruby-core:115465] [Bug #20019] 一度 85bc80a51be0ceedcc57e7b6b779e6f8f885859e で revert された変更のリトライですね。フック呼び出しの追加が 1つ増えています。
[9e09e5aa3a] John Hawthorn 2023-12-09 19:33:36 UTC
b2ad4fec1a369e1cbd0c65d52062946a4fbfb84b で追加したテストにタイミング問題を避けるための sleep を追加しています。
[c0b6ea7c8b] KJ Tsanaktsidis 2023-12-08 23:55:12 UTC
compaction に関するテストで確実性のために生成するオブジェクト数を増やしています。
[a950f23078] Jeremy Evans 2023-11-08 23:56:53 UTC
メソッド呼び出しへの m(**kw, &blk) のような keyword rest とブロック引数を渡した呼びかたをした時に kw.to_hash と blk.to_proc の呼び出しによる変換が行われる順序を kw.to_hash → blk.to_proc の順になるようにしているそうです。このために新たな VM 命令 splatkw というのを追加して ISeq へのコンパイル時に必要に応じてこの命令を send の前に差し込むようにしています。なるほど確かに引数の評価は順に行われると無意識に想定しているし細かいことを言うと決まってないといけないのですが VM 命令まで必要になるとは。ちょっと苦肉の策という感じがしますね。
[f64357540e] Jeremy Evans 2023-12-07 20:16:09 UTC
a950f230788d51e13d16596e37cb77e4cc6e2311 の続きで super(**kw, &blk) のような super の呼び出しでも kw の to_hash での変換のほうが先に行われるように splatkw 命令を挿入しています。
[130268e264] Stan Lo 2023-12-10 04:21:41 UTC
irb の組み込みコマンド show_source のオプション処理などのリファクタリング。 https://github.com/ruby/irb/pull/807
[6e8ad7497e] Nobuyoshi Nakada 2023-12-10 04:55:19 UTC
template/GNUmakefile.in で DOT_WAIT 変数を定義するのを Makefile を include する前に移動しています。 Makefile 内で DOT_WAIT を利用するため。
[aecbd66742] KJ Tsanaktsidis 2023-11-19 11:54:01 UTC
include/ruby/atomic.h に RUBY_ATOMIC_LOAD()、RUBY_ATOMIC_PTR_LOAD() といった rb_atomic_t や void* の取得のマクロとその実装の inline 関数を追加しています。 [ruby-core:115307] [Bug #19994]
[f8effa209a] KJ Tsanaktsidis 2023-11-19 11:54:57 UTC
finalizer で GC 中に実行できない処理を後で実行するための postponed_job の機構で rb_postponed_job_register() の実装に不具合があり異常終了がまれに起きるのですが、それをパフォーマンスへの影響を小さくしつつ修正するのが難しいとのことで、機能を制限して rb_postponed_job_preregister() という関数でまずコールバック関数を登録して rb_postponed_job_handle_t という型の ID を取得しておいてから rb_postponed_job_trigger() でその ID を元にコールバックを呼ぶという仕組みにすることで ID の部分を atomic に操作することで race condition を避けるようにしています。ruby 本体で利用しているところはこの新しい API を使うように書きかえ、外部向けには rb_postponed_job_register() は rb_postponed_job_preregister()+rb_postponed_job_trigger() を連続して呼ぶ実装で deprecated にマークしつつ互換性のために残しています。 [ruby-core:115286] [Bug #19991]
[c4c39082af] Koichi Sasada 2023-12-09 16:47:14 UTC
f8effa209adb3ce050c100ffaffe6f3cc1508185 で追加された C API rb_postponed_job_preregister() に第1引数に flags というのを追加しています。未使用ですが将来の拡張のためとのこと。 [ruby-core:115286] [Bug #19991]
[0096d6a809] Nobuyoshi Nakada 2023-12-09 14:58:21 UTC
tool/lib/colorize.rb の色名を決めるメソッドを切り出すリファクタリング。
[d9dbcd848f] Nobuyoshi Nakada 2023-12-09 15:14:10 UTC
tool/lib/colorize.rb の色指定のテーブルに bright_xxx の色名を追加しています。また ";" で複数の文字の属性の指定もできるようにしています。