Partial evaluation is an automatic program optimization technique, similar in concept to, but in several ways different from optimizing compilers. Optimization is achieved by changing the times at which computations are performed. A partial evaluator can be used to overcome losses in performance that are due to highly parameterized, modular software. This has a quite remarkable impact on software development because it allows the design of general and reusable software without the penalty of being too inefficient. This presentation gives an introduction to automatic program specialization by off-line partial evaluation.
Good starting points for the study of partial evaluation are Jones, Gomard, and Sestoft's textbook [JGS93], Consel and Danvy's tutorial notes [CD93], Mogensen and Sestoft's encyclopedia chapter [MS97], and Gallagher's tutorial notes on partial deduction [Gal93].
Further material can be found in the proceedings of the Gammel Avernæs meeting [BEJ88][NGC88], in the proceedings of the ACM conferences and workshops on Partial Evaluation and Semantics-Based Program Manipulation (PEPM) [PEPMa][PEPMb], and in special issues of several journals [JFP93][JLP93][LASC95][TCS98]. A comprehensive volume on partial evaluation appeared in the Lecture Notes of Computer Science series [DGT96].