Evaluating Call-by-Need on the Control Stack

  title={Evaluating Call-by-Need on the Control Stack},
  author={Stephen Chang and David Van Horn and Matthias Felleisen},
  booktitle={Trends in Functional Programming},
Ariola and Felleisen's call-by-need λ-calculus replaces a variable occurrence with its value at the last possible moment. To support this gradual notion of substitution, function applications--once established--are never discharged. In this paper we show how to translate this notion of reduction into an abstract machine that resolves variable references via the control stack. In particular, the machine uses the static address of a variable occurrence to extract its current value from the… 

A synthetic operational account of call-by-need evaluation

The first operational account of call by need that connects syntactic theory and implementation practice is presented, revealing a genuine and principled unity of computational theory and computational practice, one that readily applies to variations on the general theme ofcall by need.

Lazy v. Yield: Incremental, Linear Pretty-Printing

A programming style for incremental stream processing based on typed simple generators that promotes modularity and decoupling of producers and consumers just like lazy evaluation and gives a new solution to the notorious pretty-printing problem.

Three syntactic theories for combinatory graph reduction

This article illustrates the scientific consensus of theoreticians and implementors about graph reduction: it is the same combinatory elephant.



Lazy evaluation and delimited control

The call-by-need lambda calculus provides an equational framework for reasoning syntactically about lazy evaluation. This paper examines its operational characteristics. By a series of reasoning

A call-by-need lambda calculus

This paper derives an equational characterization of call-by-need and proves it correct with respect to the original lambda calculus and is a strictly smaller theory than the lambda calculus.

Defunctionalized Interpreters for Call-by-Need Evaluation

This work inter-derive a series of hygienic semantic artifacts: a reduction-free stateless abstract machine, a continuation-passing evaluation function, and what appears to be the first heapless natural semantics for call-by-need evaluation.

Tail-Recursive Stack Disciplines for an Interpreter

This paper examines several diierent methods of implementing proper tail recursion in a stack-based interpeter, including passing arguments in a heap, copying arguments to tail-recursive calls, and garbage collecting the stack.

The Revised Report on the Syntactic Theories of Sequential Control and State

The lambda calculus - its syntax and semantics

  • H. Barendregt
  • Mathematics
    Studies in logic and the foundations of mathematics
  • 1985

Semantics Engineering with PLT Redex

This text is the first comprehensive presentation of reduction semantics in one volume and introduces the first reliable and easy-to-use tool set for such forms of semantics, and presents a framework for the formulation of language models as PLT Redex models.

Call-by-name, call-by-value and the λ-calculus

  • Theoretical Computer Science 1
  • 1975