Results 1  10
of
35
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 sourcetosource program transformation technique for specializing program ..."
Abstract

Cited by 237 (62 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 sourcetosource 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 interpreterlike pieces. These pieces contain both compiletime and runtime constructs. Partial evaluation identifies and eliminates the compiletime 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...
Program slicing
"... Program slicing is a decomposition technique that elides program components not relevant to a chosen computation, referred to as a slicing criterion. The remaining components form an executable program called a slice that computes a projection of the original program’s semantics. Using examples coup ..."
Abstract

Cited by 124 (22 self)
 Add to MetaCart
Program slicing is a decomposition technique that elides program components not relevant to a chosen computation, referred to as a slicing criterion. The remaining components form an executable program called a slice that computes a projection of the original program’s semantics. Using examples coupled with fundamental principles, a tutorial introduction to program slicing is presented. Then applications of program slicing are surveyed, ranging from its first use as a debugging technique to current applications in property verification using finite state models. Finally, a summary of research challenges for the slicing community is discussed.
Shortcut Deforestation in Calculational Form
 In Proc. Conference on Functional Programming Languages and Computer Architecture
, 1995
"... In functional programming, intermediate data structures are often used to "glue" together small programs. Deforestation is a program transformation to remove these intermediate data structures automatically. We present a simple algorithm for deforestation based on two fusion rules for hylomorphism, ..."
Abstract

Cited by 91 (3 self)
 Add to MetaCart
In functional programming, intermediate data structures are often used to "glue" together small programs. Deforestation is a program transformation to remove these intermediate data structures automatically. We present a simple algorithm for deforestation based on two fusion rules for hylomorphism, an expressive recursion pattern. A generic notation for hylomorphisms is introduced, where natural transformations are explicitly factored out, and it is used to represent programs. Our method successfully eliminates intermediate data structures of any algebraic type from a much larger class of compositional functional programs than previous techniques. 1 Introduction In functional programming, programs are often constructed by "gluing" together small components, using intermediate data structures to convey information between them. Such data are constructed in one component and later consumed in another component, but never appear in the result of the whole program. The compositional styl...
On perfect supercompilation
 Journal of Functional Programming
, 1996
"... We extend positive supercompilation to handle negative as well as positive information. This is done by instrumenting the underlying unfold rules with a small rewrite system that handles constraints on terms, thereby ensuring perfect information propagation. We illustrate this by transforming a na ..."
Abstract

Cited by 79 (3 self)
 Add to MetaCart
We extend positive supercompilation to handle negative as well as positive information. This is done by instrumenting the underlying unfold rules with a small rewrite system that handles constraints on terms, thereby ensuring perfect information propagation. We illustrate this by transforming a naively specialised string matcher into an optimal one. The presented algorithm is guaranteed to terminate by means of generalisation steps.
Program specialization via program slicing
 Proceedings of the Dagstuhl Seminar on Partial Evaluation, volume 1110 of Lecture Notes in Computer Science
, 1996
"... This paper concerns the use of program slicing to perform a certain kind of programspecialization operation. The specialization operation that slicing performs is different from the specialization operations performed by algorithms for partial evaluation, supercompilation, bifurcation, and deforest ..."
Abstract

Cited by 55 (4 self)
 Add to MetaCart
This paper concerns the use of program slicing to perform a certain kind of programspecialization operation. The specialization operation that slicing performs is different from the specialization operations performed by algorithms for partial evaluation, supercompilation, bifurcation, and deforestation. In particular, we present an example in which the specialized program that we create via slicing could not be created as the result of applying partial evaluation, supercompilation, bifurcation, or deforestation to the original unspecialized program. Specialization via slicing also possesses an interesting property that partial evaluation, supercompilation, and bifurcation do not possess: The latter operations are somewhat limited in the sense that they support tailoring of existing software only according to the ways in which parameters of functions and procedures are used in a program. Because parameters to functions and procedures represent the range of usage patterns that the designer of a piece of software has anticipated, partial evaluation, supercompilation, and bifurcation support specialization only in ways that have already been “foreseen ” by the software’s author. In contrast, the specialization operation that slicing supports permits programs to be specialized in ways
Accurate BindingTime Analysis For Imperative Languages: Flow, Context, and Return Sensitivity
"... Since a bindingtime analysis determines how an offline partial evaluator will specialize a program, the accuracy of the bindingtime information directly determines the degree of specialization. We have designed and implemented a bindingtime analysis for an imperative language, and integrated it ..."
Abstract

Cited by 37 (4 self)
 Add to MetaCart
Since a bindingtime analysis determines how an offline partial evaluator will specialize a program, the accuracy of the bindingtime information directly determines the degree of specialization. We have designed and implemented a bindingtime analysis for an imperative language, and integrated it into our partial evaluator for C, called Tempo [11]. This bindingtime analysis includes a number of new features, not available in any existing partial evaluator for an imperative language, which are critical when specializing existing programs such as operating system components [27,28]. ffl Flow sensitivity. A different bindingtime description is computed for each program point, allowing the same variable to be considered static at one program point and dynamic at another. ffl Context sensitivity. Each function call is analyzed with the context of the call site, generating multiple bindingtime annotated instances of the same function definition. ffl Return sensitivity. A different bi...
Homeomorphic embedding for online termination of symbolic methods
 In The essence of computation, volume 2566 of LNCS
, 2002
"... Abstract. Wellquasi orders in general, and homeomorphic embedding in particular, have gained popularity to ensure the termination of techniques for program analysis, specialisation, transformation, and verification. In this paper we survey and discuss this use of homeomorphic embedding and clarify ..."
Abstract

Cited by 28 (5 self)
 Add to MetaCart
Abstract. Wellquasi orders in general, and homeomorphic embedding in particular, have gained popularity to ensure the termination of techniques for program analysis, specialisation, transformation, and verification. In this paper we survey and discuss this use of homeomorphic embedding and clarify the advantages of such an approach over one using wellfounded orders. We also discuss various extensions of the homeomorphic embedding relation. We conclude with a study of homeomorphic embedding in the context of metaprogramming, presenting some new (positive and negative) results and open problems.
The Universal Resolving Algorithm: Inverse Computation in a Functional Language
 in Mathematics of Program Construction. Proceedings
, 2000
"... We present an algorithm for inverse computation in a firstorder functional language based on the notion of a perfect process tree. The Universal Resolving Algorithm (URA) introduced in this paper is sound and complete, and computes each solution, if it exists, in finite time. The algorithm has been ..."
Abstract

Cited by 23 (3 self)
 Add to MetaCart
We present an algorithm for inverse computation in a firstorder functional language based on the notion of a perfect process tree. The Universal Resolving Algorithm (URA) introduced in this paper is sound and complete, and computes each solution, if it exists, in finite time. The algorithm has been implemented for TSG, a typed dialect of SGraph, and shows some remarkable results for the inverse computation of functional programs such as pattern matching and the inverse interpretation of Whileprograms.
A Comparative Revisitation of Some Program Transformation Techniques
 Partial Evaluation, Int'l Seminar, Dagstuhl
, 1996
"... . We revisit the main techniques of program transformation which are used in partial evaluation, mixed computation, supercompilation, generalized partial computation, rulebased program derivation, program specialization, compiling control, and the like. We present a methodology which underlines the ..."
Abstract

Cited by 23 (0 self)
 Add to MetaCart
. We revisit the main techniques of program transformation which are used in partial evaluation, mixed computation, supercompilation, generalized partial computation, rulebased program derivation, program specialization, compiling control, and the like. We present a methodology which underlines these techniques as a `common pattern of reasoning' and explains the various correspondences which can be established among them. This methodology consists of three steps: i) symbolic computation, ii) search for regularities, and iii) program extraction. We also discuss some control issues which occur when performing these steps. 1 Introduction During the past years researchers working in various areas of program transformation, such as partial evaluation, mixed computation, supercompilation, generalized partial computation, rulebased program derivation, program specialization, and compiling control, have been using very similar techniques for the development and derivation of programs. Unfor...