• Corpus ID: 15525727

Three Steps for the CPS Transformation ∗ (detailed abstract)

  title={Three Steps for the CPS Transformation ∗ (detailed abstract)},
  author={Olivier Danvy},
Transforming a �-term into continuation-passing style (CPS) might seem mystical at first, but in fact it can be characterized by three separate aspects: • The values of all intermediate applications are given a name. • The evaluation of these applications is sequentialized based on a traversal of their syntax tree. This traversal mimics the reduction strategy. • The resulting term is equipped with a continuation — a �-abstraction whose application to intermediate values yields the final result… 
1 Citations
Dependence-driven delimited CPS transformation for JavaScript
This paper proposes an alternative strategy in which a delimited CPS transformation that operates on a Program Dependence Graph instead to find the limits of each continuation.


Representing Control: A Study of the CPS Transformation
It is shown that by appropriate η-expansion of Fisher and Plotkin's two-pass equational specification of the CPS transform, a static and context-free separation of the result terms into “essential” and “administrative” constructs is obtained.
Abstracting control
This article investigates an alternative formulation of continuations, exploiting the latent expressive power of the standard continuation-passing style (CPS) instead of introducing yet other new concepts, and describes an improved conversion into applicative-order CPS.
Lambda calculus schemata
A lambda-calculus schema is an expression of the lambda calculus augmented by uninterpreted constant and operator symbols. It is an abstraction of programming languages such as LISP which permit
Two-Level Semantics and Code Generation
Deriving Target Code as a Representation of Continuation Semantics
Reynolds' technique for deriving interpreters is extended to derive compilers from continuation semantics to simplify the semantics of a program phrase and build a machine to interpret the terms.
Definitional interpreters for higher-order programming languages
This work considers the definition of a simple applicative programming language by means of an interpreter written in a similar language, and considers the treatment of imperative features such as jumps and assignment.
An evaluation semantics for classical proofs
  • Chetan R. Murthy
  • Computer Science
    [1991] Proceedings Sixth Annual IEEE Symposium on Logic in Computer Science
  • 1991
It is shown how to interpret classical proofs as programs in a way that agrees with the well-known treatment of constructive proofs as programs and moreover extends it to give a computational meaning
Correctness of Procedure Representations in Higher-Order Assembly Language
Higher-order assembly language (HOAL) generalizes combinator-based target languages by allowing free variables in terms to play the role of registers, and the notion of a λ-representation is introduced, which is an abstract binding operation, and it is proved that the correctness of a compiler from a tiny language into HOAL is correct.
Compiling with Continuations
This book shows how continuation-passing style is used as an intermediate representation to perform optimizations and program transformations to create practical optimizing compilers for modern languages like ML.
Back to Direct Style
  • O. Danvy
  • Computer Science
    Sci. Comput. Program.
  • 1994