## Meta-Object Protocol (MOP)

### Introduction

The Meta-Object Protocol is an extension to &CommonLisp; 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 &CommonLisp;'s object system was introduced in a famous book, The Art of the Metaobject Protocol &AMOP;, which was probably intended for the &ANSI; specification but was drop out because of its revolutionary and then not too well tested ideas.

The &AMOP; is present, in one way or another, in most &CommonLisp; implementations, eithr 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 implemention 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 &CommonLisp;. Nowadays it is however not an option, specially 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.

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.

### Classes

[TODO: Document the class initialization / finalization protocol]

### Slots

[TODO: Document the slot descriptions and parameters.]

### Generic functions and methods

[TODO: Document the calling convetions for method functions.]

### Sealed slots and classes

[TODO: Document sealed slots]