Results 1  10
of
18
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 250 (61 self)
 Add to MetaCart
(Show Context)
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...
A Compiled Implementation of Strong Reduction
"... Motivated by applications to proof assistants based on dependent types, we develop and prove correct a strong reducer and b equivalence checker for the lcalculus with products, sums, and guarded fixpoints. Our approach is based on compilation to the bytecode of an abstract machine performing weak ..."
Abstract

Cited by 88 (5 self)
 Add to MetaCart
Motivated by applications to proof assistants based on dependent types, we develop and prove correct a strong reducer and b equivalence checker for the lcalculus with products, sums, and guarded fixpoints. Our approach is based on compilation to the bytecode of an abstract machine performing weak reductions on nonclosed terms, derived with minimal modifications from the ZAM machine used in the Objective Caml bytecode interpreter, and complemented by a recursive "read back" procedure. An implementation in the Coq proof assistant demonstrates important speedups compared with the original interpreterbased implementation of strong reduction in Coq.
Deriving a Lazy Abstract Machine
 Journal of Functional Programming
, 1997
"... Machine Peter Sestoft Department of Mathematics and Physics Royal Veterinary and Agricultural University Thorvaldsensvej 40, DK1871 Frederiksberg C, Denmark Email: sestoft@dina.kvl.dk Version 6 of March 13, 1996 Abstract We derive a simple abstract machine for lazy evaluation of the lambda cal ..."
Abstract

Cited by 79 (2 self)
 Add to MetaCart
Machine Peter Sestoft Department of Mathematics and Physics Royal Veterinary and Agricultural University Thorvaldsensvej 40, DK1871 Frederiksberg C, Denmark Email: sestoft@dina.kvl.dk Version 6 of March 13, 1996 Abstract We derive a simple abstract machine for lazy evaluation of the lambda calculus, starting from Launchbury's natural semantics. Lazy evaluation here means nonstrict evaluation with sharing of argument evaluation, that is, callbyneed. The machine we derive is a lazy version of Krivine's abstract machine, which was originally designed for callbyname evaluation. We extend it with datatype constructors and base values, so the final machine implements all dynamic aspects of a lazy functional language. 1 Introduction The development of an efficient abstract machine for lazy evaluation usually starts from either a graph reduction machine or an environment machine. Graph reduction machines perform substitution by rewriting the term graph, that is, the program itself...
Explicit Substitutions with de Bruijn’s Levels
 in Rewriting Techniques and Applications, 6th International Conference, Lecture Notes in Computer Science 914
, 1995
"... In the introduction of [7], Curry writes that substitution is the main issue in logic and that λcalculus does not properly answer the problem because substitutions are outside the calculus. He pleads in favor of combinatory logic which offers a full treatment to substitutions through its use of a f ..."
Abstract

Cited by 32 (3 self)
 Add to MetaCart
(Show Context)
In the introduction of [7], Curry writes that substitution is the main issue in logic and that λcalculus does not properly answer the problem because substitutions are outside the calculus. He pleads in favor of combinatory logic which offers a full treatment to substitutions through its use of a first order rewrite system in
Abstract machines for programming language implementation
 FUTURE GENERATION COMPUTER SYSTEMS
, 2000
"... We present an extensive, annotated bibliography of the abstract machines designed for each of the main programming paradigms (imperative, object oriented, functional, logic and concurrent). We conclude that whilst a large number of efficient abstract machines have been designed for particular langua ..."
Abstract

Cited by 20 (0 self)
 Add to MetaCart
We present an extensive, annotated bibliography of the abstract machines designed for each of the main programming paradigms (imperative, object oriented, functional, logic and concurrent). We conclude that whilst a large number of efficient abstract machines have been designed for particular language implementations, relatively little work has been done to design abstract machines in a systematic fashion.
Dynamic Optimization through the use of Automatic Runtime Specialization
, 1999
"... Profiledriven optimizations and dynamic optimization through specialization have taken optimizations to a new level. By using actual runtime data, optimizers can generate code that is specially tuned for the task at hand. However, most existing compilers that perform these optimizations require s ..."
Abstract

Cited by 18 (2 self)
 Add to MetaCart
