Partial Evaluation

Partial evaluation is a technique to partially execute a program, when only some of its input data are available. Consider a program p requiring two inputs, x1 and x2. When speci c values d1 and d2 are given for the two inputs, we can run the program, producing a result. When only one input value d1 is given, we cannot run p, but can partially evaluate it, producing a version pd1 of p specialized for the case where x1 = d1. Partial evaluation is an instance of program specialization, and the specialized version pd1 of p is called a residual program. For an example, consider the following C function power(n, x), which computes x raised to the n'th power.

[1]  Akihiko Takano Generalized partial computation for a lazy functional language , 1991 .

[2]  John P. Gallagher,et al.  Ensuring Global Termination of Partial Deduction while Allowing Flexible Polyvariance , 1995, ICLP.

[3]  John McCarthy,et al.  A basis for a mathematical theory of computation, preliminary report , 1899, IRE-AIEE-ACM '61 (Western).

[4]  Ehud Shapiro,et al.  Meta interpreters for real , 1988 .

[5]  Leon Sterling,et al.  ProMiX: a Prolog partial evaluation system , 1990 .

[6]  Andrei P. Ershov,et al.  Mixed computation in the class of recursive program schemata , 1978, Acta Cybern..

[7]  Erik Ruf,et al.  On the specialization of online program specializers , 1992, Journal of Functional Programming.

[8]  Thomas W. Reps,et al.  Program Specialization via Program Slicing , 1996, Dagstuhl Seminar on Partial Evaluation.

[9]  I. G. BONNER CLAPPISON Editor , 1960, The Electric Power Engineering Handbook - Five Volume Set.

[10]  John P. Gallagher,et al.  Transforming Logic Programs by Specialising Interpreters , 1986, ECAI.

[11]  Charles Consel,et al.  Binding time analysis for high order untyped functional languages , 1990, LISP and Functional Programming.

[12]  Chris Goad,et al.  Automatic Construction of Special Purpose Programs , 1982, CADE.

[13]  Anders Haraldsson,et al.  On compiling embedded languages in LISP , 1980, LISP Conference.

[14]  Dines Bjørner,et al.  Partial Evaluation and Mixed Computation: Proceedings of the IFIP TC2 Workshop, Gammel Avernaes, Denmark, 18-24 Oct., 1987 , 1988 .

[15]  Siau-Cheng Khoo,et al.  Semantics-Directed Generation of a Prolog Compiler , 1991, Sci. Comput. Program..

[16]  Akikazu Takeuchi,et al.  Partial Evaluation of Prolog Programs and its Application to Meta Programming , 1986, IFIP Congress.

[17]  Raf Venken A Prolog Meta-Interpreter for Partial Evaluation and its Application to Source to Source Transformation and Query-Optimisation , 1984, ECAI.

[18]  John Darlington,et al.  A Transformation System for Developing Recursive Programs , 1977, J. ACM.

[19]  Peter Sestoft,et al.  An experiment in partial evaluation: the generation of a compiler generator , 1985, SIGP.

[20]  Lars Birkedal,et al.  Binding-time analysis for Standard ML , 1994, LISP Symb. Comput..

[21]  John Launchbury,et al.  A Strongly-Typed Self-Applicable Partial Evaluator , 1991, FPCA.

[22]  Joyce L. Vedral,et al.  Functional Programming Languages and Computer Architecture , 1989, Lecture Notes in Computer Science.

[23]  Robert S. Boyer,et al.  Proving Theorems about LISP Functions , 1973, JACM.

[24]  Frank G. Pagan Converting interpreters into compilers , 1988, Softw. Pract. Exp..

[25]  Anders Bondorf,et al.  Logimix: A Self-Applicable Partial Evaluator for Prolog , 1992, LOPSTR.

[26]  John W. Lloyd,et al.  Partial Evaluation in Logic Programming , 1991, J. Log. Program..

[27]  Lars Birkedal,et al.  Hand-Writing Program Generator Generators , 1994, PLILP.

[28]  Dines Bjørner,et al.  Partial Evaluation and Mixed Computation , 1987 .

[29]  Corin A. Gurr,et al.  A self-applicable partial evaluator for the logic programming language Goedel , 1994 .

[30]  Robert Glück,et al.  Binding-time analysis applied to mathematical algorithms , 1996 .

[31]  Charles Consel,et al.  New Insights into Partial Evaluation: the SCHISM Experiment , 1988, ESOP.

[32]  Neil D. Jones,et al.  Compiler generation by partial evaluation , 1989 .

[33]  John P. Gallagher,et al.  Some low-level source transformations of logic programs , 1990 .

[34]  Fritz Henglein,et al.  Efficient Type Inference for Higher-Order Binding-Time Analysis , 1991, FPCA.

[35]  Frank G. Pagan Comparative efficiency of general and residual parsers , 1990, SIGP.

