ruby-trunk-changes 2022-12-16

今日は bundled gems や default gems のバージョン更新や YJIT の不具合修正、Object Shapes の compaction 対応の修正などがありました。

[e3ed6c0783] Kazuhiro NISHIYAMA 2022-12-15 13:18:52 UTC

gems/bundled_gems の test-unit と net-imap のバージョンをそれぞれ 3.5.7 と 0.3.2 に更新しています。

[723cca6d82] git 2022-12-15 13:20:17 UTC

e3ed6c07832edf2a95bae3bdd908cc3f5b65eebe に追随して NEWS の bundled gems のバージョンリストも更新しています。

[9c54466e29] Matt Valentine-House 2022-12-13 15:11:57 UTC

GC.compact と Object Shapes の実装の組合せの不具合修正。 compaction で Variable Width Allocation のスロット数(幅)の異なる heap 間をオブジェクトが移動する場合に Object Shapes の shape 情報を変更する必要があったので、shape 情報の再設定と移動元に埋めておく struct RMoved に original_shape_id メンバーを追加して変更前の shape id を保存しておくようにしています。これの使い道がよくわからないけど移動元に埋めておいたオブジェクトの開放時に shape id が必要だからかな?

[f50aa19da6] Peter Zhu 2022-12-15 17:00:30 UTC

と思ったら 9c54466e299aa91af225bc2d92a3d7755730948f の comp@action 時の shape id の変更は revert されていました。(Shopify 社内の) CI でエラーが発生したとのこと。

[a3d552aedd] Jemma Issroff 2022-12-08 21:48:48 UTC

構造体 rb_classext_t に variation_count というメンバーを追加して、その Class のインスタンスが持つインスタンス変数の数(に限らず定義の順序による違いもあるかも?)による shape のバリエーションがいくつあるかを保持するようにしています。この数は拡張ライブラリ objspace の ObjectSpace._dump でも表示するようにしています。ただ今のところそれ以外でこのメンバーを利用しているところはなさそうです。

[c1ab6ddc9a] Jemma Issroff 2022-12-08 22:16:52 UTC

a3d552aedd190b0f21a4f6479f0ef1d2ce90189b で追加した rb_classext_t::variation_count を利用して、この数が一定数を越えるような Class のインスタンスインスタンス変数管理に Object Shapes を利用した配列で管理せずに struct rb_id_table のテーブルで管理するように移行するようにしています。既存のオブジェクトはしきい値を越えた時に一気に変更するんじゃなくて次にインスタンス変数の変更(追加/削除)をした時にインスタンス毎に移行するみたいです。

[ef008d8946] Takashi Kokubun 2022-12-15 18:07:50 UTC

e3ed6c07832edf2a95bae3bdd908cc3f5b65eebe の gems/bundled_gems の更新のうち net-imap のバージョン更新は revert しています。テストが失敗していたため。

[e25beac145] Takashi Kokubun 2022-12-15 18:40:32 UTC

GitHub Actions の workflow .github/workflows/bundled_gems.yml と .github/workflows/wasm.yml に Slack 通知の設定を追加しています。

[8b0e44214c] Takashi Kokubun 2022-12-15 18:45:40 UTC

e25beac145dd3b3943dcf270a2f0d7c7f8c12e60GitHub Actions の Slack 通知設定で存在しない変数の参照が含まれていたのを修正。

[c0b14e128f] Jemma Issroff 2022-12-15 19:45:38 UTC

NEWS に Object Shapes によるインスタンス変数管理の実装と GC の mark 処理の高速化などの性能改善に関連する変更について追記しています。

[2ae0e27a69] Takashi Kokubun 2022-12-15 19:49:55 UTC

NEWS の新規追加された Data クラスについてのセクションにサンプルコードを追加しています。

[53db8fb450] Takashi Kokubun 2022-12-15 19:53:32 UTC

NEWS の Struct のキーワード引数の扱いの変更についてのセクションにもサンプルコードを追加しています。

[bfc66e07b7] Matt Valentine-House 2022-12-13 15:11:57 UTC

9c54466e299aa91af225bc2d92a3d7755730948f の compaction 時の移動前後で Object Shapes の shape id が変化する場合の対応のリトライ。 gc_compact_move() 時に移動可能なオブジェクトかどうかの判定が漏れてたのを修正しているのと、前回のコミット後に入った too complex shape の機構の対応追加が違いみたいです。

[5e81cf8fd0] Peter Zhu 2022-12-15 19:20:32 UTC

と、思ったけど bfc66e07b7e0134dfa2041c311dc56941fe1caf0 の compaction 時の shape id 付けなおしのリファクタリングで不要な条件を消して GC_ASSERT() によるチェックに置き換えているのですが、gc_compact_move() での gc_is_moveable_obj() の追加も assertion に置き換えられているので、bfc66e07b7e0134dfa2041c311dc56941fe1caf0 のリトライでの修正は不具合修正のためではなくて、おそらく c1ab6ddc9a6fa228caa5d26b118b54855051279c での too complex shape の導入自体が不具合修正のためだったのではないかと思われます。

[4872e8ef14] Takashi Kokubun 2022-12-15 21:06:29 UTC

