ruby-trunk-changes 2021-03-07

今日は拡張ライブラリ io/wait の Ractor 対応や Enumerable#chain で返される Enumerator::Chain の Enumerator や Lazy の対応を強化する修正/変更などがありました。

[b3c53a8a88] Nobuyoshi Nakada 2021-03-06 15:58:28 UTC

標準入出力などを指す特殊変数 $stdin, $stdout, $stderr のオブジェクトは Ractor local になっていますが、この IO オブジェクトの生成を ractor_create() の時点ではなく Ractor を実行開始した時にその thread 内で行うようにしています。所有権が呼び元の Ractor のものになってしまうのでそれを避けるためみたいです。 [ruby-core:102747] [Bug #17672]

[13dc005347] git 2021-03-06 15:58:48 UTC

version.h の日付更新

[bf40fe9fed] Jeremy Evans 2020-11-24 22:05:22 UTC

Enumerator#chain で連結した時に生成されるインスタンスのクラス Enumerator::Chain に Enumerator を返すようなメソッドを呼ぶとエラーになっていた不具合を修正しています。 Enumerator::Chain ってなんだったっけなーと思ったけどもう入ったのは 2年以上前でしたね。忘れてた。 [ruby-core:100302] [Bug #17216]

[e1d16a9e56] Jeremy Evans 2021-03-05 20:25:51 UTC

Enumerator::Lazy のインスタンスに Enumerable#chain を呼び出した時に Enumerator::Chain が返されるのが期待に反しているということで、Enumerator::Chain を wrap した Enumerator::Lazy を返すようにしています。なるほど確かに。とはいえなんか混乱してきますね。 [ruby-core:101100] [Feature #17347]

[68d028578a] Jeremy Evans 2021-03-05 20:47:00 UTC

さらに Enumerator::Chain の feed, next, next_values, peek, peek_values などのメソッドを undef しています。呼ばれても TypeError が発生する状態だったので、未定義のほうが良いだろうという判断みたいです。respond_to? で判定できたほうがいいからってことかな。

[3ba1580d80] Nobuyoshi Nakada 2020-10-23 10:41:20 UTC

拡張ライブラリ io/wait の IO#wait の引数が 1つの時に events も timeout もどっちでも受け付けられるように型をみて判断するようにしているみたいです。

[05d118feea] Nobuyoshi Nakada 2021-03-05 05:45:56 UTC

拡張ライブラリ io/wait の gemspec ファイルの spec.required_ruby_version を 3.0.0 以降に更新しています。

[ef9bde6516] Nobuyoshi Nakada 2021-03-05 07:39:31 UTC

拡張ライブラリ io/wait のテストで /dev/ 配下の device ファイルの操作用のユーティリティ check_dev の機能を拡張しているリファクタリング

[ea81fff564] Nobuyoshi Nakada 2021-03-05 08:38:19 UTC

拡張ライブラリ io/wait の gemspec ファイルでバージョンを 0.1.1 に更新しています。

[f6d5de8f33] Nobuyoshi Nakada 2021-03-05 08:40:39 UTC

拡張ライブラリ io/wait の Init_wait() で RB_EXT_RACTOR_SAFE() を呼び出して Ractor safe に宣言しています。

[1d1b9e02d2] Nobuyoshi Nakada 2021-03-07 01:21:03 UTC

include/ruby/atomic.h のヘッダ部分のコメントに不要な "*" が混じってたのを削除しています。