"An Introduction to Reflection-Oriented Programming" - Jonathan M. Sobel and Daniel P. Friedman

Past accounts of reflection have tended to emphasize interpreters and/or runtime access to some particular representation of the state of a program's interpretation. This paper presents a computational account of reflection, drawing a distinction between the meta-level manipulation of data or control in a computation and the mere availability of meta-circular implementation details. In particular, this paper does not presume the existence of program source code at runtime.

The paper introduces a style of programming that relies on reflective language features but is similar in form to object-oriented programming. A translation-based implementation of these new language forms is explained, and several examples of their use are provided. The examples include the measurement of computational expense, the introduction of first-class continuations, and the modification of the semantics of expressed values, all in terms of reflection-oriented programming.