<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter 6. Meta-Object Protocol (MOP)</title><link rel="stylesheet" type="text/css" href="ecl.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"><link rel="home" href="index.html" title="The ECL manual"><link rel="up" href="pt02.html" title="Part II. Extensions and libraries"><link rel="prev" href="ch20s06.html" title="5.6. Memory Management Reference"><link rel="next" href="ch21s02.html" title="6.2. Classes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Meta-Object Protocol (MOP)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch20s06.html">Prev</a> </td><th width="60%" align="center">Part II. Extensions and libraries</th><td width="20%" align="right"> <a accesskey="n" href="ch21s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 6. Meta-Object Protocol (MOP)"><div class="titlepage"><div><div><h2 class="title"><a name="ext.mop"></a>Chapter 6. Meta-Object Protocol (MOP)</h2></div></div></div><div class="toc"><dl><dt><span class="section"><a href="ch21.html#ext.mop.intro">6.1. Introduction</a></span></dt><dt><span class="section"><a href="ch21s02.html">6.2. Classes</a></span></dt><dt><span class="section"><a href="ch21s03.html">6.3. Slots</a></span></dt><dt><span class="section"><a href="ch21s04.html">6.4. Generic functions and methods</a></span></dt><dt><span class="section"><a href="ch21s05.html">6.5. Sealed slots and classes</a></span></dt></dl></div><div class="section" title="6.1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ext.mop.intro"></a>6.1. Introduction</h2></div></div></div><p>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.</p><p>The Meta-Object Protocol associated to Common Lisp's object system was introduced in a famous book, The Art of the Metaobject Protocol <a class="xref" href="bi01.html#bib.AMOP">[AMOP]</a>, which was probably intended for the <a class="xref" href="bi01.html#bib.ANSI">ANSI</a> specification but was drop out because of its revolutionary and then not too well tested ideas.</p><p>The <a class="xref" href="bi01.html#bib.AMOP">[AMOP]</a> is present, in one way or another, in most Common Lisp implementations, eithr using proprietary systems or because their implementation of <acronym class="acronym">CLOS</acronym> descended from <acronym class="acronym">PCL</acronym> (Portable CommonLoops). It has thus become a de facto standard and <span class="application">ECL</span> should not be without it.</p><p>Unfortunately <span class="application">ECL</span>'s own implemention originally contained only a subset of the <a class="xref" href="bi01.html#bib.AMOP">[AMOP]</a>. 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, specially given that most of the <a class="xref" href="bi01.html#bib.AMOP">[AMOP]</a> can be implemented with little cost for both the implementor and the user.</p><p>So <span class="application">ECL</span> has an almost complete implementation of the <a class="xref" href="bi01.html#bib.AMOP">[AMOP]</a>. 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.</p><p>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.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch20s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5.6. Memory Management Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 6.2. Classes</td></tr></table></div></body></html>