Results 1 -
7 of
7
Tutorial Notes on Partial Evaluation
- Proceedings of the Twentieth Annual ACM Symposium on Principles of Programming Languages
, 1993
"... The last years have witnessed a flurry of new results in the area of partial evaluation. These tutorial notes survey the field and present a critical assessment of the state of the art. 1 Introduction Partial evaluation is a source-to-source program transformation technique for specializing program ..."
Abstract
-
Cited by 230 (60 self)
- Add to MetaCart
The last years have witnessed a flurry of new results in the area of partial evaluation. These tutorial notes survey the field and present a critical assessment of the state of the art. 1 Introduction Partial evaluation is a source-to-source program transformation technique for specializing programs with respect to parts of their input. In essence, partial evaluation removes layers of interpretation. In the most general sense, an interpreter can be defined as a program whose control flow is determined by its input data. As Abelson points out, [43, Foreword], even programs that are not themselves interpreters have important interpreter-like pieces. These pieces contain both compile-time and run-time constructs. Partial evaluation identifies and eliminates the compile-time constructs. 1.1 A complete example We consider a function producing formatted text. Such functions exist in most programming languages (e.g., format in Lisp and printf in C). Figure 1 displays a formatting functio...
A Partial Evaluator for the Untyped Lambda Calculus
- Final Report of the NSF Workshop on Scientific Database Management. SIGMOD RECORD
, 1991
"... This article describes theoretical and practical aspects of an implemented self-applicable partial evaluator for the untyped... ..."
Abstract
-
Cited by 90 (3 self)
- Add to MetaCart
This article describes theoretical and practical aspects of an implemented self-applicable partial evaluator for the untyped...
Opportunities for Online Partial Evaluation
, 1992
"... Partial evaluators can be separated into two classes: offline specializers, which make all of their reduce/residualize decisions before specialization, and online specializers, which make such decisions during specialization. The choice of which method to use is driven by a tradeoff between the effi ..."
Abstract
-
Cited by 87 (4 self)
- Add to MetaCart
Partial evaluators can be separated into two classes: offline specializers, which make all of their reduce/residualize decisions before specialization, and online specializers, which make such decisions during specialization. The choice of which method to use is driven by a tradeoff between the efficiency of the specializer and the quality of the residual programs that it produces. Existing research describes some of the inefficiencies of online specializers, and how these are avoided using offline methods, but fails to address the price paid in specialization quality. This paper motivates research in online specialization by describing two fundamental limitations of the offline approach, and explains why the online approach does not encounter the same difficulties.
Language Extensibility via First-class Interpreters and Constructive Modules
- Columbia University, Department of Computer Science
, 1993
"... This document proposes these theses: ffl First-class interpreters offer a flexible means of language extensibility. ffl A simple module system can provide: -- incremental specialization -- program construction rather than program organization -- static rather than dynamic composition of program ..."
Abstract
-
Cited by 2 (1 self)
- Add to MetaCart
This document proposes these theses: ffl First-class interpreters offer a flexible means of language extensibility. ffl A simple module system can provide: -- incremental specialization -- program construction rather than program organization -- static rather than dynamic composition of programs -- explicit rather than implicit control over composition The former two claims duplicate properties presently associated only with object-oriented programming, while we regard the latter two as improvements. 2 Introduction Software design is language design for particular problems. The functional programming community has stressed the power and flexibility of this view on many occasions [Hen82, AS85, Hug90, Wad87, HS88], and one of the goals of this thesis is to emphasize it once more. According to this point of view, a programming language is a vehicle for constructing problem-specific languages. Existing languages support this view to varying degrees, but few allow significant sem...
Computing Types During Partial Evaluation
, 1990
"... : We have developed techniques for obtaining and using type information during program specialization (partial evaluation). Computed along with every residual expression and every specialized program is type information that bounds the possible values that the specialized program will compute at run ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
: We have developed techniques for obtaining and using type information during program specialization (partial evaluation). Computed along with every residual expression and every specialized program is type information that bounds the possible values that the specialized program will compute at run time. The three keystones of this research are symbolic values that represent both the set of values that might be computed at runtime and the code for creating the runtime value, generalization of symbolic values, and the use of online fixed-point iterations for computing the type of values returned by specialized recursive functions. This work differs from previous specializers in computing type information for all residual expressions, including residual if expressions, and residual calls to specialized user functions. The specializer exploits the type information it computes to increase the efficiency of specialized functions. In particular, this research allows the class of recursive d...
PARTICLE: An Automatic Program Specialization System for Imperative and Low-Level Languages
, 1993
"... This document describes the design and implementation of PARTICLE, a fully automatic program specialization system for imperative and low-level languages. PARTICLE performs source-to-source specialization of programs written in the C programming language based on knowledge of program behavior acquir ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
This document describes the design and implementation of PARTICLE, a fully automatic program specialization system for imperative and low-level languages. PARTICLE performs source-to-source specialization of programs written in the C programming language based on knowledge of program behavior acquired through extensible, high-quality program analysis. PARTICLE supports a unique two-phase specialization strategy that permits careful balancing between the time benefits and space costs of specialization and permits the user to avoid the huge space expansion that has traditionally accompanied program specialization. During the first phase of PARTICLE operation, an input program in the C programming language is analyzed using an extensibly precise form of symbolic evaluation in order to discover opportunities for low-level specialization. The symbolic evaluation manipulates explicit approximations to program values and states and the compile time flow of analysis in the program represents a...
Improving the Accuracy of Higher-Order Specialization using Control Flow Analysis
"... We have developed a new technique for computing the argument vectors used to build specializations of first-class functions. Instead of building these specializations on completely dynamic actual parameters, our technique performs a control flow analysis of the residual program as it is constructed ..."
Abstract
- Add to MetaCart
We have developed a new technique for computing the argument vectors used to build specializations of first-class functions. Instead of building these specializations on completely dynamic actual parameters, our technique performs a control flow analysis of the residual program as it is constructed during specialization, and uses the results of this analysis to compute more accurate actual parameter values. As implemented in the program specializer FUSE, our technique has proven useful in improving the specialization of several realistic programs taken from the domains of interpreters and scientific computation. Also, it extends the utility of the continuation-passing-style (CPS) transformation for binding time improvement to programs with non tail-recursive residual loops. Introduction The treatment of function calls in program point specializers for first-order functional languages is fairly straightforward: since the head of the call always evaluates to a known procedure at specia...

