以下の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20250623より取得しました。


ruby-trunk-changes 2025-06-23

今日は主に Namespace 用の struct RClass 構造体のサイズ削減の最適化などがありました。

[7c115b8633] David Rodríguez 2025-06-18 09:22:54 UTC

bundler のダミーサーバーを利用する flasky なテストの修正。

[746e0d3ef4] David Rodríguez 2025-03-05 07:26:36 UTC

bundler の Bundler#SpecSet#- と Bundler::SpecSet#<< というメソッドを deprecated にして警告出力するようにしています。

[627ca420e9] David Rodríguez 2025-06-17 18:33:45 UTC

bundler の定数定義場所をまとめるために移動するリファクタリング

[c3bfce512b] David Rodríguez 2025-06-17 18:37:48 UTC

bundler で gem の取得時? に発生するネットワーク関係や HTTP プロトコルレベルのエラーのうちリトライ対象にしない例外をリストアップしているところを Module#const_get を使ってややメタプログラミング的に書いてた部分を単に配列に列挙するようにシンプルにしています。

[7fe1fc392e] David Rodríguez 2025-06-17 18:38:45 UTC

bundler で gem の取得時? に発生する HTTP プロトコルに関する例外をリストアップしている配列リテラルのスタイル変更。

[8f009601f9] David Rodríguez 2025-06-18 12:24:36 UTC

bundler で gem の取得時? に発生する HTTP プロトコルに関する例外リストに Errno::EADDRNOTAVAIL を追加しています。

[a1d62a3b1c] Nicholas La Roux 2025-06-06 11:41:41 UTC

rubygems でインストール先ディレクトリを作成する時に FileUtils.mkdir_p を利用して親ディレクトリも再帰的に作るようにしています。

[ce38cba528] Nobuyoshi Nakada 2025-06-20 09:26:41 UTC

拡張ライブラリ io/console のテストで IO.console の存在チェックしてからテストメソッドを定義しているところが同じ条件で分かれてたのでひとつのブロックにまとめています。

[393e9a5f3e] Jean Boussier 2025-06-18 08:56:22 UTC

Namespace が有効になっているか環境変数 RUBY_NAMESPACE をチェックして判定する関数 rb_namespace_available() が最初に呼ばれた時に判定してその結果を static 変数に保持しておくようにしていましたが、プロセスの初期化時の関数 Init_enable_namespace() という関数を追加して起動時に判定してしまうようにしています。一応 rb_namespace_available() を呼ぶタイミング如何によってはその ruby スクリプト環境変数をセットすることでスクリプトから有効化できた可能性があったのかもと思いますが、起動時の処理の流れで必ず呼ばれるのであればこれで良さそう。

[96a0c2065a] Jean Boussier 2025-06-18 09:55:05 UTC

struct RBasic::flags のビットフラグに T_CLASS/T_ICLASS/T_MODULE 型オブジェクトの時に環境変数 RUBY_NAMESPACE をチェックして Namespace が有効かどうか判定する前に作成されたコアの組み込みクラスの時にフラグを立てる RCLASS_NAMESPACEABLE というのを追加しています。結果 Namespace が有効じゃなくてもフラグは立つみたいだけどそれは意図的なのかな?

[071b9affe6] Jean Boussier 2025-06-18 10:14:05 UTC

T_CLASS の Namespace ごとに分離されている rb_classext_t を管理する ns_classext_tbl へのアクセスに RCLASS_CLASSEXT_TBL() マクロを常に利用するようにリファクタリングしています。

[ea4a53c595] Jean Boussier 2025-06-18 10:24:48 UTC

struct RClass::ns_classext_tbl にアクセスする RCLASS_CLASSEXT_TBL() をマクロから inline 関数にして 96a0c2065a95d076978de41e8bfacbd19858d0bb で導入した struct RBasic::flags のビットフラグの RCLASS_NAMESPACEABLE が立っているかのチェックをするようにしています。うーんしかしこのビットが立ってない時にはセットしないという変更も行なわれているので、フラグのチェックしなくても結果は NULL になるんじゃないのかな?

[32ee3fab0a] Jean Boussier 2025-06-18 10:31:11 UTC

struct RClass には Namespace 用に rb_classext_t を管理するテーブル ns_classext_tbl のメンバーが増えてますが、これが不要な場合(Namespace 内で新規に定義された Class/Module?)にはそのメンバーのぶんを節約するため struct RClass からは ns_classext_tbl を削り、かわりに ns_classext_tbl を追加した struct RClass_namespaceable という構造体を追加して struct RBasic::flags のビットフラグをみてどちらとして解釈するかを切り替えることで slot にインスタンス変数を埋め込める領域を増やすようにしています。なるほどここまでの変更はこのための布石だったみたいですね。

[c6dd07d66f] Jean Boussier 2025-06-20 10:23:10 UTC

特異クラスの初期化時に親クラスが Namespace によって rb_classext_t を分離する可能性のあるフラグが立ってたら自身も同じフラグを立てるようにしています。

[af6b98f7a2] Nobuyoshi Nakada 2025-04-25 02:15:37 UTC

マシンスタックのオーバーフロー検出時に復旧可能かどうかの判定をしている関数 check_stack_overflow で条件ごとの判定結果を int でマジックナンバーで表していたのを ruby_stack_overflow_critical_level という enum 型の定数を導入しています。




以上の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20250623より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14