Reflection is a programming language technique that achieves dynamic adaptability. It can be used to reach aspect –or any kind of application– adaptation at runtime.
Most runtime reflective systems are based on the ability to modify the programming language semantics while the application is running (e.g., the message passing mechanism). However, this adaptability is commonly achieved by implementing a protocol (Meta-Object Protocol, MOP) as part of the language interpreter that specifies –and therefore, restricts– the way a program can be modified at runtime. Other common MOP-based systems limitations are their language-dependence and their restrictions expressing system´s features modification.
nitrO is a non-restrictive reflective system in which it is possible to change every feature of its programming languages and applications at runtime, without any kind of restriction imposed by an interpreter protocol. Any programming language can be used, and every application is capable of adapting another one´s features, no matter whether they use the same programming languages or not.
With nitrO it is possible to develop applications that may be adapted to unpredictable design-time requirements, changing its own structure and behavior at runtime, whatever the programming language has been used.
The whole system is adaptable at runtime. Any system feature can be changed by means of the reflect statement, and there are no previous restrictions imposed by any protocol.
Expressiveness improvement. The way behavior is customized is not restricted to method overriding –as happens with the use of MOPs. We offer a complete language, Python, used to adapt any other language's feature
Language independence. The system may be programmed using any programming language. The inputs to the generic interpreter are both the application source code and the language specification –expressed using a meta-language.
What can be reflected. Four levels of reflection are achieved at runtime: introspection, structural reflection, computational reflection, and linguistic reflection.
Application interoperability. Any application, whatever its programming language would be, may access, and reflectively modify, any other program being executed. Therefore, there is no need to stop an application in order to adapt it at runtime: another application may be used to customize the former.
Here is a more detailed description.