Oh dear - no Java!!!!

Reflection

You can find some of our ideas about what the term reflection means in the Operating Systems context in the following technical report.

You can also read an alternative definition taken from François-René Rideau's Glossary:

Ethymologically, to be reflective is to apply to oneself: reflectivity is when the subject and the object of some action are the same.

      Notably, the human faculties to reason can be reflective, as one can think about one's thinking. We often say reflective for likewise potentially reflective, and say reflectivity instead of such potential eflectivity. In this above meaning, programming is a reflective activity, as one can program programs that program.

      Beware that the word reflective is most often used in such extended meanings of the word. For  instance, in elementary algebra, being considered a binary relation, elements linked to oneself are called reflective, and by extension, a binary relation where all elements are reflective is itself called reflective (which does not mean the relation applies to itself).

      The question of whether the adjective "irreflective" is reflective or not is a well-known paradox (yet another variation of Epimenide's paradox) that shows that a meaningful discourse must restrict reflection severely.

      The solution is to distrust reflective definitions, and when trying to give a well defined meaning to reflective objects, replace reflection by recursive equations and induction principles. It seems that everytime a reflective object is to be used statically, it can be expressed this way, because using such an object means firstly implementing its abstract idea in a "real" substratum world in which it has such clear meaning. This does not mean that reflection in general can be reduced to mere abstraction, just in the same way as logical thought does not reduce to deduction.

      A programming language or an operating system is called reflective if suited to reflective  programming, that is, to write programs that write programs (see metaprogramming).

      The whole point about programming reflection is that it and only it allows a full control for all programs of what is to be explicit, and what is to be implicit.

      Another equivalent way of defining a reflective system is to define it as a system in which that anything that could conceivably be programmed should be programmable in that system.....

      Reflection is just needed for computer development: if you want to develop a computer system from a supported computer system, then there must be Reflection somewhere in the system. Only that Reflection might be hidden, and might need a reboot everytime it is used; for instance, Linux can be
developped from Linux, but you must kill all processes and reboot so as to replace a current Linux with a developed Linux.

      If I is the cost of all the irreflective abstraction layers between the hardware and the first reflected part P of the system; if R is the cost of all the abstraction layers that help reflect P into itself, then the cost of doing k reflective operations is greater than I+k*R (for compiled implementations; interpreted approaches are exponentially worse). Current systems are such that all this often is a prohibitive cost, and as a consequence, even though all systems are somehow reflective, reflection is only marginally used.  You can find a very neat article about reflection here.


  Back to the 2K Home Page