An experiment in partial evaluation: the generation of a compiler generator
Proc. of the first international conference on Rewriting techniques and applications
On laziness and optimality in lambda interpreters: tools for specification and analysis
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An algorithm for optimal lambda calculus reduction
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The spineless tagless G-machine
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Partial evaluation is fuller laziness
PEPM '91 Proceedings of the 1991 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Semantics of programming languages: structures and techniques
Semantics of programming languages: structures and techniques
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Combinatory reduction systems: introduction and survey
Theoretical Computer Science - A collection of contributions in honour of Corrado Bo¨hm on the occasion of his 70th birthday
Optimality and inefficiency: what isn't a cost model of the lambda calculus?
Proceedings of the first ACM SIGPLAN international conference on Functional programming
An operational semantics of sharing in lazy evaluation
Science of Computer Programming
The optimal implementation of functional programming languages
The optimal implementation of functional programming languages
Cheap eagerness: speculative evaluation in a lazy functional language
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Compilation of Head and Strong Reduction
ESOP '94 Proceedings of the 5th European Symposium on Programming: Programming Languages and Systems
What is an Efficient Implementation of the \lambda-calculus?
Proceedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture
Optimistic evaluation: an adaptive evaluation strategy for non-strict programs
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
The call-by-need lambda calculus
Journal of Functional Programming
The call-by-need lambda calculus
Journal of Functional Programming
Closed reduction: explicit substitutions without $\alpha$-conversion
Mathematical Structures in Computer Science
The Implementation of Functional Programming Languages (Prentice-Hall International Series in Computer Science)
Call-by-need in token-passing nets
Mathematical Structures in Computer Science
Bottom-up β-reduction: uplinks and λ-DAGs
ESOP'05 Proceedings of the 14th European conference on Programming Languages and Systems
Optimality for dynamic patterns
Proceedings of the 12th international ACM SIGPLAN symposium on Principles and practice of declarative programming
Hi-index | 0.00 |
Lazy evaluation (or call-by-need) is widely used and well understood, partly thanks to a clear operational semantics given by Launchbury. However, modern non-strict functional languages do not use plain call-by-need evaluation: they also use optimisations like fully lazy @l-lifting or partial evaluation. To ease reasoning, it would be nice to have all these features in a uniform setting. In this paper, we generalise Launchbury's semantics in order to capture ''complete laziness'', as coined by Holst and Gomard in 1991, which is slightly more than fully lazy sharing, and closer to on-the-fly needed partial evaluation. This gives a clear, formal and implementation-independent operational semantics to completely lazy evaluation, in a natural (or big-step) style similar to Launchbury's. Surprisingly, this requires sharing not only terms, but also contexts, a property which was thought to characterise optimal reduction.