Please note that the content of this book primarily consists of articles available from Wikipedia or other free sources online. In computing, partial evaluation is a technique for several different types of program optimization by specialization. The most straightforward application is to produce new programs which run faster than the originals but are guaranteed to behave in the same way. More advanced uses include compiling by partially evaluating an interpreter with the program to be compiled as its input; generating compilers by partially evaluating a partial evaluator with an interpreter for the source language concerned as its input; and finally generating a compiler-generator by partially evaluating a partial evaluator with itself as its input.