TIM: A simple, lazy abstract machine to execute supercombinators
Proc. of a conference on Functional programming languages and computer architecture
Compiling with continuations
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A systematic study of functional language implementations
ACM Transactions on Programming Languages and Systems (TOPLAS)
Efficient compilation of lazy evaluation
SIGPLAN '84 Proceedings of the 1984 SIGPLAN symposium on Compiler construction
Unboxed Values as First Class Citizens in a Non-Strict Functional Language
Proceedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture
C--: A Portable Assembly Language that Supports Garbage Collection
PPDP '99 Proceedings of the International Conference PPDP'99 on Principles and Practice of Declarative Programming
The nofib Benchmark Suite of Haskell Programs
Proceedings of the 1992 Glasgow Workshop on Functional Programming
Hybrid eager and lazy evaluation for efficient compilation of haskell
Hybrid eager and lazy evaluation for efficient compilation of haskell
Coinductive big-step operational semantics
Information and Computation
From natural semantics to c: A formal derivation of two stg machines
Journal of Functional Programming
Abstract Interpretation of Functional Programs using an Attribute Grammar System
Electronic Notes in Theoretical Computer Science (ENTCS)
A verified framework for higher-order uncurrying optimizations
Higher-Order and Symbolic Computation
Inter-deriving semantic artifacts for object-oriented programming
Journal of Computer and System Sciences
Semantics and algebraic specification
ReCaml: execution state as the cornerstone of reconfigurations
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
The very lazy λ-calculus and the STEC machine
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
PADL'10 Proceedings of the 12th international conference on Practical Aspects of Declarative Languages
Exploiting vector instructions with generalized stream fusio
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
The Intel labs Haskell research compiler
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
An operational foundation for the tactic language of Coq
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Modular, higher-order cardinality analysis in theory and practice
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.00 |
Higher-order languages that encourage currying are typically implemented using one of two basic evaluation models: push/enter or eval/apply. Implementors use their intuition and qualitative judgements to choose one model or the other. Our goal in this paper is to provide, for the first time, a more substantial basis for this choice, based on our qualitative and quantitative experience of implementing both models in a state-of-the-art compiler for Haskell. Our conclusion is simple, and contradicts our initial intuition: compiled implementations should use eval/apply.