[36]  V. F. Turchin,et al.  A supercompiler system based on the language REFAL , 1979, SIGP.

[37]  Robert Glück,et al.  An Algorithm of Generalization in Positive Supercompilation , 1995, ILPS.

[38]  Lars Ole Andersen Partial Evaluation of C and Automatic Compiler Generation (Extended Abstract) , 1992, CC.

[39]  Peter Sestoft,et al.  The structure of a self-applicable partial evaluator , 1985, Programs as Data Objects.

[40]  S. A. Romanenko,et al.  A compiler generator produced by a self-applicable specializer can have a surprisingly natural and u , 1988 .

[41]  John P. Gallagher,et al.  Tutorial on specialisation of logic programs , 1993, PEPM '93.

[42]  Nevin Heintze,et al.  ML Partial Evaluation Using Set-Based Analysis , 1994 .

[43]  Erik Ruf,et al.  Automatic Online Partial Evaluation , 1991, FPCA.

[44]  Valentin F. Turchin,et al.  Program transformation with metasystem transitions , 1993, Journal of Functional Programming.

[45]  Lars Ole Andersen,et al.  Self-applicable C Program Specialization , 1992, PEPM.

[46]  Anders Bondorf,et al.  Automatic Autoprojection of Higher Order Recursive Equations , 1990, Sci. Comput. Program..

[47]  Robert Glück,et al.  Towards Unifying Partial Evaluation, Deforestation, Supercompilation, and GPC , 1994, ESOP.

[48]  Jesper Jørgensen,et al.  Generating a compiler for a lazy language by partial evaluation , 1992, POPL '92.

[49]  Dan Sahlin,et al.  The Mixtus Approach to Automatic Partial Evaluation of Full Prolog , 1990, NACLP.

[50]  Peter Sestoft,et al.  Partial evaluation and automatic program generation , 1993, Prentice Hall international series in computer science.

[51]  Andrew A. Berlin,et al.  Partial evaluation applied to numerical computation , 1990, LISP and Functional Programming.

[52]  Jan Komorowski,et al.  Partial evaluation as a means for inferencing data structures in an applicative language: a theory and implementation in the case of prolog , 1982, POPL '82.

[53]  Andrei P. Ershov,et al.  On the Partial Computation Principle , 1977, Inf. Process. Lett..

[54]  Robert Glück,et al.  Partial Evaluation of Numerical Programs in Fortran , 1994, PEPM.

[55]  Andrei P. Ershov,et al.  Mixed Computation: Potential Applications and Problems for Study , 1982, Theor. Comput. Sci..

[56]  John P. Gallagher,et al.  Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation , 1991 .

[57]  Andrew A. Berlin,et al.  Compiling scientific code using partial evaluation , 1990, Computer.

[58]  S. C. Kleene,et al.  Introduction to Metamathematics , 1952 .

[59]  Valentin F. Turchin,et al.  The concept of a supercompiler , 1986, TOPL.

[60]  Peter Holst Andersen Partial Evaluation Applied to Ray Tracing , 1996 .

[61]  Peter Sestoft,et al.  Automatic call unfolding in a partial evaluator , 1987 .

[62]  Andrei P. Ershov,et al.  On the Essence of Compilation , 1977, Formal Description of Programming Concepts.

[63]  Lars Birkedal,et al.  Partial Evaluation of Standard ML Master's Thesis , 1993 .

[64]  Neil D. Jones,et al.  A partial evaluator for the untyped lambda-calculus , 1991, Journal of Functional Programming.

[65]  Torben Æ. Mogensen Self-applicable Partial Evaluation for Pure Lambda Calculus , 1992, PEPM.

[66]  Robert Glück,et al.  Application of metasystem transition to function inversion and transformation , 1990, ISSAC '90.

[67]  John W. Lloyd,et al.  A Partial Evaluation Procedure for Logic Programs , 1990, NACLP.

[68]  Torben Æ. Mogensen Self-applicable online partial evaluation of the pure lambda calculus , 1995, PEPM '95.

[69]  Henryk Jan Komorowski,et al.  A specification of an abstract Prolog machine and its application to partial evaluation , 1981 .

[70]  Robert Glück,et al.  Generating optimizing specializers , 1994, Proceedings of 1994 IEEE International Conference on Computer Languages (ICCL'94).

[71]  Carsten Kehler Holst,et al.  Finiteness Analysis , 1991, Conference on Functional Programming Languages and Computer Architecture.

[72]  Neil D. Jones,et al.  Mix: A self-applicable partial evaluator for experiments in compiler generation , 1989, LISP Symb. Comput..

[73]  Erik Sandewall,et al.  A Partial Evaluator, and its Use as a Programming Tool , 1976, Artif. Intell..

[74]  Lars Ole Andersen Binding-time analysis and the taming of C pointers , 1993, PEPM '93.