@node Meta-Object Protocol (MOP)
@section Meta-Object Protocol (MOP)

@menu
* MOP - Introduction::
@end menu

@node MOP - Introduction
@subsection Introduction
The Meta-Object Protocol is an extension to Common Lisp which provides rules, functions and a type structure to handle the object system. It is a reflective system, where classes are also objects and can be created and manipulated using very well defined procedures.

The Meta-Object Protocol associated to Common Lisp's object system was introduced in a famous book, The Art of the Metaobject Protocol AMOP @bibcite{AMOP}, which was probably intended for the ANSI @bibcite{ANSI} specification but was dropped because of its revolutionary and then not too well tested ideas.

The AMOP is present, in one way or another, in most Common Lisp implementations, either using proprietary systems or because their implementation of CLOS descended from PCL (Portable CommonLoops). It has thus become a de facto standard and ECL should not be without it.

Unfortunately ECL's own implementation originally contained only a subset of the AMOP. This was a clever decision at the time, since the focus was on performance and on producing a stable and lean implementation of Common Lisp. Nowadays it is however not an option, especially given that most of the AMOP can be implemented with little cost for both the implementor and the user.

So ECL has an almost complete implementation of the AMOP. However, since it was written from scratch and progressed according to user's request and our own innovations, there might still be some missing functionality which we expect to correct in the near future. Please report any feature you miss as a bug through the appropriate channels.

@c When considering the Metaobject Protocol, the book itself should be the main reference. The following sections contain only further extensions or improvements over the paragraphs which were either conflicting or less specified.

@c @node MOP - Classes
@c @subsection Classes

@c @node MOP - Slots
@c @subsection Slots

@c @node MOP - Generic functions and methods
@c @subsection Generic functions and methods

@c @node MOP - Sealed slots and classes
@c @subsection Sealed slots and classes
