ruby-trunk-changes 2021-11-24

今日は無名の引数を持つメソッドを RubyVM::InstructionSequenceの バイナリフォーマットに変換する時の不具合修正や VWA の実装の Ractor 向け最適化、YJIT の setclassvariable 命令対応、標準添付ライブラリ cgi の不具合修正などがありました。
また本日 ruby の安定版 3.0.3/2.7.5/2.6.9 のリリースがありました。

https://www.ruby-lang.org/en/news/2021/11/24/ruby-3-0-3-released/
https://www.ruby-lang.org/en/news/2021/11/24/ruby-2-7-5-released/
https://www.ruby-lang.org/en/news/2021/11/24/ruby-2-6-9-released/

[eb301d8aec] Jean Boussier 2021-11-22 11:20:38 UTC

無名の引数(* や ** だけ書かれてるようなの)を持つメソッド定義を RubyVM::InstructionSequence のバイナリフォーマットに dump/load するとうまく扱えずに異常終了するという不具合についてのテストを追加しています。順番が逆ですが次の c14f230b26aa4f8abe9ecf3814cfebbe584d77c9 で修正される不具合のテストのようです。 [ruby-core:105626] [Bug #18250]

[c14f230b26] Nobuyoshi Nakada 2021-11-22 15:09:41 UTC

無名の引数(* や ** だけ書かれてるようなの)を持つメソッド定義を RubyVM::InstructionSequence のバイナリフォーマットに dump/load するとうまく扱えずに異常終了するという不具合の修正。無名の引数をバイナリ化する時に ID を 0 としてダンプしていてそれがよくなかったようなので、rb_make_temporary_id() という関数を導入して、現在の引数とローカル変数の数から通し番号をつけた ID を仮に? 採番して使うようにしています。 [ruby-core:105626] [Bug #18250]

[9aded89f40] Peter Zhu 2021-11-19 19:51:58 UTC

ObjectSpace のヒープに連続した slot を割り当ててオブジェクトごとの固有のバッファに slot を流用する Variable Width Allocation の実装を少し変更して、利用するページ(heap_page)のキャッシュを連続した slot 数ごとのキャッシュを Ractor 単位で持てるようにしています。 Ractor 利用時のパフォーマンスのためみたいです。今って Ractor ごとに heap のアリーナを所有させる実装って revert されたんでしたっけ。いろいろあったので思い出せないけどそれのリベンジなのかもしれないです。

[fb9d67742b] git 2021-11-23 15:51:42 UTC

version.h の日付更新

[459f9e3df8] "Eileen M. Uchitelle" 2021-11-23 19:09:24 UTC

YJIT の VM 命令 setclassvariable の JIT コンパイル対応の追加。 inline cache の利用に対応していないので早くはならないとのことですがこの命令を利用しているメソッドを JIT 対応できるようにするためとのこと。 https://github.com/ruby/ruby/pull/5127

[df8f858115] Burdette Lamar 2021-11-23 21:38:28 UTC

Float#next_float の rdoc 用コメントの説明やサンプルの整形? https://github.com/ruby/ruby/pull/5160

[3454a456d1] Yusuke Endoh 2021-11-24 06:42:00 UTC

test/ruby/test_iseq.rb のテストで assertion の期待値を直接数値を書いてたのを __LINE__ を使って計算するようにしています。読みやすさのためとのこと。

[da34f31ad0] Nobuyoshi Nakada 2021-09-03 10:40:22 UTC

拡張ライブラリ cgi/escape で HTML の escape 処理に使うバッファを ALLOCV_N() で確保する時にかけ算によるオーバーフローの可能性があったので ALLOCV_N() の1要素の型を HTML_ESCAPE_MAX_LEN サイズの char の配列で定義してオーバーフローチェックが効くようにしています。

[0f31b3f465] Nobuyoshi Nakada 2020-06-29 01:29:25 UTC

標準添付ライブラリ cgiCGI::Cookie.parse で cookie 名の部分を CGI.unescape を呼んでいたのをやめるようにしています。

[5445d33be2] Yusuke Endoh 2021-11-24 10:56:21 UTC

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