A Blond Primer

This report describes how to use the reflective tower Blond. A reflective tower is a computational architecture where programs are given access to representations of the current state of computation. This models an infinite tower of interpreters interpreting each other, meta-circularly. Blond is a Scheme interpreter extended to be reflective. This report concentrates on its reflective extension rather than on the standard Scheme characteristics. Reification, reflection, reified environments, and reified continuations are described in detail. Each key point is illustrated with scenarios. The first entries in a Blond library are assembled, and finally Blond is run in Blond, achieving orthogonal reflective towers. A glossary and the Scheme source code are provided in appendix. This report informally describes its 1988 implementation, as specified in the article “Intensions and Extensions in a Reflective Tower”, presented at the 1988 ACM Symposium on Lisp and Functional Programming, where Blond is formally described.

[1]  David A. Schmidt Detecting global variables in denotational specifications , 1985, TOPL.

[2]  Guy L. Steele,et al.  A compiler for scheme (a study in compiler optimization) , 1978 .

[3]  Mitchell Wand,et al.  The mystery of the tower revealed: a non-reflective description of the reflective tower , 1986, LFP '86.

[4]  Thomas Johnsson,et al.  Lambda Lifting: Treansforming Programs to Recursive Equations , 1985, FPCA.

[5]  Olivier Danvy,et al.  A Functional Abstraction of Typed Contexts , 1989 .

[6]  Peter Sestoft,et al.  MIX: A Self-Applicable Partial Evaluator for Experiments in Compiler Generation (Extended Abstract) , 1987, MFPS.

[7]  Andrei P. Ershov,et al.  On the Partial Computation Principle , 1977, Inf. Process. Lett..

[8]  Neil D. Jones,et al.  Mix: A self-applicable partial evaluator for experiments in compiler generation , 1989, LISP Symb. Comput..

[9]  P. J. Landin,et al.  Correspondence between ALGOL 60 and Church's Lambda-notation , 1965, Commun. ACM.

[10]  Matthias Felleisen,et al.  A Syntactic Theory of Sequential State , 1989, Theor. Comput. Sci..

[11]  Brian Cantwell Smith,et al.  Reflection and semantics in LISP , 1984, POPL.

[12]  Mitchell Wand,et al.  Reification: Reflection without metaphysics , 1984, LFP '84.

[13]  Brian Cantwell Smith,et al.  The implementation of procedurally reflective languages , 1984, LFP '84.

[14]  Olivier Danvy,et al.  Intensions and extensions in a reflective tower , 1988, LISP and Functional Programming.

[15]  Joseph E. Stoy,et al.  Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory , 1981 .

[16]  Alan Bawden Reification without evaluation , 1988, LFP '88.

[17]  John C. Reynolds,et al.  Definitional Interpreters for Higher-Order Programming Languages , 1972, ACM '72.

[18]  C. Talcott The essence of rum: a theory of the intensional and extensional aspects of lisp-type computation (program transformation, closure, continuation structure, comparison-relation) , 1985 .

[19]  Jr. Guy L. Steele,et al.  Rabbit: A Compiler for Scheme , 1978 .

[20]  Peter Sestoft,et al.  An experiment in partial evaluation: the generation of a compiler generator , 1985, SIGP.

[21]  Gerald Jay Sussman,et al.  Lambda: The Ultimate Imperative , 1976 .