ruby-trunk-changes 2021-11-23

今日は Class#subclasses メソッドの新規追加や YJIT の不具合修正などがありました。

[b680b632e5] Matt Valentine-House 2021-11-15 21:09:10 UTC

構造体 rb_classext_t の subclasses メンバが保持する構造体 struct rb_subclass_entry が single linked list だったのを prev も追加して doubly linked list にしています。逆向きに辿るためというよりも要素を抜き取る時に親クラスのオブジェクトの参照を不要にして GC.compact 時の memory barrier の影響を受けないようにするというのが目的みたいです。

[c4f45674a4] Jemma Issroff 2021-02-04 21:16:59 UTC

gc.c から未使用になっていた HEAP_PAGE_BITMAP_PLANES という定数マクロの定義を削除しています。GC::INTERNAL_CONSTANTS という定数の Hash のキーからも削除されていますが、名前の通り内部的なものなのでこれに依存している人はあまりいないでしょう。

[aaff5d7905] git 2021-11-22 17:02:45 UTC

version.h の日付更新

[e42f994f6b] Burdette Lamar 2021-11-22 20:57:17 UTC

Float の比較演算子メソッドなどの rdoc 用コメントのサンプルの追加など手直し。 https://github.com/ruby/ruby/pull/5153

[13d1ded253] Alan Wu 2021-11-04 16:30:30 UTC

YJIT でメソッド呼び出し中にその後に続くメソッド呼び出しされる予定のメソッドが Module#remove_method で削除されたという場合の処理を修正しているようですが、詳細はよくわからず。コミットログでは block という語彙が使われているのですが、どうも YJIT は foo(a).bar みたいに method chain した時にこれらをまとめたものを block と呼んでいるのかなという感じです。ruby の block のことかなと思ったのですが、たぶん違った意味がありそう。

[f5d2041138] Alan Wu 2021-11-23 00:29:29 UTC

5680c38c75aeb5cbd219aafa8eb48c315f287d97 で finalizer から GC 中にできない処理を後で実行するために登録しておく postponed job という機構の Ractor 対応として rb_executable_context_t の取得時に NULL になる場合を考慮するようにしたのですが、rb_postponed_job_register() は ruby 実行中の thread ではない thread から呼ばれることもある(MJIT の worker とか?)ので GET_EC() を使っているのはまずくて rb_current_execution_context() という inline 関数を使うように再修正しています。 [ruby-core:102206] [Bug #17573]

[da832d6c2a] Burdette Lamar 2021-11-23 01:04:25 UTC

Integer クラスの rdoc 用コメントにメソッド一覧を追記しています。また Numeric クラスの rdoc 用コメントのマークアップのミスを修正。 https://github.com/ruby/ruby/pull/5155

[a88b19d3d0] Nobuyoshi Nakada 2021-11-23 07:08:53 UTC

blocking fiber についてのテストで experimental の警告が出る IO::Buffer を使うところで最初に Warning[:experimental] = false して一度 IO::Buffer を作成しておくようにしています。この警告は 1回しか出ないので一度警告抑制した状態でインスタンスを作っておけば全てのテストケースで Warning[:experimental] を抑制しておく必要はないみたいです。

[c0c2b31a35] Jean Boussier 2021-10-28 12:07:11 UTC

Class#subclasses メソッドを新規追加しています。最近追加されてなかったっけ? と思いましたがあれは Class#descendants で、継承している子クラス孫クラス……を全て列挙しますが、Class#subclasses は直接継承している子クラスのみ(孫以降は含まない)という違いがあるようです。使い道あるのかと思ったけど ActiveSupport に定義されているそうです。 [ruby-core:105826] [Feature #18273]