ruby-trunk-changes 2021-03-30

今日は標準添付ライブラリ timeout の blocking fiber 対応や defined? にメソッドチェーンの式を渡した時の評価回数の変更などがありました。

[7b3c5ab8a5] Jeremy Evans 2021-02-22 22:28:40 UTC

defined? に渡す式が a.b.c.d のようにメソッドチェインしている時に判定方法のため繰り返し同じメソッドの呼び出しを繰り返してしまうのを生成する命令列を整理して同じメソッドは 1回しか呼ばないようにしています。ていうか defined? にメソッド呼び出しを渡した場合って receiver の式は実行されるんだな。まあ評価しないと判定できないけど……。 [Bug #13708] [Bug #17649]

[62e66aedb0] Jeremy Evans 2021-02-23 20:21:41 UTC

7b3c5ab8a5825a2b960e639d257f0c8a69c4186c の変更に追随して defined? のテストを追加しています。

[d65d661151] Aleksandar Ivanov 2021-03-29 17:11:10 UTC

標準添付ライブラリ irb の補完で rdoc のドキュメントを表示する機能が rdoc なしでインストールされてる環境で例外のバックトレースが出てしまってたので抑制するようにしています。

[93753d7ee7] git 2021-03-30 05:28:04 UTC

version.h の日付更新

[4c53dc970b] Samuel Williams 2021-02-11 06:17:54 UTC

標準添付ライブラリ timeout の Timeout.timeout による割り込みに blocking fiber のための Scheduler が設定されている場合の実装の対応を追加しています。 Fiber.scheduler を無条件に呼んでるけど古い ruby では大丈夫なのかな。

[9b9bbaec11] Samuel Williams 2021-02-11 08:29:17 UTC

と、思ったら 4c53dc970bf82e4c5fb237be4b2404bcb07496d2 の続きで Fiber.scheduler が nil の時のために safe guard operator を使うようにしています。がメソッド自体がない場合というのがあるんじゃないかな。

[c05dd7dc85] Samuel Williams 2021-02-11 08:55:31 UTC

同じく 4c53dc970bf82e4c5fb237be4b2404bcb07496d2 の再修正で、追加された rb_fiber_scheduler_timeout_raise() でメソッド呼び出しに rb_funcall() を使っていたのを rb_check_funcall() を利用するように修正しています。

[67f60ebb64] Nobuyoshi Nakada 2021-02-11 09:16:15 UTC

4c53dc970bf82e4c5fb237be4b2404bcb07496d2 および c05dd7dc85311d1a62204aff5f633e758efae949 の追加修正で rb_check_funcall() の引数に VALUE をそのまま渡していたのでポインタを渡すように修正しています。

[09c865d541] Samuel Williams 2021-02-12 01:40:50 UTC

さらに 4c53dc970bf82e4c5fb237be4b2404bcb07496d2 の追加修正。 rb_fiber_scheduler_timeout_raise() の引数を argc と argv で渡す版の rb_fiber_scheduler_timeout_raisev() という関数を追加しています。拡張ライブラリから利用するため。

[511acba4ae] Samuel Williams 2020-12-26 09:09:49 UTC

4c53dc970bf82e4c5fb237be4b2404bcb07496d2 で追加した拡張ライブラリでの blocking fiber 対応のための API で利用する Scheduler のメソッド名を timeout_raise から timeout_after に変更しています。また doc/fiber.md に説明を追記しています。

[af1c587546] Samuel Williams 2021-02-12 02:06:07 UTC

4c53dc970bf82e4c5fb237be4b2404bcb07496d2 で追加した blocking fiber の Timeout.timeout を使うテストの待ち時間変更と Scheduler つきの Thread で Timeout.timeout のブロックがちゃんと実行されることのテスト? を追加しています。

[92449e0e99] Samuel Williams 2021-02-12 03:54:52 UTC

Fiber.current_scheduler というメソッドを追加して、標準添付ライブラリ timeout では Fiber.scheduler のかわりにこちらを利用するようにしています。rb_thread_t::blocking のチェックを含めて blocking fiber でない時に nil を返す点が Fiber.scheduler とは違うようです。

[3d32c21758] Samuel Williams 2021-03-30 04:33:15 UTC

4c53dc970bf82e4c5fb237be4b2404bcb07496d209c865d541472366550804ef09bf14e22a193644 で追加していた C API rb_fiber_scheduler_timeout_raise() と rb_fiber_scheduler_timeout_raisev() の宣言および定義をコメントアウトしています。

[b507f65d44] Samuel Williams 2021-03-30 05:46:24 UTC

coroutine/ の配下に RISC-V のアーキテクチャ向けのサブディレクトリ coroutine/riscv64/ を導入しています。具体的に入手可能な動く環境ってあるのかな。

[611e711085] Samuel Williams 2021-03-30 07:31:19 UTC

blocking fiber で rb_io_wait_readable() および rb_io_wait_writable() の挙動についてのテストを追加しています。テストが先に入ってて修正がこの後 a9c5c2d614f30a616970245fef3e7ffc151e2ecf で入ってるみたいです。

[a9c5c2d614] Samuel Williams 2021-03-30 06:11:17 UTC

rb_io_wait_readable() と rb_io_wait_writable() で blocking fiber の scheduler 対応で io_fd_check_closed() が errno=EAGAIN で失敗した時のリトライを追加しています。 [ruby-core:102003] [Bug #17527]