ruby-trunk-changes 2021-06-03

今日は MJIT の不具合修正や Hash リテラルのキーに重複があった時の警告の対象に即値でない Integer/Float や Complex, Rational もサポートするようにする変更などがありました。

[a4fbc7e288] Benoit Daloze 2021-06-02 12:34:01 UTC

spec/mspec に upstream から最新版をマージしています。

[22e2a6a999] Benoit Daloze 2021-06-02 12:34:07 UTC

ruby/spec に upstream から最新版をマージしています。

[750f807575] Benoit Daloze 2021-06-02 13:54:38 UTC

spec/ruby に再度 upstream から YAML 関連の変更をマージしています。

[e451f0f678] "Daisuke Fujimura (fd0)" 2021-05-12 22:22:08 UTC

拡張ライブラリ win32ole でマクロ _MSC_VER を参照しているところで未定義だと警告が出るので defined() によるチェックも追加するようにしています。win32ole って Windows 環境じゃないとコンパイルしないと思うけど MinGW だとマクロがないからとかかな。

[2a685da1fc] git 2021-06-02 15:07:44 UTC

version.h の日付更新

[ad734a8cc3] Peter Zhu 2021-06-02 18:42:09 UTC

拡張ライブラリ objspace の ObjectSpace.each_objects で使う objspace_each_objects() で生きてるオブジェクトが所属する heap の数のぶんポインタの配列を確保するのに heap_allocated_pages という変数を使っていましたが、これには解放待ちのページが所属する tomb heap のぶんも含まれているので heap_eden->total_pages のほうを参照して不要なサイズを確保しないようにしています。

[bc65cf1a92] Aaron Patterson 2021-06-02 20:29:03 UTC

gc.c の gc_fill_swept_page() という関数の戻り値を int から bool に変更しています。

[28b481938b] "S.H" 2021-06-03 03:04:56 UTC

NilClass#to_i と NilClass#to_f のメソッド定義を ruby 実装におきかえています。 https://github.com/ruby/ruby/pull/3366 [ruby-dev:50937] [Feature #17054]

[b957c3dbcb] Yusuke Endoh 2021-06-02 03:32:47 UTC

rubygems59c682097197fee4052b47e4b4ab86562f3eaa9b でテスト用のユーティリティを lib/rubygems から test/rubygems に移動したのですが、テストディレクトリ配下に text_ ではじまるファイルを置くとテストクラスが定義されるファイルと認識されてしまうので、test/rubygems/test_utilities.rb を test/rubygems/utilities.rb に、test/rubygems/test_case.rb を test/rubygems/helper.rb に改名しています。

[007e439fe9] Takashi Kokubun 2021-06-03 04:39:11 UTC

e1b03b0c2b2449a7794f4701bab8b2382eb15116 で GET_EC() マクロで rb_execution_context_t を得る時に NULL だったら異常終了するようにした影響で vm_dump.c の rb_vm_bugreport() を MJIT worker から呼ぶ時に SEGV が発生してしまってたということで、ここでは rb_current_execution_context() に false を渡して NULL 許容するようにしています。

[86c262541a] Takashi Kokubun 2021-06-03 05:07:44 UTC

MJIT の worker へコピーされる call cache の受け渡しに race condition があって SEGV することがあったようで、--jit-wait オプションの指定がない時には同じ ISeq を call cache の変化に伴なって(?)再度コンパイルする mjit_recompile() で mjit_add_iseq_to_process() を呼び出すのをやめています。 iseq->body->jit_unit->stale_p のフラグを立てといて後で MJIT worker のスレッドで再コンパイルされるようにしているみたいです。

[31b9ce365d] Takashi Kokubun 2021-06-03 05:25:48 UTC

07c05b6fe931337e928a89ac5ebf654862dc0eca の MJIT のコンパイル対象になる ISeq のサイズ上限をなくしたのを NEWS に追記しています。

[a023db49bf] Nobuyoshi Nakada 2021-06-03 03:26:52 UTC

Hash リテラルに同じキーが複数回出現した時の警告をチェックするテストを追加しています。

[37eb5e7439] Nobuyoshi Nakada 2021-06-03 03:32:44 UTC

Hash リテラルのキーとしてさらに Bignum の範囲の Integer、Float(即値 flonum ではない値のもの)、Rational、Complex のリテラルも複数出現した時の警告ができるように、比較に rb_iseq_cdhash_cmp() を利用するようにしています。

[9f3888d6a3] Nobuyoshi Nakada 2021-06-03 04:26:11 UTC

さらに Hash リテラルのキーに同じ正規表現リテラルを重複して書いた時にも警告できるようにしています。

[7e14762159] Takashi Kokubun 2021-06-03 06:55:23 UTC

86c262541ad07528842d76dab4b9b34bd888d5f4 の MJIT の recompile の race condition 修正の続きで mjit_worker から呼ばれる関数で ZALLOC() を使っていたのが GC 起動する可能性があるので素の calloc(3) を使うようにしたり、mjit_add_iseq_to_process() という関数も mjit worker から呼ばれる可能性ができたので CRITICAL_SECTION_START()/CRITICAL_SECTION_FINISH() の呼び出しによる排他処理を実行しないようにしたりといった追加修正をしています。

[dc25412042] Samuel Williams 2021-06-03 04:29:58 UTC

Fiber の Fiber#transfer を C API で使えるように rb_fiber_transfer() および rb_fiber_transfer_kw() を static 修飾子を外して、prototype 宣言を include/ruby/internal/intern/cont.h に追加しています。

[93be7a4c6b] Nobuyoshi Nakada 2021-06-03 11:07:26 UTC

rb_thread_wait_for_single_fd() および rb_fiber_start() で EC_EXEC_TAG() を使ってるところで ppc64le-linux で "might be clobbered by 'longjmp' or 'vfork'" の警告が出てたのを抑制するため変数の宣言位置を移動したり変数に volatile 修飾子を追加したりしています。