Galois connections and computer science applications
Proceedings of a tutorial and workshop on Category theory and computer programming
Theoretical Computer Science
The definition of Standard ML
Computational lambda-calculus and monads
Proceedings of the Fourth Annual Symposium on Logic in computer science
A formulae-as-type notion of control
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Automatic autoprojection of recursive equations with global variable and abstract data types
Science of Computer Programming
Essentials of programming languages
Essentials of programming languages
Control-flow analysis of higher-order languages of taming lambda
Control-flow analysis of higher-order languages of taming lambda
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Syntactic detection of single-threading using continuations
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
For a better support of static data flow
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Compiling with continuations
The revised report on the syntactic theories of sequential control and state
Theoretical Computer Science
Improving binding times without explicit CPS-conversion
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Reasoning about programs in continuation-passing style.
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Back to direct style II: first-class continuations
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ESOP'92 Symposium proceedings on 4th European symposium on programming
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory
Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory
Correctness of Procedure Representations in Higher-Order Assembly Language
Proceedings of the 7th International Conference on Mathematical Foundations of Programming Semantics
Declarative Continuations: an Investigation of Duality in Programming Language Semantics
Category Theory and Computer Science
Definitional interpreters for higher-order programming languages
ACM '72 Proceedings of the ACM annual conference - Volume 2
Proceedings of ACM conference on Proving assertions about programs
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Rabbit: A Compiler for Scheme
Proofs by structural induction using partial evaluation
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A generic account of continuation-passing styles
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Caching intermediate results for program improvement
PEPM '95 Proceedings of the 1995 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Proceedings of the first ACM SIGPLAN international conference on Functional programming
ACM Transactions on Programming Languages and Systems (TOPLAS)
Static caching for incremental computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
From ML to Ada: Strongly-typed language interoperability via source translation
Journal of Functional Programming
Journal of Functional Programming
Hi-index | 0.04 |
The continuation-passing style (CPS) transformation is powerful but complex. Our thesis is that this transformation is in fact compound, and we set out to stage it. We factor the CPS transformation into several steps, separating aspects in each step: (1) Intermediate values are named; (2) Continuations are introduced; (3) Sequencing order is decided and administrative reductions are performed.Step 1 determines the evaluation order (e.g., call-by-name or call-by-value). Step 2 isolates the introduction of continuations and is expressed with local, structure-preserving rewrite rules — a novel aspect standing in sharp contrast with the usual CPS transformations. Step 3 determines the ordering of continuations (e.g., left-to-right or right-to-left evaluation) and leads to the familiar-looking continuation-passing terms.Step 2 is completely reversible and Steps 1 and 3 form Galois connections. Together they lead to the direct style (DS) transformation of our earlier work (including first-class continuations): (1) Intermediate continuations are named and sequencing order is abstracted; (2) Second-class continuations are eliminated; (3) Administrative reductions are performed.A subset of these transformations can leverage program manipulation systems: CPS-based compilers can modify sequencing to improve e.g., register allocation; static program analyzers can yield more precise results; and overspecified CPS programs can be rescheduled. Separating aspects of the CPS transformation also enables a new programming style, with applications to nondeterministic programming. As a byproduct, our work also suggests a new continuation semantics for unspecified sequencing orders in programming languages (e.g., Scheme).