Results 1  10
of
135
Implementing lazy functional languages on stock hardware: the Spineless Tagless Gmachine  Version 2.5
 JOURNAL OF FUNCTIONAL PROGRAMMING
, 1992
"... The Spineless Tagless Gmachine is an abstract machine designed to support nonstrict higherorder functional languages. This presentation of the machine falls into three parts. Firstly, we give a general discussion of the design issues involved in implementing nonstrict functional languages. Next, ..."
Abstract

Cited by 221 (21 self)
 Add to MetaCart
The Spineless Tagless Gmachine is an abstract machine designed to support nonstrict higherorder functional languages. This presentation of the machine falls into three parts. Firstly, we give a general discussion of the design issues involved in implementing nonstrict functional languages. Next, we present the STG language, an austere but recognisablyfunctional language, which as well as a denotational meaning has a welldefined operational semantics. The STG language is the "abstract machine code" for the Spineless Tagless Gmachine. Lastly, we discuss the mapping of the STG language onto stock hardware. The success of an abstract machine model depends largely on how efficient this mapping can be made, though this topic is often relegated to a short section. Instead, we give a detailed discussion of the design issues and the choices we have made. Our principal target is the C language, treating the C compiler as a portable assembler. Version 2.5 of this paper (minus appendix) appe...
A Natural Semantics for Lazy Evaluation
, 1993
"... We define an operational semantics for lazy evaluation which provides an accurate model for sharing. The only computational structure we introduce is a set of bindings which corresponds closely to a heap. The semantics is set at a considerably higher level of abstraction than operational semantics f ..."
Abstract

Cited by 221 (3 self)
 Add to MetaCart
We define an operational semantics for lazy evaluation which provides an accurate model for sharing. The only computational structure we introduce is a set of bindings which corresponds closely to a heap. The semantics is set at a considerably higher level of abstraction than operational semantics for particular abstract machines, so is more suitable for a variety of proofs. Furthermore, because a heap is explicitly modelled, the semantics provides a suitable framework for studies about space behaviour of terms under lazy evaluation.
Lambda Lifting: Transforming Programs to Recursive Equations
, 1985
"... Lambda lifting is a technique for transforming a functional program with local function definitions, possibly with free variables in the function definitions, into a program consisting only of global function (combinator) definitions which will be used as rewrite rules. Different ways of doing lambd ..."
Abstract

Cited by 218 (4 self)
 Add to MetaCart
(Show Context)
Lambda lifting is a technique for transforming a functional program with local function definitions, possibly with free variables in the function definitions, into a program consisting only of global function (combinator) definitions which will be used as rewrite rules. Different ways of doing lambda lifting are presented, as well as reasons for rejecting or selecting the method used in our Lazy ML compiler. An attribute grammar and a functional program implementing the chosen algorithm is given. Originally publised in Proceedings 1985 Conference on Functional Programming Languages and Computer Architecture, Lecture Notes in Computer Science 201, Nancy, France, 1985. Springer Verlag. y As part B of author's thesis. Main addition: the attribute grammar formulation. 1 Introduction When compiling a lazy functional language using the technique described in [Joh84] it is presumed that the input program is in the form of a set of function definitions, possibly mutually recursive, tog...
Attribute Grammars as a Functional Programming Paradigm
 Functional Programming Languages and Computer Architecture, volume 274 of LNCS
, 1987
"... The purpose of this paper is twofold. Firstly we show how attributes in an attribute grammar can be simply and efficiently evaluated using a lazy functional language. The class of attribute grammars we can deal with are the most general ones possible: attributes may depend on each other in an arbitr ..."
Abstract

Cited by 90 (2 self)
 Add to MetaCart
(Show Context)
The purpose of this paper is twofold. Firstly we show how attributes in an attribute grammar can be simply and efficiently evaluated using a lazy functional language. The class of attribute grammars we can deal with are the most general ones possible: attributes may depend on each other in an arbitrary way, as long as there are no truly circular data dependencies. Secondly, we describe a methodology based on attribute grammars, where, in a fairly straightforward way, we can develop efficient functional programs where direct, conventional solutions yield less efficient programs. We review two examples from a paper by R. Bird (Using circular programs to eliminate multiple traversals of data, Acta Informatica, 21, 1984) where he transforms simple but inefficient multipass programs into more efficient single pass ones, but which on their own can be very hard to understand. We show how such efficient but tangled programs can have natural formulations as attribute grammars. We also propose a...
The CallbyNeed Lambda Calculus
 Journal of Functional Programming
, 1994
"... We present a calculus that captures the operational semantics of callbyneed. The callbyneed lambda calculus is confluent, has a notion of standard reduction, and entails the same observational equivalence relation as the callbyname calculus. The system can be formulated with or without explici ..."
Abstract

Cited by 57 (3 self)
 Add to MetaCart
(Show Context)
We present a calculus that captures the operational semantics of callbyneed. The callbyneed lambda calculus is confluent, has a notion of standard reduction, and entails the same observational equivalence relation as the callbyname calculus. The system can be formulated with or without explicit let bindings, admits useful notions of marking and developments, and has a straightforward operational interpretation. Introduction The correspondence between callbyvalue lambda calculi and strict functional languages (such as the pure subset of Standard ML) is quite good; the correspondence between callby name lambda calculi and lazy functional languages (such as Miranda or Haskell) is not so good. Callbyname reevaluates an argument each time it is used, a prohibitive expense. Thus, many lazy languages are implemented using the callbyneed mechanism proposed by Wadsworth (1971), which overwrites an argument with its value the first time it is evaluated, avoiding the need for any s...
Strictness analysis on nonflat domains by abstract interpretation over finite domains
 Abstract Interpretation of Declarative Languages
, 1987
"... ..."
The Impact of the Lambda Calculus in Logic and Computer Science
 BULLETIN OF SYMBOLIC LOGIC
, 1997
"... One of the most important contributions of A. Church to logic is his invention of the lambda calculus. We present the genesis of this theory and its two major areas of application: the representation of computations and the resulting functional programming languages on the one hand and the represent ..."
Abstract

Cited by 28 (1 self)
 Add to MetaCart
One of the most important contributions of A. Church to logic is his invention of the lambda calculus. We present the genesis of this theory and its two major areas of application: the representation of computations and the resulting functional programming languages on the one hand and the representation of reasoning and the resulting systems of computer mathematics on the other hand.
Explicit Cyclic Substitutions
, 1993
"... In this paper we consider rewrite systems that describe the lambdacalculus enriched with recursive and nonrecursive local definitions by generalizing the `explicit substitutions' used by Abadi, Cardelli, Curien, and Lévy [1] to describe sharing in lambdaterms. This leads to `explicit cyclic ..."
Abstract

Cited by 25 (2 self)
 Add to MetaCart
(Show Context)
In this paper we consider rewrite systems that describe the lambdacalculus enriched with recursive and nonrecursive local definitions by generalizing the `explicit substitutions' used by Abadi, Cardelli, Curien, and Lévy [1] to describe sharing in lambdaterms. This leads to `explicit cyclic substitutions' that can describe the mutual sharing of local recursive definitions. We demonstrate how this may be used to describe standard binding constructions (let and letrec)  directly using substitution and fixed point induction as well as using `smallstep' rewriting semantics where substitution is interleaved with the mechanics of the following betareductions. With this we hope to contribute to the synthesis of denotational and operational specifications of sharing and recursion.