Reflection: a method or means to let a system maintain information about itself (meta-information), and to use such to alter its behavior, to change, adapt; something acting upon itself. This is higher-order behavior than strict imperative models. More concretely, reflection is also an ability (for users) to modify software (even system software) of the underlying system during runtime, without leaving that system. Most programs written today are not reflective. With non-reflective systems, if one modifies (edits) any source code, one must recompile, and then restart it, thus leaving the system. With a reflective system, one can modify code (even kernel code), recompile, and replace the running system code as the system runs, with no restarting, rebooting, or often even leaving the editor. This allows and promotes more dynamic, fluid, productive work style. Such runtime modifiability is similar to what an extensible
operating system (OS) allows, which can be viewed as a limited type of (application-level) OS reflectivity. Reflection, where program = data, simplifies writing compilers, interpreters, optimizers, theorem provers, and defining higher order functions. Reflective programming languages are those that take advantage of such traits and abilities, to various ends. Many exist. Some are used daily, in working systems, but they do not dominate, and are not mainstream, yet. They are a very interesting and promising class of languages. Some are found in research, where they form a fascinating branch of computer science. Some experts say they will grow more important in the future as computer power rises, programs grow more complex, and artificial intelligence properties are grafted onto, or blended with, languages. Or, like so many other technologies, they may remain more marginal, used only in certain areas and applications. On this page, languages are arranged in three groups and levels: 1) Top group: types or classes of languages. 2) Middle group: languages for which there are more than one instance of a language of this name/type, a language family. 3) Bottom group: specific languages, individual instances; there is only one language of this name/type.