Environments as first class objects
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Sharing code through first-class environments
Proceedings of the first ACM SIGPLAN international conference on Functional programming
The mystery of the tower revealed: a non-reflective description of the reflective tower
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Structure and Interpretation of Computer Programs
Structure and Interpretation of Computer Programs
The Art of the Metaobject Protocol
The Art of the Metaobject Protocol
Smalltalk-80: The Language
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Reflection and semantics in LISP
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Reification: Reflection without metaphysics
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
MACRO Definitions for LISP
The Art of the Interpreter or, The Modularity Complex (Parts Zero, One, and Two)
The Art of the Interpreter or, The Modularity Complex (Parts Zero, One, and Two)
Mirrors: design principles for meta-level facilities of object-oriented programming languages
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
LISP 1.5 Programmer's Manual
Mirages: behavioral intercession in a mirror-based architecture
Proceedings of the 2007 symposium on Dynamic languages
Revised [6] Report on the Algorithmic Language Scheme
Revised [6] Report on the Algorithmic Language Scheme
DLS '08 Proceedings of the 2008 symposium on Dynamic languages
Predicated generic functions: enabling context-dependent method dispatch
SC'10 Proceedings of the 9th international conference on Software composition
Hi-index | 0.00 |
A reflective programming language provides means to render explicit what is typically abstracted away in its language constructs in an on-demand style. In the early 1980's, Brian Smith introduced a general recipe for building reflective programming languages with the notion of procedural reflection . It is an excellent framework for understanding and comparing various metaprogramming and reflective approaches, including macro programming, first-class environments, first-class continuations, metaobject protocols, aspect-oriented programming, and so on. Unfortunately, the existing literature of Brian Smith's original account of procedural reflection is hard to understand: It is based on terminology derived from philosophy rather than computer science, and takes concepts for granted that are hard to reconstruct without intimate knowledge of historical Lisp dialects from the 1960's and 1970's. We attempt to untangle Smith's original account of procedural reflection and make it accessible to a new and wider audience. On the other hand, we then use its terminological framework to analyze other metaprogramming and reflective approaches, especially those that came afterwards.