This document discusses metaprogramming, metaclasses, and the metaobject protocol. It begins with an overview and definitions of key concepts like metaprogramming, metaobjects, and metaclasses. It then covers specific implementations including macros in Lisp, CLOS metaclasses, and how AllegroCache uses a persistent metaclass. Finally, it discusses the metaobject protocol and provides examples of how it allows programs to access and manipulate normally hidden language elements like classes and methods.