Strictness analysis—a practical approach
Proc. of a conference on Functional programming languages and computer architecture
How to replace failure by a list of successes
Proc. of a conference on Functional programming languages and computer architecture
Structure and interpretation of computer programs
Structure and interpretation of computer programs
Why functional programming matters
The Computer Journal - Special issue on Lazy functional programming
How much non-strictness do lenient programs require?
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
Purely functional data structures
Purely functional data structures
Cheap eagerness: speculative evaluation in a lazy functional language
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Eager Haskell: resource-bounded execution yields efficient iteration
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Optimistic evaluation: an adaptive evaluation strategy for non-strict programs
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Finger trees: a simple general-purpose data structure
Journal of Functional Programming
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Lazy Contract Checking for Immutable Data Structures
Implementation and Application of Functional Languages
Real World Haskell
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Finding low-utility data structures
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Evaluating the design of the R language: objects and functions for data analysis
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Hi-index | 0.00 |
While many programmers appreciate the benefits of lazy programming at an abstract level, determining which parts of a concrete program to evaluate lazily poses a significant challenge for most of them. Over the past thirty years, experts have published numerous papers on the problem, but developing this level of expertise requires a significant amount of experience. We present a profiling-based technique that captures and automates this expertise for the insertion of laziness annotations into strict programs. To make this idea precise, we show how to equip a formal semantics with a metric that measures waste in an evaluation. Then we explain how to implement this metric as a dynamic profiling tool that suggests where to insert laziness into a program. Finally, we present evidence that our profiler's suggestions either match or improve on an expert's use of laziness in a range of real-world applications.