The aim of the MetaBETA project is to design and implement a meta-level interface for the statically typed and compiled language BETA. A meta-level interface extends the expressibility of a programming language to allow programs to be written for the language and not just in the language. Functionality that depends on the language implementation is either impossible or very hard to express in most languages, e.g., object distribution, persistence, source-code interpreters, debuggers, source browsers. etc. The problem is that it is impossible for a running program to access class information, or overwrite the default implementation of language primitives, such as object creation, destruction, and invocation. In other words, to access meta-level information.
More info