53db8fb450a06d6eea8c7452a006b17bd9354c67 で NEWS に追記した Struct のサンプルコードのコメントを修正しています。

[d5eafaed81] BurdetteLamar 2022-12-15 15:11:06 UTC

標準添付ライブラリ net/http の rdoc 用コメントの追加。

[c505448cdb] Peter Zhu 2022-12-15 18:54:07 UTC

SIZE_POOL_COUNT というマクロの定義を shape.h から internal/gc.h に移動しています。

[e9ba3042e1] Jemma Issroff 2022-12-15 18:42:24 UTC

拡張ライブラリ objspace の ObjectSpace._dump で表示するオブジェクトの情報に c1ab6ddc9a6fa228caa5d26b118b54855051279c で追加した too complex shape の情報も表示するようにしています。

[14158f1f8c] Alan Wu 2022-12-15 23:10:28 UTC

YJIT の Object#send で call メソッドを起動した時の control frame の調節漏れを修正しています。

[5ca46399f1] Takashi Kokubun 2022-12-16 00:02:14 UTC

NEWS に標準添付ライブラリ cgi と erb の変更について追記しています。

[15b60bb1a4] Hiroshi SHIBATA 2022-12-16 00:13:32 UTC

NEWS に ENV.clone が例外を発生するようになったことについて追記しています。 [Bug #17767]

[ae19ac5b5b] Koichi Sasada 2022-12-15 08:53:55 UTC

Dummy Encoding を保持するめの C の配列を固定長(256)にして越えたら例外発生させるようにしています。 チケットをみると(長い議論はちゃんと読んでませんが)拡張する処理に不具合があったとかではなくて無駄に dummy encoding が作れちゃうのあんまり良くないから dummy encoding 自体廃止したいみたいな話で、落とし所として上限を持たせようということになったみたいですね。 [ruby-core:109371] [Feature #18949]
[追記] 可変長の配列の管理のために複数 Ractor 対応のための VM ロックがあったのでそれを避けて高速化するのが目的とのことでした。

[d6624db926] Hiroshi SHIBATA 2022-12-15 04:55:37 UTC

irb のテストで Kernel#open を使っていたところを File.open を使うように変更しています。

[7e26ff7dc0] Hiroshi SHIBATA 2022-12-16 02:34:34 UTC

拡張ライブラリ io/wait のバージョンを 0.3.0 に更新しています。

[bb78445695] git 2022-12-16 02:37:02 UTC

7e26ff7dc008ce14e34b43b8ee04a7 に追随して NEWS の default gems のバージョンリストも更新しています。

[d95ee11462] Hiroshi SHIBATA 2022-12-16 03:44:31 UTC

拡張ライブラリ io_console のバージョンを 0.6.0 に更新しています。

[29cb767a1c] git 2022-12-16 03:53:18 UTC

d95ee114621c3cd34b4a34233888bbe0780f1c28 に追随して NEWS の default gems のバージョンリストも更新しています。

[ad18d1297e] Akinori MUSHA 2022-12-16 04:32:13 UTC

1a73a6cdd2068b815430b775fe25186dab693faa で導入した Enumerator::Product の initialize で任意のキーワード引数を渡されたら例外を発生させるようにしています。また Enumerator.product も同様にキーワード引数を拒否するようにしています。将来使うかもしれないので明示的に受け付けないようにしておくということだそうです。 [ruby-core:108198] [Feature #18685]

[5e5f3f6bd1] Hiroshi SHIBATA 2022-12-16 04:59:04 UTC

ad18d1297ed82aa9c38375532b0b709131cf1ae7 の Enumerator::Product の変更でヘッダファイルの #include が追加になったので common.mk の依存関係を再生成しています。

[2cd22f9abd] Hiroshi SHIBATA 2022-12-16 06:34:16 UTC

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

[5983df93d4] git 2022-12-16 06:35:45 UTC

2cd22f9abd2e759a94452b54408a68 に追随して NEWS の default gems のバージョンリストも更新しています。

[11f3bef260] Hiroshi SHIBATA 2022-12-16 06:35:49 UTC

拡張ライブラリ date のバージョンを 3.3.2 に更新しています。

[850661dd6d] git 2022-12-16 06:36:43 UTC

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

[f2690be746] Hiroshi SHIBATA 2022-12-16 06:47:49 UTC

03927b565b9b6c8578c6a1c6f8e17e72ef82a05e で tool/sync_default_gems.rb の同期時の syntax_suggest の commit hash を固定していた特別扱いの処理を削除しています。

[b9ea83fc1c] Yusuke Endoh 2022-12-15 17:20:59 UTC

NEWS に WASI 版サポートの追加と正規表現のメモ化による最適化の実装、Regexp.linear_time? の追加について追記しています。また tool/update-NEWS-refs.rb で NEWS の footer を切り出す正規表現で URL の末尾に # で始まる fragment が付いているのも許容するようにしています。

[ee7a338d2b] Yusuke Endoh 2022-12-15 19:04:41 UTC

Array#pack や String#unpack の指示子文字列に指示子でない文字があった時の警告をオプションや $VERBOSE の設定によらず常に出力するように変更しています。 [ruby-core:111010] [Bug #19150]