TIM: A simple, lazy abstract machine to execute supercombinators
Proc. of a conference on Functional programming languages and computer architecture
The semantics of lazy functional languages
Theoretical Computer Science
An abstract machine for Lambda-terms normalization
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Modern compiler implementation in Java
Modern compiler implementation in Java
Abstract machines for programming language implementation
Future Generation Computer Systems
Essentials of programming languages (2nd ed.)
Essentials of programming languages (2nd ed.)
Compiler Design
Definitional Interpreters for Higher-Order Programming Languages
Higher-Order and Symbolic Computation
On the Transformation between Direct and Continuation Semantics
Proceedings of the 9th International Conference on Mathematical Foundations of Programming Semantics
Design and Correctness of Program Transformations Based on Control-Flow Analysis
TACS '01 Proceedings of the 4th International Symposium on Theoretical Aspects of Computer Software
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
A functional correspondence between evaluators and abstract machines
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Functional runtime systems within the lambda-sigma calculus
Journal of Functional Programming
Deriving a lazy abstract machine
Journal of Functional Programming
Algol-60 Implementation
Improving the lazy Krivine machine
Higher-Order and Symbolic Computation
Theoretical Computer Science - Applied semantics: Selected topics
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
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
Sequent calculi and abstract machines
ACM Transactions on Programming Languages and Systems (TOPLAS)
Science of Computer Programming
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
A systematic derivation of the STG machine verified in Coq
Proceedings of the third ACM Haskell symposium on Haskell
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Abstract interpreters for free
SAS'10 Proceedings of the 17th international conference on Static analysis
From natural semantics to abstract machines
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
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
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
Defunctionalized interpreters for call-by-need evaluation
FLOPS'10 Proceedings of the 10th international conference on Functional and Logic Programming
Theoretical Computer Science
A synthetic operational account of call-by-need evaluation
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
A logical correspondence between natural semantics and abstract machines
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Hi-index | 0.89 |
We bridge the gap between compositional evaluators and abstract machines for the lambda-calculus, using closure conversion, transformation into continuation-passing style, and defunctionalization of continuations. This article is a followup of our article at PPDP 2003, where we consider call by name and call by value. Here, however, we consider call by need.We derive a lazy abstract machine from an ordinary call-by-need evaluator that threads a heap of updatable cells. In this resulting abstract machine, the continuation fragment for updating a heap cell naturally appears as an 'update marker', an implementation technique that was invented for the Three Instruction Machine and subsequently used to construct lazy variants of Krivine's abstract machine. Tuning the evaluator leads to other implementation techniques such as unboxed values. The correctness of the resulting abstract machines is a corollary of the correctness of the original evaluators and of the program transformations used in the derivation.