The Art of the Metaobject Protocol 1章まで読んだ

ちまちま読んでるので、ようやく1章を読み終えて今は2章の途中。

1章では、ClosetteというCLOSのサブセットを作ることによってMOPの仕組みを学ぶ。読み始める前は、メタオブジェクトというと「何やら抽象的でよく分からないもの」という印象だったのだけど、

In fact, everything that goes on inside the implementation is considered to be at the "meta" level with respect to the program

とあるように*1、オブジェクトシステムを構成するために使われるオブジェクトはすべてメタオブジェクトということになるらしい。なので、抽象的というよりはむしろ、direct slot definition metaobject とか、effective slot definition metaobjectとかいった非常に具体的なものまでメタオブジェクトに含まれるようだ。


ClosetteはCommon Lispで書かれていて、class metaobject、generic function metaobject、method metaobjectを順に作っていくのだけど、始めのclass metaobjectを作る段階でいきなりdefclassだとかdefmethodだとかを使っていたので、途中までてっきりCLOSを使って書いているのかと思っていた。まぁそんなことはなくてどうやらブートストラップしてるみたい。そのあたりは、Appendixのコードの

;; How to create the class hierarchy in 10 easy steps:

という、ホッテントリメーカーで作ったようなコメントから始まる部分で説明されている。


コードも説明もとっても素直で読みやすい。今後も期待。

*1:他にもっと引用に適した箇所があったかもしれないけど、metaobjectという用語の定義は見当たらない。