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
ObjectOrientedDatabases 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.