ruby-trunk-changes 2022-05-25

今日は主に Fiber 用 coroutine の実装の ASAN 対応や GC.compact などの compaction 関係のメソッドが compaction 未対応の環境で respond_to? に対して false を返すようにする修正、標準添付ライブラリ timeout の実装変更が ruby 本体のテストの leak checker と相性が悪かったのでその対応のための変更、timeout のバージョン更新などがありました。

[633608ebd4] David Rodríguez 2022-05-24 10:18:38 UTC

bundler の依存関係解決で required_ruby_version などの追加の制約の解決でエラーになることがあったらしいのを修正しています。

[ae09fffbff] Burdette Lamar 2022-05-24 15:38:02 UTC

標準添付ライブラリ fileutils の FileUtils.cp_r の rdoc 用コメントの手直し。

[c603f897a3] git 2022-05-24 15:38:29 UTC

version.h の日付更新

[9fdef28687] David Rodríguez 2022-05-24 13:23:13 UTC

bundler で例外の表示のしかたを変更しています。

[0de1495f35] Mike Dalessio 2022-05-23 19:40:22 UTC

GC モジュールの GC.compact など compaction 関係の特異メソッドを gc.rb の ruby 実装から gc.c の C 実装に戻しています。次のコミットで compaction が未サポートの環境で rb_f_notimplement() で NotImplementedErrr 例外を発生するようにするためとのこと。 [ruby-core:108543] [Bug #18779]

[0c36ba5319] Mike Dalessio 2022-05-23 21:31:14 UTC

0de1495f358e9b892dfa63d4b74f59b1d2903703 の続きで compaction が未サポートの環境で GC.compact など compaction 関係の GC モジュールの特異メソッドの定義を rb_f_notimplement() を使うようにしています。respond_to? でチェックできるようにするためとのこと。現状 NotImplementedError 例外を発生させつつ respond_to? で false を返すようにするには C 実装にしてメソッド定義を rb_f_notimplement() にするしかないということですね。 [ruby-core:108543] [Bug #18779]

[d020334e9e] "nicholas a. evans" 2022-04-06 22:31:48 UTC

標準添付ライブラリ relne の Reline::Terminfo モジュールのためにロードするライブラリの候補として libncursesw.so.6 と libncurses.so.6 を追加しています。

[901525b107] Samuel Williams 2022-05-19 11:03:49 UTC

Fiber 用 coroutine の amd64 と arm64 向けの実装で ASAN 対応のための __sanitizer_start_switch_fiber() と __sanitizer_finish_switch_fiber() というコンパイラの組み込み関数? の呼び出しを追加しています。ついでに doc/hacking.md というファイルが追加されていますがこれはコミットミスかも。

[42bcc629fb] Samuel Williams 2022-05-21 12:32:41 UTC

Module#autoload の排他処理まわりの関数の変更がありますがどうやら変数名などの改名だけみたいで、あと blocking fiber のテストの繰り返し回数の延長やテスト用の Scheduler 実装の修正、doc/hacking.md の整形などなんかとりとめのない変更がまとめて入ってるような気がします。コミットメッセージと内容が一致してないような。

[9a8fc4e04c] Samuel Williams 2022-05-24 22:51:28 UTC

42bcc629fba518215c844488223bc279006a4fa2 で変数に代入してすぐにそれを return するだけというような書きかたになってたのを直接 return するようにリファクタリングしています。

[0114c72df0] Nobuyoshi Nakada 2022-05-25 06:06:47 UTC

template/Makefile.in の clean-local ターゲットで拡張子が .bc, .i, .s などのコンパイラの中間生成物ファイルの削除をするようにしています。

[fde4519af8] Hiroshi SHIBATA 2022-05-25 08:55:14 UTC

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

[ab7f8e32aa] git 2022-05-25 09:09:04 UTC

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

[cdfb027213] Nobuyoshi Nakada 2022-05-25 09:26:24 UTC

0114c72df0dd4c6df3766bc32f4cadd939b3b0f4 の続きで template/Makefile.in の clean-local の中間成果物削除で find コマンドを /usr/bin/find に決めうちにしてたのを PATH から検索するように find とだけ書くようにして、また変数 $Q でコマンドの出力を抑制できるようにしています。

[e77e233935] Nobuyoshi Nakada 2022-05-25 09:47:16 UTC

標準添付ライブラリ timeout のタイマー用 Thread をプロセスで 1つだけ保持するようにしたものが make test-all の leak checker にひっかかってしまうので、timeout の実装のほうでそれを意識してスレッド変数の "\0__detached_thread__" というのをセットしておくようにしています。

[983f2688db] Nobuyoshi Nakada 2022-05-25 09:47:49 UTC

e77e233935007c418acdcac13de0e76e3b514fb0 でセットした標準添付ライブラリ timeout によるタイマー用の Thread をテスト時の leak checker で無視するコードを tool/lib/leakchecker.rb に追加しています。

[86602484a2] Samuel Williams 2022-05-25 06:13:04 UTC

901525b1079ac02da0122a76d8e4c3546a7f80f6 の Fiber 用 coroutine の ASAN 対応の続きで __sanitizer_finish_switch_fiber() の第2、3引数に switch 元の struct coroutine_context の stack の情報を渡すようにしています。

[952ff7fbb3] Samuel Williams 2022-05-25 07:49:51 UTC

複数の文字列バッファをまとめて書き出す rb_io_writev() で戻り値に不正なアドレスを指すようにインクリメントされた後の argv の内容を返すようにしてたのを nil を返すように修正しています。呼び元で戻り値は参照されてないので問題になってなかったみたいですね。

[df7a1377e6] Nobuyoshi Nakada 2022-05-25 09:56:42 UTC

標準添付ライブラリ timeout の gemspec ファイルで spec.files を得るのに git ls-files の結果から除外するファイルに CI 関係のファイルも含めるようにしています。

[8006a15edf] Nobuyoshi Nakada 2022-05-25 10:04:31 UTC

df7a1377e6283ca8645dbf1f0577ebc194337f50 の続きで標準添付ライブラリ timeout の gemspec ファイルの spec.files から除外するファイルに rakelib/ も含めています。そして rakelib/epoch.rake というファイル(サブディレクトリ)も追加されていますがこれはおそらく timeout の upstream からのマージのミスですね。

[1528770794] Nobuyoshi Nakada 2022-05-25 10:16:56 UTC

ということで 8006a15edf63f3f277a696e332682a2c6b6b7768 で追加されてしまった rakelib/epoch.rake を削除しています。

[cd6f87eefc] Nobuyoshi Nakada 2022-05-25 10:50:36 UTC

e77e233935007c418acdcac13de0e76e3b514fb0 で標準添付ライブラリ timeout のタイマー用の Thread をテストの leakchecker.rb で検出されないようにするための処理を Thread.new のブロック内で実行していたので、起動した Thread が動く前にメソッドから抜けると処理されないまま leak check が動きだす可能性があるのでブロック外で Thread.new の戻り値に対して Thread#thread_variable_set を呼ぶように変更しています。

[d875445e8a] Samuel Williams 2022-05-25 11:12:54 UTC

Module#autoload の排他処理に Thread::Mutex オブジェクトを利用するようにしたために今度は GC の mark 漏れが起こり得るようになってたみたいなので RB_GC_GUARD() による参照の保護を追加しています。ついでに関係ない関数で変数名を変えるのを一緒にやるのはやめて欲しいなぁ。