20. POPL 1993: Charleston, South Carolina, USA
- Marc Snir: Computer Architectures and Programming Models for Scalable Parallel Computing. 1
- Mitchell Wand: Specifying the Correctness of Binding-Time Analysis. 137-143
- John Launchbury: A Natural Semantics for Lazy Evaluation. 144-154
- John C. Reynolds: An Introduction to Logical Relations and Parametric Polymorphism - Tutorial. 155-156
- Xavier Leroy: Polymorphism by Name for References and Continuations. 220-231
- Arun Lakhotia: Constructing Call Multigraphs Using Dependence Graphs. 273-284
- Kim B. Bruce: Safe Type Checking in a Statically-Typed Object-Oriented Programming Language. 285-298
- Harry G. Mairson: A Constructive Logic of Multiple Subtyping. 313-324
- Daniel Leivant: Stratified Functional Programs and Computational Complexity. 325-333
- Eric Villemonte de la Clergerie: Layer Sharing: An Improved Structure-Sharing Framework. 345-358
- Simon J. Gay: A Sort Inference Algorithm for the Polyadic Pi-Calculus. 429-438
- Maria-Virginia Aponte: Extending Record Typing to Type Parametric Modules with Sharing. 465-478
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.