Lambda lifting: transforming programs to recursive equations
Proc. of a conference on Functional programming languages and computer architecture
Notions of computation and monads
Information and Computation
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The essence of compiling with continuations
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lisp in small pieces
Proper tail recursion and space efficiency
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Abstract machines for programming language implementation
Future Generation Computer Systems
SAFKASI: a security mechanism for language-based systems
ACM Transactions on Software Engineering and Methodology (TOSEM)
Essentials of programming languages (2nd ed.)
Essentials of programming languages (2nd ed.)
The Definition of Standard ML
Java Virtual Machine Specification
Java Virtual Machine Specification
The Tail-Recursive SECD Machine
Journal of Automated Reasoning
Definitional Interpreters for Higher-Order Programming Languages
Higher-Order and Symbolic Computation
Fundamental Concepts in Programming Languages
Higher-Order and Symbolic Computation
Stack inspection: Theory and variants
ACM Transactions on Programming Languages and Systems (TOPLAS)
Applied Semantics, International Summer School, APPSEM 2000, Caminha, Portugal, September 9-15, 2000, Advanced Lectures
State transition machines for lambda calculus expressions
Semantics-Directed Compiler Generation, Proceedings of a Workshop
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
Automatically Restructuring Programs for the Web
Proceedings of the 16th IEEE international conference on Automated software engineering
A functional correspondence between evaluators and abstract machines
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Rabbit: A Compiler for Scheme
A functional correspondence between call-by-need evaluators and lazy abstract machines
Information Processing Letters
A tail-recursive semantics for stack inspections
ESOP'03 Proceedings of the 12th European conference on Programming
Specializing continuations a model for dynamic join points
Proceedings of the 6th workshop on Foundations of aspect-oriented languages
A syntactic correspondence between context-sensitive calculi and abstract machines
Theoretical Computer Science
A concrete framework for environment machines
ACM Transactions on Computational Logic (TOCL)
A static simulation of dynamic delimited control
Higher-Order and Symbolic Computation
A stepwise approach to developing languages for SIP telephony service creation
Proceedings of the 1st international conference on Principles, systems and applications of IP telecommunications
Defunctionalized interpreters for programming languages
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Inter-deriving Semantic Artifacts for Object-Oriented Programming
WoLLIC '08 Proceedings of the 15th international workshop on Logic, Language, Information and Computation
CC '09 Proceedings of the 18th International Conference on Compiler Construction: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Science of Computer Programming
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
A substructural type system for delimited continuations
TLCA'07 Proceedings of the 8th international conference on Typed lambda calculi and applications
Deriving compilers and virtual machines for a multi-level language
APLAS'07 Proceedings of the 5th Asian conference on Programming languages and systems
Inter-deriving semantic artifacts for object-oriented programming
Journal of Computer and System Sciences
From reduction-based to reduction-free normalization
AFP'08 Proceedings of the 6th international conference on Advanced functional programming
Abstract interpreters for free
SAS'10 Proceedings of the 17th international conference on Static analysis
From type checking by recursive descent to type checking with an abstract machine
Proceedings of the Eleventh Workshop on Language Descriptions, Tools and Applications
A correspondence between type checking via reduction and type checking via evaluation
Information Processing Letters
A rational deconstruction of landin's SECD machine
IFL'04 Proceedings of the 16th international conference on Implementation and Application of Functional Languages
A rational deconstruction of landin's j operator
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
PEPM '13 Proceedings of the ACM SIGPLAN 2013 workshop on Partial evaluation and program manipulation
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
A logical correspondence between natural semantics and abstract machines
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Hi-index | 0.01 |
We extend our correspondence between evaluators and abstract machines from the pure setting of the λ-calculus to the impure setting of the computational λ-calculus. We show how to derive new abstract machines from monadic evaluators for the computational λ-calculus. Starting from (1) a generic evaluator parameterized by a monad and (2) a monad specifying a computational effect, we inline the components of the monad in the generic evaluator to obtain an evaluator written in a style that is specific to this computational effect. We then derive the corresponding abstract machine by closure-converting, CPS-transforming, and defunctionalizing this specific evaluator. We illustrate the construction with the identity monad, obtaining the CEK machine, and with a lifted state monad, obtaining a variant of the CEK machine with error and state.In addition, we characterize the tail-recursive stack inspection presented by Clements and Felleisen as a lifted state monad. This enables us to combine this stack-inspection monad with other monads and to construct abstract machines for languages with properly tail-recursive stack inspection and other computational effects. The construction scales to other monads--including one more properly dedicated to stack inspection than the lifted state monad--and other monadic evaluators.