The last years have witnessed a flurry of new results in the area of partial evaluation. These results include: (1) a better understanding of the underlying mathematical principles, (2) better strategies for implementing partial evaluation systems, and (3) new extensions that widen the range of applications and thus should broaden the community of users. This tutorial surveys the field, presents a critical assessment of the state of the art, and explores promising directions where partial evaluation can be used. Concrete examples are given, using our binding-time based partial evaluator for Scheme programs, Schism.
In many kinds of interactive systems (e.g., systems for computer-aided design, language-sensitive editors, word processors, spreadsheets, ...) as well as in other contexts, modifications of the input data are to be processed immediately so as to have immediate effect on the output. Because small changes in the input to a computation often cause only small changes in the output, the challenge is to compute the new output incrementally by updating parts of the old output, rather than by recomputing the entire output from scratch - in other words, to make use of the solution to one problem instance to find the solution to a ``nearby'' problem instance. Incremental computation techniques may also be used in ``non-interactive'' contexts, such as optimizing compilers. This tutorial will survey the body of work that exists on this subject.