Reversible Object-Oriented Interpreters

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.