Detecting global variables in denotational specifications
ACM Transactions on Programming Languages and Systems (TOPLAS) - Lecture notes in computer science Vol. 174
An architecture that efficiently updates associative aggregates in applicative programming languages
Proc. of a conference on Functional programming languages and computer architecture
Denotational semantics: a methodology for language development
Denotational semantics: a methodology for language development
ORBIT: an optimizing compiler for scheme
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Arrays, non-determinism, side-effects, and parallelism: A functional perspective
Proc. of a workshop on Graph reduction
Proc. of a workshop on Graph reduction
Matrix algebra and applicative programming
Proc. of a conference on Functional programming languages and computer architecture
Copy elimination in single assignment languages
Copy elimination in single assignment languages
An optimising compiler for a modern functional language
The Computer Journal - Special issue on Lazy functional programming
A collecting interpretation of expressions
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Copy elimination in functional languages
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Variations on strictness analysis
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
A semantic model of reference counting and its abstraction (detailed summary)
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
List processing in real time on a serial computer
Communications of the ACM
Higher-order strictness analysis in untyped lambda calculus
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
I-structures: Data structures for parallel computing
Proceedings of the Workshop on Graph Reduction
T: a dialect of Lisp or LAMBDA: The ultimate software tool
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
Path analysis and the optimization of nonstrict functional languages
Path analysis and the optimization of nonstrict functional languages
Static Analysis for Safe Destructive Updates in a Functional Language
LOPSTR '01 Selected papers from the 11th International Workshop on Logic Based Program Synthesis and Transformation
A study of evaluation order semantics in expressions with side effects
Journal of Functional Programming
Hi-index | 0.01 |
The functional programming style is increasingly popular in the research world, but functional languages still execute slowly relative to imperative languages. This is largely because the power and flexibility of functional languages restrict the amount of information readily available to the compiler, hindering its ability to generate good code. This article demonstrates that information about order of evaluation of expressions can be statically inferred for nonstrict functional programs and that optimizations based on this information can provide substantial speedups at runtime. We present an exact, nonstandard semantics called path semantics that models order of evaluation in a nonstrict, sequential functional language, and its computable abstraction, path analysis. We show how the information inferred by path analysis can be used to implement destructive aggregate updating, in which updates on functional aggregates that are provably not live are done destructively. We also demonstrate a new approach to strictness analysis and show that strictness analysis is subsumed by path analysis. Benchmarks are presented.