(Show Context)
Profiledriven optimizations and dynamic optimization through specialization have taken optimizations to a new level. By using actual runtime data, optimizers can generate code that is specially tuned for the task at hand. However, most existing compilers that perform these optimizations require separate test runs to gather profile information, and/or user annotations in the code. In this thesis, I describe runtime optimizations that a dynamic compiler can perform automatically  without user annotations  by utilizing realtime performance data. I describe the implementation of the dynamic optimizations in the framework of a Java Virtual Machine and give performance results.
A Taxonomy of Functional Language Implementations Part II: CallbyName, CallbyNeed and Graph Reduction
, 1996
"... In Part I [5], we proposed an approach to formally describe and compare functional languages implementations. We focused on callbyvalue and described wellknown compilers for strict languages. Here, we complete our exploration of the design space of implementations by studying callbyname, cal ..."
Abstract

Cited by 11 (5 self)
 Add to MetaCart
(Show Context)
In Part I [5], we proposed an approach to formally describe and compare functional languages implementations. We focused on callbyvalue and described wellknown compilers for strict languages. Here, we complete our exploration of the design space of implementations by studying callbyname, callbyneed and graph reduction. We express the whole compilation process as a succession of program transformations in a common framework. At each step, different transformations model fundamental choices or optimizations. We describe and compare the diverse alternatives for the compilation of the callbyname strategy in both environment and graphbased models. The different options for the compilation of breduction described in [5] can be applied here as well. Instead, we describe other possibilities specific to graph reduction. Callbyneed is nothing but callbyname with redex sharing and update. We present how sharing can be expressed in our framework and we describe different...
A Systematic Study of Functional Language Implementations
 ACM Transactions on Programming Languages and Systems
, 1998
"... : We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of t ..."
Abstract

Cited by 7 (3 self)
 Add to MetaCart
(Show Context)
: We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of this approach is to structure and decompose the implementation process. The correctness proofs can be tackled independently for each step and amount to proving program transformations in the functional world. This approach also paves the way to formal comparisons by making it possible to estimate the complexity of individual transformations or compositions of them. Our study aims at covering the whole known design space of sequential functional languages implementations. In particular, we consider callbyvalue, callbyname and callbyneed reduction strategies as well as environment and graphbased implementations. We describe for each compilation step the diverse alternatives as program tr...
The Calculus of Explicit Substitutions
, 1994
"... AEcalculus is a new simple calculus of explicit substitutions. In this paper we explore its properties, namely we prove that it correctly implements fi reduction, it is confluent, its simply typed version is strongly normalizing. We associate with AE an abstract machine called the Umachine and we ..."
Abstract

Cited by 4 (1 self)
 Add to MetaCart
AEcalculus is a new simple calculus of explicit substitutions. In this paper we explore its properties, namely we prove that it correctly implements fi reduction, it is confluent, its simply typed version is strongly normalizing. We associate with AE an abstract machine called the Umachine and we prove that the Umachine correctly implements AE..
Proving Correctness of the Translation from MiniML to the CAM with the Coq Proof Development System
 with the Coq Proof Development System. Research report RR2536, INRIA, Rocquencourt
, 1995
"... In this article we show how we proved correctness of the translation from a small applicative language with recursive definitions (MiniML) to the Categorical abstract machine (CAM) using the Coq system. Our aim was to mechanise the proof of J. Despeyroux [10]. Like her, we use natural semantics to ..."
Abstract

Cited by 4 (0 self)
 Add to MetaCart
In this article we show how we proved correctness of the translation from a small applicative language with recursive definitions (MiniML) to the Categorical abstract machine (CAM) using the Coq system. Our aim was to mechanise the proof of J. Despeyroux [10]. Like her, we use natural semantics to axiomatise the semantics of our languages. The axiomatisations of inferences systems and of the languages is nicely performed by the mechanism of inductive definitions in the Coq system. Unfortunately both the source and the target semantics involve nested structures that cannot be formalised inductively. We have overcome this problem by making some slight modifications of both the source and target semantics and show how the changes in the source and target semantics are related. For the remaining tranlation we explain how we can use the Coq system to formalize nonterminating programs and incorrect programs, objects that are impossible to explain with only the formalism of natural semantic...