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


ruby-trunk-changes 2025-05-12

今日はついに Namespace on read の実装がマージされました。

[382645d440] Satoshi Tagomori 2025-04-30 04:48:02 UTC

待望の新機能 Namespace on read が実装されました。ここから Namespace の開発ブランチでの関連の変更/修正がしばらく続きます。大きな変更としては namespace.c の追加、struct RClass の特に rb_classext_t 構造体のレイアウトを変更して rb_namespace_t の埋め込み、定数やインスタンス変数の管理の構造の変更などがあります。非常に CRuby のコア部分に密接に絡んだ機能になるので変更はそれなりに大きいですね。 [ruby-core:121837] [Feature #21311]

[1e4f7a28b8] Yusuke Endoh 2025-05-01 08:09:48 UTC

namespace.c の C の関数宣言の style 修正。

[8d3cd4301a] Yusuke Endoh 2025-05-01 08:10:55 UTC

internal/class.h から不要な関数宣言の削除。

[cb99e54486] Yusuke Endoh 2025-05-01 08:14:24 UTC

internal/namespace.h の追加に伴ない common.mk や各種 depend ファイルの依存関係の更新。

[e7e517499b] Yusuke Endoh 2025-05-01 08:18:43 UTC

rubyspec で Namespace.enabled? でチェックしているところで古い ruby のためにそもそも定数が定義されているか defined? でのチェックも追加しています。

[cf3e2bbad2] Yusuke Endoh 2025-05-01 08:46:01 UTC

proc.c の rb_bug() の呼び出しに警告除去のため明示的なキャストを追加。

[4b33b468ac] Yusuke Endoh 2025-05-01 09:36:24 UTC

namespace.c で rb_define_private_method() や rb_define_singleton_method() に渡す関数ポインタの型の不一致が生じてたので無用なキャストが生じないように関数の引数を経由させないようにしています。

[f24ba27d6d] Satoshi Tagomori 2025-05-02 02:30:24 UTC

Class の新規作成時に slot 確保後に ZALLOC() でメモリ確保していたのを先に確保しておくことで RGenGC の promoted なインスタンスになってしまうのを抑制するようにしています。 ZMALLOC() を 3回読んでるから複数回 GC が走ると作ったばかりのインスタンスが parent(promoted) になってしまって、そうするとこの関数からの戻り値に対する期待とはずれてなにかしらエラーになってしまっていたのでしょう。

[5ee1ec313a] Satoshi Tagomori 2025-05-02 03:21:51 UTC

Class/Module の作成時の method table の初期化タイミングを早めています。これも GC のタイミングとの兼ね合いみたいですがよくわからず。

[e81d50207b] Satoshi Tagomori 2025-05-06 07:11:12 UTC

Namespace の実装の追加に追随して YJIT/ZJIT 向けの C binding の再生成を行なっています。

[ff790c759e] Satoshi Tagomori 2025-05-08 13:53:31 UTC

struct RClass の構造体の bit fields を削除してサイズ削減するため prime_classext_readable は ns_classext_tbl メンバーが設定されてるかどうかで判定、prime_classext_writable は struct RBasic::flags の未使用のビットフラグのところを使うようにしています。

[90e5ce6132] Satoshi Tagomori 2025-05-08 14:19:25 UTC

struct RClass から rb_classext_t を得るためのマクロ RCLASS_EXT() を RCLASS_EXT_PRIME() と改名しています。Namespace 導入により複数の rb_classext_t が所属する可能性があるようになったのでそれが意識できるように。

[294b52fb9b] Satoshi Tagomori 2025-05-08 14:38:00 UTC

C の coding style の修正。主に else 節のかっこについて。

[82f645e818] Satoshi Tagomori 2025-05-08 14:45:59 UTC

Namespace クラスの TypedData 用の rb_data_type_t で flags に RUBY_TYPED_WB_PROTECTED を指定して RGenGC の WB-protected になるようにしています。

[8ecc04dc04] Satoshi Tagomori 2025-05-08 14:53:20 UTC

Namespace の開発時のデバッグ用のコード削除。

[8199e6e1a6] Satoshi Tagomori 2025-05-08 15:32:30 UTC

最初に Namespace を使った時に experimental カテゴリの警告を出力するようにしています。

[f0b41ef669] Satoshi Tagomori 2025-05-10 07:50:29 UTC

doc/namespace.md に Namespace の仕様についてドキュメントを追記しています。

[c2c5b05423] Satoshi Tagomori 2025-05-10 14:36:57 UTC

variable.c の Object Shapes 関連の変更を誤って巻き戻していたのを修正しています。

[bbcc3782b1] Satoshi Tagomori 2025-05-10 15:39:53 UTC

GC の T_OBJECT 型オブジェクトの mark 処理でインスタンス変数を traverse する処理の Namespace 対応の修正。

[b132322e94] Satoshi Tagomori 2025-05-11 00:30:16 UTC

Namespace の導入で GC の mmtk 実装と CPU の i686 指定の時のテストが失敗しているので一時的に skip するようにしています。

[e9b538bb35] Jean Boussier 2025-05-11 08:08:35 UTC

Namespace 導入後起動時の namespace_initialize() で異常終了していたのを修正しているようです。Namespace の id を rb_obj_id() を使って生成していたのがまだ使えないタイミングで呼ばれていた? ので別途 namespace.c に通し番号を採番するための static 変数を導入してここから採番するようにしています。

[ae2d5378e8] Satoshi Tagomori 2025-05-11 09:27:18 UTC

gc.c の未使用の変数の警告除去のため変数削除して使うところに代入元をインライン展開しています。

[574127b0db] Jean Boussier 2025-05-11 08:42:42 UTC

autoload 用の管理テーブルの GC の mark 処理に Namespace 対応を追加しています。

[b94df81be2] Satoshi Tagomori 2025-05-11 13:38:02 UTC

82f645e818a6c8029c40fd3cddcec7e2d3c1b559 で Namespace の rb_data_type_t の flags に RUBY_TYPED_WB_PROTECTED を指定していましたが、実際には Write Barrier が不足していた? みたいで RUBY_TYPED_FREE_IMMEDIATELY に戻しています。

[54c2edc05d] Jean Boussier 2025-05-11 15:38:14 UTC

Namespace#inspect で表示する ID が e9b538bb35c29788539a8953d44c5d18f9a6fb65 の修正の前の rb_obj_id() での採番のままになっていたので rb_namespace_t::ns_id を参照するように修正しています。

[f2e5f6dbb6] Jean Boussier 2025-05-11 16:47:22 UTC

T_CLASS 型オブジェクトを Object Shapes の too_complex な shape に対応するようにしているようです。 https://github.com/ruby/ruby/pull/6931

[3e47e7a499] Nobuyoshi Nakada 2025-05-11 05:47:02 UTC

Windows 環境で winpthreads-git というライブラリが clock_gettime()/clock_getres() を提供しているので再定義になるという問題についての再対応で MinGW の時だけ定義を抑制するようにしています。

[204740b73f] Nobuyoshi Nakada 2025-05-11 10:28:11 UTC

defs/gmake.mk と win32/Makefile.sub から rubyspec の C API テスト用拡張ライブラリのビルド用のルールを削除した 2a9236366d6016738a756caecab03263565a20c7 を revert しています。 MinGW 環境で問題があったようです。

[b48b841378] Nobuyoshi Nakada 2025-05-11 10:52:51 UTC

common.mk の IFLAGS に -I$(ext_hdrdir) オプションを追加しています。 rubyspec での拡張ライブラリビルド時の digest 関係のヘッダがみつからない問題の対応みたいです。

[2fe8b9cd3d] Nobuyoshi Nakada 2025-05-11 15:20:41 UTC

mkmf.rb の生成する Makefile での install 処理のコピーのコマンドに渡すファイル名の指定のしかたを $(@D) から $@ に修正しています。

[8b7a4d167a] Jean Boussier 2025-05-11 18:30:42 UTC

ObjectSpace._id2ref の実装で GC のタイミングによって rb_bug() で異常終了することがあったので、初期化時(最初に ObjectSpace._id2ref が呼ばれた時?)は rb_bug() 呼び出しを抑制するように static 変数と追加して初期化完了前かどうかわかるようにしています。

[dc5555d74a] Takashi Kokubun 2025-05-11 20:37:47 UTC

namespace.c の未初期化の変数の警告除去のため初期化子を追加しています。

[af79914002] Jean Boussier 2025-05-10 09:31:33 UTC

拡張ライブラリ json に vendoring している fpconv.c で Float を文字列化する時に自然対数表現にする条件を調節しています。互換性のため?

[4464cbe5cd] Randy Stauner 2025-04-29 18:30:05 UTC

bundler の bundle doctor サブコマンドで macOS での otool -L の出力の解析を修正しています。

[f638e14838] Hiroshi SHIBATA 2025-05-12 02:03:39 UTC

tool/sync_default_gems.rb で cgi 全体の同期処理は削除してかわりに cgi/escape の部分を ruby/cgi から同期するように対応しています。

[131ba059ca] Jean Boussier 2025-05-12 07:49:59 UTC

object_id についてのテストで too_complex 対応のためにランダムなインスタンス変数名をたくさん作るのに Kernel#rand を使っていたのがたまたま重複することがあったとのことで SecureRandom を使うようにしています。うーん、そういう問題なのかな。

[f1f0cc14cc] Nobuyoshi Nakada 2025-05-12 01:16:11 UTC

b42afa1dbcbb91e89852b3b3bc72484d7f0a5528 で regenc.h での構造体宣言に GCC 15 での警告抑制のための __attribute__*1 を追加するのを存在チェックしてから書くように preprocessor 分岐を追加してたところで __has_attribute() によるチェックと、そもそも __has_attribute 自体が定義されているかを同時にチェックしていたのが VC では警告が出てたようで #if を 2段にネストさせて分けるようにしています。

[543e3a1896] Nobuyoshi Nakada 2025-05-12 01:17:49 UTC

iseq.c での INSN_CODE() マクロ定義で VC で警告抑制のため明示的なキャストを追加しています。

[ed2806117a] Nobuyoshi Nakada 2025-05-12 04:50:33 UTC

common.mk と defs/gmake.mk での rubyspec での C API テスト用拡張ライブラリのターゲットの依存関係を整理しています。

[d2ffdb1088] Nobuyoshi Nakada 2025-05-12 04:51:12 UTC

拡張ライブラリ json に vendoring している fpconv.c で double の式から int の変数への代入時に明示的なキャストを追加しています。

[91375d7579] Nobuyoshi Nakada 2025-05-12 05:13:26 UTC

GitHub Actions の Windows 環境向け workflow で revision.h を step で適当に生成していたところを git log コマンドを使って現在の最新のコミットから情報を得るようにしています。

[46e4c86737] Nobuyoshi Nakada 2025-05-12 05:16:06 UTC

configure で MinGW 環境の時に HAVE_CLOCK_GETTIME と HAVE_CLOCK_GETRES は無条件で定義するように指定していたのをやめて存在チェックするようにしています。

*1:nonstring




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

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