ruby-trunk-changes 2021-11-10

今日は Class.descendants の不具合の再修正や blocking fiber 向けの IO::Buffer というクラスの追加と scheduler 対応、Time.at の引数省略時の処理の最適化などがありました。

[ec6352c108] David Rodríguez 2021-11-09 10:30:46 UTC

rubygems のテスト用ライブラリの assertion メソッドでメッセージの改善。

[d713b602ea] Jun Aruga 2021-10-15 11:47:32 UTC

rubygems のテスト用ライブラリで make コマンドを使うところで環境変数 MAKE や make でオプションを含む make コマンドが設定されていると失敗していたのを修正しています。

[ba3dfe6efe] David Rodríguez 2021-11-09 10:47:56 UTC

rubygems のテスト用ライブラリの assert_contains_make_command といメソッドで不要な yield を削除しています。ブロック渡しして呼ばれることはないからとのこと。

[0d3898ec7b] David Rodríguez 2021-11-09 10:52:44 UTC

rubygems のテスト用ライブラリの make コマンドを使うヘルパーメソッドで未使用になった不要な機能を削除しているようです。

[5c892da7d7] Yusuke Endoh 2021-11-09 08:06:01 UTC

428227472fc6563046d8138aab17f07bef6af753037da5066619e083b4770dc97cf6435892e2bebe64007fc57f360eab4b18b26389719a85f45b25c3 あたりで 717ab0bb2ee63dfe76076e0c9f91fbac3a0de4fd で追加した Class.descendants を修正していたものの再修正。GC を起動しないようにするために C の配列を使うようにしていましたが、rb_ary_new_from_values() で最終的な配列をタイミング時に GC が走るのも NG だったみたいで、GC の mark 処理で配列に入れたクラスが mark されるように rb_ary_new_capa() で必要なサイズの capa を持つように作成した Array オブジェクトを使って、これに詰めていくようにしています。 ALLOC_N() で確保したヒープの配列だと GC 時に mark 対象にならないので、詰めておいた Class が返す前に解放されてしまう可能性があったのだと思います。 [ruby-core:105897] [Bug #18282]

[e8086e275b] Yusuke Endoh 2021-11-09 15:57:03 UTC

rb_objspace_garbage_object_p() という関数の宣言を gc.h から internal/gc.h に移動して class.c から gc.h を #include しなくて良いようにしています。

[af74cc7504] git 2021-11-10 01:08:48 UTC

version.h の日付更新

[56b90cf944] Kazuhiro NISHIYAMA 2021-11-10 05:09:08 UTC

NEWS の Process._fork についてのエントリの修正。

[4b89034218] Samuel Williams 2021-07-02 10:41:16 UTC

blocking fiber 機能のために IO::Buffer というクラスが導入されて mmap(2) や Windows の場合は CreateFileMapping()/MapViewOfFile() でメモリ領域を確保するようにして、IO の内部的なバッファのために ObjectSpace に所属しない内部的にだけ文字列オブジェクトとして扱える fake string を使っていたのをこの IO::Buffer クラスのオブジェクトを使うこともできるようにしているようです。 Scheduler は ruby で実装するクラスで、Scheduler に読み書きのためのバッファを見せる必要があるためこのような抜本的な改造をしたみたいです。かなり大きい変更ですね。 [ruby-core:104481] [Feature #18020]

[81d0ce7e97] Samuel Williams 2021-11-10 02:42:57 UTC

4b8903421828cb9d4de139180563ae8d8f04e1ab で導入した IO::Buffer は experimental として利用時に警告を出力するようにしています。

[46e46eafd4] Nobuyoshi Nakada 2021-11-10 07:41:26 UTC

4b8903421828cb9d4de139180563ae8d8f04e1ab の関数宣言のスタイル修正と、ファイルサイズを返す関数に使う型は size_t でなく off_t を使うように修正しています。

[943b6e4d9c] Nobuyoshi Nakada 2021-11-10 08:07:58 UTC

4b8903421828cb9d4de139180563ae8d8f04e1ab で導入した IO::Buffer の to_s メソッドで文字列にサイズを埋め込む時に PRIdSIZE を使うように修正しています。

[cc33d07f46] Nobuyoshi Nakada 2021-11-10 08:41:48 UTC

81d0ce7e97af74a2086e143f9e349ee519bd1c4d で IO::Buffer を experimental にしたためテスト時の警告を抑制するために Warning[:experimental] を false に設定していたのを tool/test/runner.rb から test/runner.rb に移動しています。

[83bdc2f00c] Nobuyoshi Nakada 2021-11-09 06:12:02 UTC

Time.at の省略可能な 第 2,3 引数のデフォルト値に代入文を使っていたのをやめて未指定かどうかの判定を C の関数のほうの処理に吸収しています。 Time.at をキーワード引数の処理の高速化のために ruby 実装にしたけど 1つしか引数を渡さない時にかえって遅くなってしまっていたようので、引数のデフォルト値の処理が原因と考えてこれを削ったのだと思います。 [ruby-core:105967] [Bug #18293]

[4eb23c9dda] Nobuyoshi Nakada 2021-11-10 08:46:32 UTC

io_buffer.c のスタイル(インデント)の修正。

[850912b6e0] Nobuyoshi Nakada 2021-11-10 08:06:34 UTC

GitHub Actions の Ubuntu の workflow で apt-get でインストールするパッケージに pkg-config を追加しています。 32bit 環境で必要らしいです。

[8bcff5604b] Nobuyoshi Nakada 2021-11-10 09:14:14 UTC

83bdc2f00c4565a091d88399e5a315a96f6afed6 の Time.at の高速化のためのデフォルト引数の処理の変更で第2引数 subsec のデフォルト値を nil にしていたのを false に変更して C 実装の判定の NIL_P() をなくしています。NIL_P() が遅いからってことはないと思いますがなんでだろ。 [ruby-core:105967] [Bug #18293]