ruby-trunk-changes 2023-11-21

今日は主に String#dup の最適化、Object Shapes の不具合修正、いくつかの TypedData 型オブジェクトの Variable Width Allocation による拡張 slot への埋め込み対応、macOS での --enable-shared をデフォルト on にしていた変更の revert、Hash のイテレータ内で Hash#compare_by_identity を呼ぶとエラーにする変更などがありました。

[83c385719d] Jean Boussier 2023-11-20 12:48:34 UTC

String#dup メソッドを定義して再定義の可能性がなければ直接 str_duplicate() を呼び出すように最適化しています。 rubocop が "str".dup よりも +"str" のほうが高速なのでそちらを使うように suggest するのでそれをやめさせようという意図みたいです。

[46ef74f270] Étienne Barrié 2023-11-17 09:24:02 UTC

構造体 rb_backtrace_t に rb_backtrace_location_t をポインタとして持たせていたのを構造体内の末尾に可変長配列として埋め込むようにしています。

[83da4a7e62] Peter Zhu 2023-11-20 15:13:18 UTC

オブジェクトのインスタンス変数をイテレートする gen_ivar_each() という関数で Object Shapes の too complex 時の不具合修正。

[05028f4d55] Jean Boussier 2023-11-20 15:35:58 UTC

compile.c の struct pinned_list という構造体でオブジェクトの VALUE の配列をポインタとして持っていたのを末尾の可変長配列として持つようにしています。 malloc の回数を減らすため。

[5278742bf0] Jean Boussier 2023-11-20 16:00:19 UTC

marshal.c の内部的に使うための構造体を wrap する T_DATA 型オブジェクトの load_arg および dump_arg というやつを Variable Width Allocation の slot 内に埋め込んでヒープからメモリを確保しないようにする機構を利用するようにしています。また memsize_of によるメモリ使用量の算出にポインタの先の領域が計算されていなかったのでそれも含めるようにしています。

[ffb1eb37e7] Jean Boussier 2023-11-20 16:23:07 UTC

Method クラスのオブジェクトも構造体を Variable Width Allocation の slot へ埋め込むようにしています。

[9d51ab8b3d] Peter Zhu 2023-11-20 18:43:31 UTC

variable.c のインデントの修正のみ。

[323bec6295] Kevin Newton 2023-11-09 07:39:12 UTC

RubyVM::InstructionSequence.compile_file_prism というメソッドを追加して prism の AST にコンパイルする機能を追加しています。

[f9628fb4be] Maxime Chevalier-Boisvert 2023-11-20 21:26:18 UTC

YJIT 用のコマンドラインオプション --yjit-max-versions を --help の出力や doc/yjit/yjit.md のドキュメントから消しています。 https://github.com/ruby/ruby/pull/8962

[f376163194] Peter Zhu 2023-11-20 19:55:50 UTC

インスタンス変数の管理を st_table から Object Shapes の too complex に移行する時の処理の順序の不具合修正をしています。処理中に GC が走る可能性があって中途半端な状態のオブジェクトが見えてしまう可能性があったのでその修正みたいです。

[fa547cd702] Takashi Kokubun 2023-11-20 22:51:54 UTC

YJIT でコンパイルした機械語の disasm をダンプする機能で出力先ファイル名の表示する先を標準エラー出力に変更しているようです。 https://github.com/ruby/ruby/pull/8967

[ad03320743] Peter Zhu 2023-11-20 16:27:50 UTC

TypedData 型のオブジェクトの Variable Width Allocation による拡張した slot 内に埋め込む実装で可変長部分の mark 処理のために gc_mark_from_offset() と gc_ref_update_from_offset() という関数を追加していたのをインラインで展開するようにリファクタリングしています。

[a182b2c5e1] Peter Zhu 2023-11-20 16:28:36 UTC

Enumerator のインスタンスも TypedData の Variable Width Allocation の拡張した slot に埋め込む機構を利用するようにしています。

[7164715666] ima1zumi 2023-11-21 00:04:36 UTC

irb の補完機能のデフォルトの設定を環境変数 IRB_COMPLETOR で指定できるようにしています。 "type" を指定すると rbs を利用した型ベースの補完にできるようです。

