Methods of Reflection

From TunesWiki



Reflection is the ages old concept of someone thinking about oneself. Yes, there are other meanings to the word; this is the one we consider here. In Computer Science, Reflection is a powerful conceptual tool with such various applications as simplifying logical proofs enough to make them physically tractable, enabling dynamic (run-time) evolution of programming systems, transforming programs statically (at compile-time) to add and manage such features as concurrency, distribution, persistence, or object systems, or allowing expert systems to reason about and adapt their own behavior.

Glossary References


See Kurt Gödel, Alan Turing, Douglas Hofstadter (see below).

"John Tromp's" universal machine. The Principia Cybernetica project.

Metalogical Reflection



Run-time Computational Reflection

Brian C. Smith, Patti Maes, A. Yonezawa.

Compile-Time (Computational) Reflection

Shigeru Shiba, Tim Sheard, Rowan Davies.

Partial Evaluation

Olivier Danvy & Andrzej Filinski at BRICS; Neil D. Jones at DIKU; Charles Consel and Gilles Muller at IRISA (COMPOSE group); at OGI.

Erik Ruf's PhD thesis on PE. PE courses have been taught using his dissertation.

Run-Time Code Generation

Reflective Expert Systems

Jacques Pitrat and his team. Self Reflection in Cognitive Architectures.

Reflective Concurrent Programming

José Meseguer; "Carol Talcott"; A. Yonezawa;

Meta-Object Protocols

A classic book, AMOP.

A recent small project in Squeak by Henrik Gedenryd to develop a "Universal Composition" system for programs. It essentially involves a graph of meta-objects describing source-composition operations which can be eagerly or lazily (statically or dynamically) driven, resulting in partial evaluation or forms of dynamic composition such as AOP. He provides a demonstration Squeak image and a rough draft paper.

Aspect-Oriented Programming

Gregor Kiczales.

See also AspectJ and AspectS.

Reasoning Systems

NuPrl and Maude perhaps?

Reflective Programming Languages

Intel's hardware design language Reflect has some interesting features : see