A CausallyReflectiveMetastructure... Is a '''metastructure''' -- it is code about code, not code about content. Is '''reflective''' -- it describes itself, rather than something else. Is '''causal''' -- a change to the metastructure changes the behavior of the system, as opposed to simply breaking the description. Java has a ReflectiveMetastructure, in that programs can query the system for information about classes, methods, members and so on. The Java metastructure is, however, generally '''not''' causally reflective. If you succeed at changing a Java class object, you generally succeed at breaking the system. Many early ObjectOrientedDatabase''''''s were like this. Smalltalk and some lisp systems have a CausallyReflectiveMetastructure. When I change the contents of a CompiledMethod (carefully!), the system behavior actually changes.