今日は GC.compact のロジックの変更や定数の inline cache の無効化を細かく管理するようにする変更、zlib と rbs の更新などがありました。
[76572e5a7f] Matt Valentine-House 2022-01-06 22:29:03 UTC
GC.compact でオブジェクトの slot を移動する時に移動すべきオブジェクトと移動先の空き slot を探すスキャンの順序を逆にするという変更。空きを探す際に page 内を sweep する処理を必要に応じてするので少し効率的にするため? チケットに貼ってある GIF アニメーションがとてもわかりやすいです。チケットをみると Variable Width Allocation により slot のサイズが大きい heap の compaction が未対応なのに対する修正も入っているみたいですが、今回の差分に含まれているのかはよくわかりませんでした。 https://github.com/ruby/ruby/pull/5637 [ruby-core:107818] [Feature #18619]
[c26a85fc96] Matt Valentine-House 2022-03-31 19:39:17 UTC
76572e5a7fc0ffde6501fd9a8c034bb621f11688 の再修正。try_move() と try_move2() というほぼ同じ関数が残っていたので try_move() のみにまとめています。 [ruby-core:107818] [Feature #18619]
[d8352ff3ac] Matt Valentine-House 2022-03-21 20:46:58 UTC
76572e5a7fc0ffde6501fd9a8c034bb621f11688 および c26a85fc968d19fc40b9aee8fb8451a08e3d26d1 の再修正。 struct RBasic::flags にセットするビットフラグの定数 FL_FROM_FREELIST というのが不要になったみたいで削除しています。 [ruby-core:107818] [Feature #18619]
[d1d48cb690] Jeremy Evans 2022-04-01 14:22:49 UTC
343ea9967e4a6b279eed6bd8e81ad0bdc747f254 で C 関数実装のメソッド内で Kernel#binding が呼ばれた時に例外発生させるようにした変更を revert しています。 RUBY_DEBUG と RGENGC_CHECK_MODE=2 が有効な時にエラーになってたそうです。 [ruby-core:107106] [Bug #18487]
[fe21b7794a] Peter Zhu 2022-04-01 14:26:54 UTC
rb_aligned_malloc() という関数でメモリ確保時に可能なら mmap(2) を利用するようにしていましたが、この関数は transient heap の確保でも利用されていてこちらは 32KiB でのアライメントが必要で mmap(2) でこれを満たせない可能性があるとかで、heap_page_body_allocate() という mmap(2) を(可能なら)利用する関数を別に作成してオブジェクトの heap にはこちらを利用して、rb_aligned_malloc() では mmap(2) を使うのをやめています。
[651b832c1b] Matt Valentine-House 2022-04-01 13:59:36 UTC
gc.c の gc_sweep_step() 内で 1回のステップで解放する page 数を直に書いていたのを GC_SWEEP_PAGES_FREEABLE_PER_STEP という定数マクロを定義して利用するようにリファクタリングしています。
[58adb1636b] Jeremy Evans 2021-03-01 21:48:06 UTC
標準添付ライブラリ net/http でレスポンスが圧縮されていた場合にそれを展開すると Content-Length ヘッダの内容が古いまま残されていたので、ヘッダの値と body の実際のサイズが一致しなくなっていた不具合を修正しています。 [ruby-core:97359] [Bug #16672]
[b61e469c74] git 2022-04-01 17:49:35 UTC
version.h の日付更新
[20c190f95a] Aaron Patterson 2022-03-30 19:21:34 UTC
misc/lldb_disasm.py で ISeq の disassemble のために利用していたシンボル名が変わったりなくなったりしたためうまく動かなくなっていたので利用するシンボルを変更しているようです。
[6068da8937] Kevin Newton 2022-03-31 15:04:25 UTC
629908586b4bead1103267652f8b96b1083573a8 で一旦入れたものの revert されていた定数の inline cache の invalidation を定数の再定義で全てのキャッシュを無効化してたのを名前ベースでもっと細かく管理するようにした変更の再チャレンジです。invaliidation のため ISeq 内をスキャンしないといけないのですが、TracePoint が有効になった時に trace 付きの VM 命令になるとうまくいかなかったのに対策するため rb_vm_insn_normalizing_translator() という関数で常に trace なしの命令を得て処理するようにしているそうです。ISeq スキャンしないといけないというのが結構重そうだけど、定数再定義はそんなにたくさんないからってことかなあ(しかしそれであれば cache 無効化のインパクトもそんなにないような……)。 https://github.com/ruby/ruby/pull/5000 [ruby-core:107603] [Feature #18589]
[81741690a0] Burdette Lamar 2022-04-02 01:41:04 UTC
doc/encoding.rdoc を doc/encodings.rdoc にファイル名変更したり Encoding の rdoc 用コメントを削ったりしています。冗長だからかな? https://github.com/ruby/ruby/pull/5748
[010d92e93d] Nobuyoshi Nakada 2022-04-02 05:54:37 UTC
iseq.c のインデントの修正のみ。
[729b9a8543] Nobuyoshi Nakada 2022-04-02 06:05:03 UTC
rdoc 用コメントのリンクの記法の間違いを修正。
[1cbdedec89] Nobuyoshi Nakada 2022-04-02 07:06:11 UTC
拡張ライブラリ zlib の Zlib.crc32 の処理で zlib の関数に渡す数値を下位 32-bits だけにマスクしておくようにしています。 zlib 1.2.12 で挙動が変化したためみたいです。
[4ee71097a0] Nobuyoshi Nakada 2022-04-02 10:07:45 UTC
1cbdedec895070df1df96d05370cf8da084ab6fa の再修正。long と int が同じサイズの時の関数マクロ checksum_long() の定義でも mask 処理をするようにしています。
[e73d76027e] Kazuhiro NISHIYAMA 2022-04-02 10:29:03 UTC
bundled gems の rbs のバージョンを 2.3.0 に更新しています。
[dcc3c2858f] git 2022-04-02 10:29:56 UTC
NEWS ファイルの bundled gems のバージョンリストの rbs のバージョンを追随させています。
[07acd6006c] Nobuyoshi Nakada 2022-04-02 10:03:58 UTC
拡張ライブラリ zlib で z_size_t という型が定義されているかチェックして、存在したらサイズの戻り値を size_t で受け取るようにしています。