ruby-trunk-changes 2020-10-21

今日は主に Array#[] などの引数に Integer#step で作られる Enumerator::ArithmeticSequence を受けつけるようにする変更や、Ractor 利用時の GC潜在的不具合修正などがありました。

[f6680c9ad1] Hiroshi SHIBATA 2020-10-20 12:33:02 UTC

doc/maintainers.rdoc と doc/standard_library.rdoc に rbs と typeprof についてのエントリを追記しています。

[520e0916af] Jean Boussier 2020-09-09 13:24:22 UTC

拡張ライブラリ jsonJSON.parse の freeze オプションを追加して、parse 結果の全オブジェクトを freeze したものを返すようにしています。String は(最近の ruby なら) String#-@ を呼んで fstring に(つまり同じ内容と Encoding の文字列なら共有)します。

[451836f582] Chris Seaton 2020-10-07 02:13:48 UTC

拡張ライブラリ json のテストに JSON.pretty_generate に空の Hash を渡した時のテストケースを追加しています。

[a3ae90b8c5] Yusuke Endoh 2020-10-20 04:16:19 UTC

NEWS に bundled gems として typeprof を追加したことについて追記しています。

[512752ba19] Koichi Sasada 2020-10-20 14:48:20 UTC

67c25a34a7c70e3cec868472517b699b1e881857 で Ractor ごとの特殊変数のテストで Solaris 環境でスキップするための後置 unless の条件が反転していたので修正しています。二重否定ですね。気がつかなかった。

[d915e7ee00] Nobuyoshi Nakada 2020-10-20 14:52:03 UTC

test/json/json_parser_test.rb の行末の空白除去。

[081cc4eb28] Nobuyoshi Nakada 2020-10-20 10:32:10 UTC

VM の挙動のための処理をメソッドとして定義して内部的なオブジェクトのメソッド呼び出しとして実装するための隠しオブジェクトのクラスを RubyVM::FrozenCore という定数として露出するように? して --dump=parsetree でのダンプ時にリテラルのダンプを T_CLASS/T_MODULE/T_ICLASS 型のリテラル(なんてあるのかな?) は定数名を取得してそれを表示するようにしています。話の順番としては --dump=parsetree でクラス名を使うようにして、その時に名前が不定になってたので FrozenCore の名前をつけたということかな。

[a6a8576e87] Kenta Murata 2020-10-20 17:40:18 UTC

Integer#step などが返す Enumerator::ArithmeticSequence を Array#[] などの引数に受付けるようにしています。おお、これは便利そうですね。 https://github.com/ruby/ruby/pull/3241 [ruby-core:98034] [Feature #16812]

[587feb0b6e] git 2020-10-20 17:40:38 UTC

version.h の日付更新

[2f50936cb9] Koichi Sasada 2020-10-20 15:54:03 UTC

Ractor.make_shareable というメソッドを追加しています。引数に渡されたオブジェクトをその参照先も含めて struct RBasic::flags のフラグをチェックして Ractor 間で共有可能にするため freeze するようにしています。もちろん対応できないオブジェクトの(への参照を含んでいる)場合は例外が発生するようにしていて、基本的には Ractor 間の参照可能にするために再帰的な freeze をするメソッドという感じですかね。また RUBY_TYPED_FROZEN_SHAREABLE という定数も追加されていて、拡張ライブラリ で T_DATA 型のオブジェクトを定義している時は対応してればこのフラグを立てておくようにしましょうということです。

[1c5f44cd72] 卜部昌平 2020-10-19 06:23:11 UTC

.travis.yml から GitHub Actions でカバーされているテストなどをいくつか削除しています。

[da25affdac] 卜部昌平 2020-10-19 06:32:39 UTC

GitHub Actions の設定で不要に matrix が使われてるのを消したり作業ディレクトリ設定をあちこちの step で書いてたのを defaults の設定にまとめるなどのリファクタリング

[73834b5fc9] Jacob Matthews 2020-10-06 07:31:25 UTC

確保したてのオブジェクトを保持する Transient Heap の構造体 struct transient_heap_block からメンバー size を削除して、確保できるサイズ(まとめて確保するサイズからこの構造体自体のサイズを削ったのこり)は静的に決まるのでマクロ TRANSIENT_HEAP_USABLE_SIZE を導入してこちらを使うようにしています。

[640b340583] Nobuyoshi Nakada 2020-10-21 02:03:12 UTC

GitHub Actions で make の依存関係更新をチェックする .github/workflows/check_dependencies.yml で実行環境として macOS も使うようにしています。なるほど、環境によって依存関係変わることもあるからか。けどその場合って自動更新の結果はどっちを利用するんだろ。

[d497436d07] Nobuyoshi Nakada 2020-10-21 02:45:30 UTC

ということで macOS での依存関係チェックの結果を拡張ライブラリ digest などの depend ファイルに反映させています。

[8c2e5bbf58] Stefan Stüben 2020-09-25 17:56:30 UTC

rb_intern() で文字列から対応する ID を得るのに実行するたびに再計算しないように rb_intern_const() をかわりに呼ぶところで、面倒なので関数内やファイル内の先頭で #define rb_intern(str) rb_intern_const(str) みたいに定義して preprocessor で置換して対応してたのを、ちゃんと明示的に rb_intern_const() を呼ぶように一括でリファクタリングしています。うん、まあそうですよね。一括変更は backport 時にも影響するのでよく憶えておこう。

[5a77e90fe8] Nobuyoshi Nakada 2020-10-21 03:46:40 UTC

8c2e5bbf58e562ea410b53c2f77e4186d5ca9da3 に追加してまだ rb_intern() を Init_xxx() な関数で利用していたところも rb_intern_const() を使うように変更しています。

[4640c4ea8a] Nobuyoshi Nakada 2020-10-21 04:03:07 UTC

5a77e90fe843a2bfbde3df1867f142efb0ffe9fe の続き。 enumerator.c の InitVM_Enumerator() でも rb_intern() を使ってたのを rb_intern_const() を利用するように変更しています。大量にあるのでマクロを使って ID2SYM() まで含めてまとめて変換するようにしています。

[b59077eecf] Koichi Sasada 2020-10-21 04:53:46 UTC

構造体 rb_objspace_t のメンバー mark_func_data を削除して、かわりに during_gc のフラグをみて mark 処理中かどうかのチェックをするようにしています。Ractor 導入により GC 時の mark 処理でオブジェクトの参照を辿るのが Ractor-safe でないため、プロセス(VM)全体で GC 中かどうかのフラグを立てて、mark_func_data の内容は Ractor 毎の rb_ractor_t::mfd というメンバーのほうに移動しています。そういえば Ractor と GC の関係ってどうなってるんだろう。mark 処理は [Feature #17100] をみると全 Ractor が barrier で足並みを揃えて並列で実行するみたいだけど。

[4414031735] Koichi Sasada 2020-10-21 08:58:12 UTC

make test-bundled-gems の rbs のテストでのタイムアウトを伸ばしています。