In order to break the infinite Recursion of metaclasses being instances of other metaclasses, the metaclass `Metaclass class` is an instance of `Metaclass`.
Jean-Guy Schneider (2010), Components, Scripts, and Glue: A conceptual framework for software composition, Figure 8.21, p. 187:
researchgate ⇒ [Riv96] ⇒ Fred Rivard ⇒ A Reflective Language, p. 4
> During the compilation of a new method, the corresponding class is asked which compiler etc. should be used in order to perform the compilation. By overriding the corresponding methods (originally defined in the class Behaviour), each metaclass has the possibility to specify the behaviour of its instances. Extending the compiler classes is used in [Riv96] in order to add Eiffel-like pre- and postconditions to the language. Except the subclasses of this class and the class itself, this modification does not change the behaviour of any of the other classes.
This section takes an entirely optional glimpse at an advanced topic that Chamond Liu treats fully in Chapter 20 of Smalltalk Objects And Design. One of the consequences of admitting classes as first-class objects is that classes themselves must then be instances of some other dass.
Each class would appear twice
We will distinguish between ‘objects’ and ‘living and Life-like Systems’. Systems that use environmental order for their formation, but do not have “feeding” mechanisms, will be called ‘objects’. We variously classify ‘living and life-like systems’ as organisms, social groups, mechanisms, etc.