Equational logic as a programming language
Equational logic as a programming language
Miranda: a non-strict functional language with polymorphic types
Proc. of a conference on Functional programming languages and computer architecture
Strictness analysis—a practical approach
Proc. of a conference on Functional programming languages and computer architecture
Static evaluation of functional programs
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
The theory of strictness analysis for higher order functions
on Programs as data objects
Strictness detection in non-flat domains
on Programs as data objects
Term-rewriting implementation of equational logic programming
on Rewriting techniques and applications
Projections for strictness analysis
Proc. of a conference on Functional programming languages and computer architecture
Finding fixed points in finite lattices
Proc. of a conference on Functional programming languages and computer architecture
Compiling strictness into streams
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Transforming strongly sequential rewrite systems with constructors for efficient parallel execution
RTA-89 Proceedings of the 3rd international conference on Rewriting Techniques and Applications
Strictness analysis: a new perspective based on type inference
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Higher-order strictness analysis in untyped lambda calculus
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Computing in Systems Described by Equations
Computing in Systems Described by Equations
The Theory and Practice of Transforming Call-by-need into Call-by-value
Proceedings of the Fourth 'Colloque International sur la Programmation' on International Symposium on Programming
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
HOPE: An experimental applicative language
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
On the power and limitation of strictness analysis based on abstract interpretation
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Fast parallel implementation of lazy languages—the EQUALS experience
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Fast strictness analysis based on demand propagation
ACM Transactions on Programming Languages and Systems (TOPLAS)
How much non-strictness do lenient programs require?
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
EQUALS – a fast parallel implementation of a lazy language
Journal of Functional Programming
Removing redundant arguments automatically
Theory and Practice of Logic Programming
On the power of abstract interpretation
Computer Languages
Lenient evaluation is neither strict nor lazy
Computer Languages
Hi-index | 0.00 |
Use of strictness analysis in parallel evaluation and optimization of lazy functional languages is well known. The first formal treatment of strictness analysis appeared in Mycroft's seminal work which however dealt only with flat domains. Unlike flat domains, strictness analysis on non-flat domains involves determining how a function transforms a demand (degree of strictness) on its output into a demand on its arguments. Solutions to this problem in its full generality require large domains and appear both complex and expensive to implement. However, only two kinds of demands arise naturally in lazy normalization of terms, viz., e-demand (normal form needed) and d-demand (root stable or head normal form needed). Based on this observation, we identify three useful forms of strictness for non-flat domains - ee, dd and de. Each of these three forms of strictness play an important role in evaluation of functional programs. Specifically, ee strictness is used for transforming call-by-need to call-by-value and dd strictness is useful in repairing violations of strong sequentiality of equational programs as well as in a critical optimization step used in rewriting implementations of such languages. We present intuitively simple methods to compute them. Our methods are computationally efficient as they are based on small domains (1 point for ee and dd and 2 points for de). They are powerful enough to extract all useful strictness information in practice and are general enough to handle functions defined by rewrite rules. We are able to reason about all user defined data types within a single framework and also handle polymorphism.