uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

GroovyのmetaClassは本当にメタクラスか?

前から疑問に思ってたんですが、GroovyのMetaClassつまりString.metaClassなどで返ってくるものってほんとにメタクラスなんでしょうか。そう呼ぶに値するものなんでしょうか?呼び方として適切なんでしょうか。

私の理解では、クラスが実行時にオブジェクトとして存在する言語において、つまりクラスもオブジェクトである言語において、そのオブジェクトとしてのクラスを作り出す存在がメタクラスです。

つまり、オブジェクトの雛形としてのクラスがあり、
クラスオブジェクトの雛形としてのメタクラスがある、ということです。(さらにその雛形のメタメタクラスもありうる・・)

しかしGroovyの「metaClass」はクラスオブジェクト(Classクラスのインスタンス)と同列の存在であり、「動的っぽいほう担当」ぐらいのものだと思うんですけども・・。

メタオブジェクトプロトコル(MOP)の一部としてのクラス、つうことで荒っぽくメタクラスにしてしまったのかなあ。

じゃあ本来どういう名前であるべきか、というと、DynamicClassとか? いまいち。

Classクラスに統合されるべきな気もしますが、処理系実装方法の問題としてできることとできないことがあるのでしょうね。あるのでしょうかね。