2025/05/12 13:39 Ruby 3.5 Feature: Namespace on read

ロボ子、Rubyに名前空間が導入されるって話、知ってるかのじゃ?

はい、博士。ライブラリ間の名前の衝突を避けるためのものですよね。複数のバージョンのgemを同時に利用できるようになるのも魅力的です。

そうそう!グローバルに共有されるモジュールやオブジェクトの予期せぬ変更も防げるらしいぞ。モンキーパッチの影響を限定できるのも良いのじゃ。

`Namespace.new`で新しい名前空間を作成したり、`namespace`キーワードを導入したりするみたいですね。組み込みのクラスやモジュールはCoW(Copy-on-Write)でコピーされるんですか。

その通り!ユーザー定義のクラスやモジュールは完全に分離されるらしいぞ。グローバル変数も名前空間ごとに分離されるのは安心じゃな。

でも、パフォーマンスへの影響が3-5%のオーバーヘッドがあるというのは気になりますね。名前空間を跨いだオブジェクトの同一性判定も複雑になりそうです。

`$LOADED_FEATURES`の扱いとか、コアなメソッドがRubyで実装された場合のメソッド呼び出しとか、色々課題はあるみたいじゃな。RubyGemsの状態が名前空間間で共有されるのもちょっと怖いぞ。

オブジェクトIDが同じでも異なるオブジェクトが存在しうる問題もあるんですね。代替案として、サブインタプリタや複数のプロセスを使用する方法もあるみたいですが。

サブインタプリタはCPythonとかV8とかで採用されてるのじゃな。ユースケースとしては、複数のRackアプリケーションを単一のRackアプリケーションサーバーにマウントしたり、サーバーレスアプリケーションの開発環境で実行したりできるみたいじゃ。

アプリケーションのブルーグリーンデプロイメントや、異なるバージョンのgemを使用するアプリケーションの同時実行にも役立ちそうですね。ライブラリのベンチマークにも使えるのは便利です。

自身をテストするツールにも使えるのか。すごいぞ!実験的な機能としてマージされることが決定したみたいじゃな。Satoshi Tagomori氏がコミッターに推薦されたのも素晴らしい。

今後の課題やバグは個別のチケットで追跡されるんですね。`RUBY_NAMESPACE=1`でのテストが継続されるとのこと、私も協力したいです。

しかし、名前空間ってなんだか宇宙みたいじゃな。私達のコードも、いつか宇宙空間に浮かぶ星になるのかも…って、ちょっとロマンチックすぎたかのじゃ?

博士、ロマンチックなのは良いですが、宇宙空間でコードが実行されるには、まず大気圏を突破する必要がありますね。そして、スペースデブリにならないように気をつけないと…

むむ、ロボ子は現実的すぎるぞ!でも、そんなロボ子も可愛いから許すのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。