Replacing function parameters by global variables
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Dynamic typing: syntax and proof theory
ESOP'92 Selected papers of the symposium on Fourth European symposium on programming
Precise interprocedural dataflow analysis via graph reachability
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Paths, computations and labels in the &lgr;-calculus
RTA-93 Selected papers of the fifth international conference on Rewriting techniques and applications
Linear-time subtransitive control flow analysis
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Flobal Program Analysis in Constraint Form
CAAP '94 Proceedings of the 19th International Colloquium on Trees in Algebra and Programming
Control-Flow Analysis and Type Systems
SAS '95 Proceedings of the Second International Symposium on Static Analysis
Type-base flow analysis: from polymorphic subtyping to CFL-reachability
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Mathematical Structures in Computer Science
Flow Analysis, Linearity, and PTIME
SAS '08 Proceedings of the 15th international symposium on Static Analysis
Flow-sensitive type recovery in linear-log time
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Control-flow analysis of functional programs
ACM Computing Surveys (CSUR)
Hi-index | 0.03 |
The concepts of value and control flow graphs are important for program analysis of imperative programs. An imperative value flow graph can be constructed by a single pass over the program text. No similar concepts exist for higher-order languages: we propose a method for constructing value flow graphs for typed higher-order functional languages. A higher-order value flow graph is constructed by a single pass over an explicitly typed program. By using standard methods, single-source and single-use value flow problems can be answered in linear time and all-sources-all-uses can be answered in quadratic time (in the size of the flow graph, which is equivalent to the size of the explicitly typed program). On simply typed programs, the precision of the resulting analysis is equivalent to closure analysis. In practice, it is a reasonable assumption that typed programs are only bigger than their untyped equivalent by a constant factor, hence this is an asymptotic improvement over previous algorithms.We extend the analysis to handle polymorphism, sum types and recursive types. As a consequence, the analysis can handle (explicit) dynamically typed programs. The analysis is polyvariant for polymorphic definitions.