[6fce8c7980] Aaron Patterson 2023-10-25 23:52:37 UTC

GC.compact 時に T_MODULE/T_CLASS 型オブジェクトでインスタンス変数の管理が Object Shapes の too complex になっている場合にインスタンス変数の指す先の追跡を skip するようにしています。

[7960db04b1] "dependabot[bot]" 2023-11-20 16:01:24 UTC

rubygems の Rust 製拡張ライブラリのテストのためのプロジェクトの rb-sys パッケージのバージョン更新。

[73d519ec46] Kevin Newton 2023-11-21 01:42:30 UTC

e16ff17374798fa476527ee3883e447a7e083c8a に追随して common.mk の prism の依存関係から big5-hkscs 関係のソースファイルを削除しています。

[04eb40b633] Kouhei Yanagita 2023-11-16 11:32:53 UTC

Complex#** で大きな数での累乗をした時に浮動小数点数の誤差の累積で期待した結果にならないので π/4 の倍数の時に特別扱いをして期待したようなきれいな値を返すようにしています。 [ruby-dev:49002] [Bug #11183]

[fe746747b4] TSUYUSATO Kitsune 2023-11-14 08:15:37 UTC

"class << (return); end" というような構文を SyntaxError にするように修正(?)しています。

[a861c74813] TSUYUSATO Kitsune 2023-11-19 02:12:06 UTC

fe746747b49efb310989792681e171559581920c に対応した構文のテストを追加しています。

[c3ab946e86] yui-knk 2023-11-14 23:57:49 UTC

AST の NODE がオブジェクトとして管理されなくなったので拡張ライブラリ objspace の ObjectSpace.count_nodes の実装を空にして空の Hash を返すようにしています。

[a787e0d649] Yusuke Endoh 2023-11-08 08:09:33 UTC

Hash のイテレータ系メソッドで Array による実装が期待される場所で GC が走ったり? で意図せず st_table による実装に切り替わってないかチェックする ensure_ar_table() という関数を追加して随所に挿入しています。

[1cf2fa3af5] Yusuke Endoh 2023-11-08 08:34:09 UTC

Hash#compare_by_identity で同値による Hash への切り替えをその Hash のイテレータ系メソッドのブロック内で呼ばれたら例外を発生させるようにしています。内部構造が変化するので C 実装のメソッドで異常終了になる可能性があるため。

[f5c3cda7d6] Nobuyoshi Nakada 2023-11-07 03:10:00 UTC

Hash#assoc の実装で Hash の実装が Array タイプの時に一時的に? st_table 実装に変換するようになっていたのを変換しないようにしています。

[029871c3fe] Nobuyoshi Nakada 2023-11-15 14:31:11 UTC

libruby.so のロード時の ABI バージョンチェックのための機構で定義している変数や関数のための型を typedef で明示的に名前をつけるようにしています。

[371a3a691f] Nobuyoshi Nakada 2023-11-15 14:35:58 UTC

029871c3feb677d97a15658e4907b77181532ad9 の続きで ABI チェックのための dln_sym() で関数のシンボルを取得する時の関数名 ruby_abi_version に EXTERNAL_PREFIX というマクロの prefix を追加するようにしています。環境によっては関数名の前に "_" がつくもの(コンパイラ?)もあるのでその対応のため。

[1886ee190a] Soutaro Matsumoto 2023-11-21 09:21:24 UTC

gems/bundled_gems の rbs のバージョンを 3.3.1 に更新しています。これにより skip しなくて良くなったテストの指定を tool/rbs_skip_tests から削除しています。 https://github.com/ruby/ruby/pull/8921

[4de54c9675] git 2023-11-21 09:22:02 UTC

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

[f100c6477a] Hiroshi SHIBATA 2023-11-21 11:19:49 UTC

9694445051c4192c8f659529133acab253bd0bc3macOS で configure の --enable-shared をデフォルトで on にしたのを revert しています。なぜかリリースパッケージでのテストでエラーになってしまうそうです。 [ruby-core:115386] [Bug #20004]