もしrubyのclassとmoduleが分離していたら?
分離したら...
Javaみたいなクラス / インタフェースをきっちり区別する世界観に近づく。 そのかわりにメタプログラミングが複雑化し、Ruby の「統一感ある直感的な API」が失われる
メタプログラミング API の統一性が失われる
現在の Ruby では、Class が Module のサブクラスなので、以下のような操作が「両方に共通」で使えます。
code:ruby
もし分離されていたら、
「名前空間操作」や「定数操作」の API をクラス用とモジュール用で分ける必要がある
メタプログラミング時に 「これは Class か? Module か?」を常に意識する必要が出てくる
👉 つまり、今のシンプルなintrospection(自己観察)性が失われる。
直感的な一貫性が弱まる
いまはクラスもモジュールも「メソッド・定数を束ねる入れ物」という共通の直感で理解できる。
それに「インスタンスを生み出せるかどうか」の違いが乗るだけ。
もし完全分離すると
クラスは「型定義用」、モジュールは「機能・名前空間用」とハッキリ分かれる
直感的にはわかりやすいが、両者を対称的に扱えない場面が増える
例:Foo.const_set(:X, 42) をクラスとモジュールで別の API にするか、共通インタフェースを無理やり定義する必要がある
👉 「Rubyらしいゆるい統一感」よりも「概念の厳密さ」寄りの言語になってしまう。
Mixin 機能の実装コストが上がる
現状は「モジュールをクラスに混ぜる」=「モジュールのメソッドテーブルをクラスの継承チェーンに差し込む」だけで済む。
なぜなら両者が同じ親(Module) を持つため、内部表現がほぼ同じだから。
完全分離した場合
Module と Class が全く異なるデータ構造を持つ
includeの仕組みを作るとき、両方に対応した特別な変換レイヤーが必要になる
実装の複雑さが増し、パフォーマンスにも悪影響が出る可能性大
👉 Ruby の「シンプルな内部構造による柔軟性」が損なわれる。