The "programs are data" philosophy of Lisp uses Lisp's S-expressions to represent programs, and permits a program written in Lisp itself to implement the interpreter for the language. Object-oriented languages can take this one step further: we can use objects to represent programs, and an object-oriented interpreter takes the form of responses to a protocol of messages for evaluating programs. Because objects are a richer data structure than simple S-expressions, the representation of programs can have more built-in intelligence than was feasible using simple list manipulation alone.This paper surveys techniques and applications for object-oriented interpreters. We focus particularly on object-oriented interpreters that are reversible, those that, unlike conventional interpreters, remember their history of evaluation. We illustrate the techniques involved with two applications of reversible object-oriented interpreters: a reversibIe stepper for Lisp, and a programming environment which constructs Lisp programs from examples.
[1]
Henry Lieberman,et al.
An Object-Oriented Simulator for the Apiary
,
1983,
AAAI.
[2]
Carl Manning,et al.
Traveler: The Apiary Observatory
,
1987,
ECOOP.
[3]
Joe Stoy,et al.
Denotational Semantics
,
1977
.
[4]
Henry Lieberman.
Seeing What Your Programs are Doing
,
1984,
Int. J. Man Mach. Stud..
[5]
Henry Lieberman,et al.
Steps toward better debugging tools for LISP
,
1984,
LFP '84.
[6]
David Robson,et al.
Smalltalk-80: The Language and Its Implementation
,
1983
.
[7]
H. Lieberman,et al.
An example based environment for beginning programmers
,
1986
.
[8]
Guy L. Steele,et al.
Common Lisp the Language
,
1984
.