Hostname: page-component-76fb5796d-25wd4 Total loading time: 0 Render date: 2024-04-29T04:01:55.940Z Has data issue: false hasContentIssue false

Exploiting reachability and cardinality in higher-order flow analysis

Published online by Cambridge University Press:  12 August 2008

MATTHEW MIGHT
Affiliation:
Diagis, LLC, Atlanta, GA, USA (e-mail: matt@diagis.com)
OLIN SHIVERS
Affiliation:
Northeastern University, Boston, MA, USA (e-mail: shivers@ccs.neu.edu)
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the ‘Save PDF’ action button.

We present two complementary improvements for abstract-interpretation-based flow analysis of higher-order languages: (1) abstract garbage collection and (2) abstract counting. Abstract garbage collection is an analog to its concrete counterpart: the analysis determines when an abstract resource has become unreachable, and then, re-allocates it as fresh. This prevents flow sets from joining during abstract interpretation, which has two immediate effects: (1) the precision of the interpretation increases and (2) its running time often falls. In abstract counting, the analysis tracks how many times an abstract resource has been allocated. A count of one implies that the abstract resource momentarily represents only one concrete resource. This knowledge, in turn, drives environment analysis, expanding the kind (rather than just the degree) of optimization available to the compiler.

Type
Articles
Copyright
Copyright © Cambridge University Press 2008

References

Agesen, O. (1995) The cartesian product algorithm: simple and precise type inference of parametric polymorphism. In Proceedings of ECOOP 1995, pp. 2–26.Google Scholar
Chase, D. R., Wegman, M., & Zadeck, F. K. 1990 (June) Analysis of pointers and structures. In Proceedings of ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 296–310.Google Scholar
Cousot, P. & Cousot, R. 1977 (January) Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints. In Proceedings of ACM SIGPLAN Symposium on Principles of Programming Languages, vol. 4, pp. 238–252.Google Scholar
Cousot, P. & Cousot, R. 1979 (January) Systematic design of program analysis frameworks. In Proceedings of ACM SIGPLAN Symposium on Principles of Programming Languages, vol. 6, pp. 269–282.Google Scholar
Hannan, J. (1995) Type systems for closure conversion. In Proceedings of Workshop on Types for Program Analysis, pp. 48–62.Google Scholar
Hudak, P. 1986 (August) A semantic model of reference counting and its abstraction (detailed summary). In Proceedings of the 1986 ACM Conference on LISP and Functional Programming, pp. 351–363.Google Scholar
Jagannathan, S., Thiemann, P., Weeks, S., & Wright, A. K. 1998 (January) Single and loving it: must-alias analysis for higher-order languages. In Proceedings of ACM SIGPLAN Symposium on Principles of Programming Languages, pp. 329–341.Google Scholar
Might, M. & Shivers, O. 2006a (January) Environment analysis via ΔCFA. In Proceedings of the 33rd Annual ACM Symposium on the Principles of Programming Languages (POPL 2006), pp. 127–140.Google Scholar
Might, M. & Shivers, O. 2006b (September) Improving flow analyses via ΓCFA: abstract garbage collection and counting. In Proceedings of the 11th ACM International Conference on Functional Programming (ICFP 2006), pp. 13–25.Google Scholar
Might, M. & Shivers, O. (2007) Analyzing environment structure of higher-order languages using frame strings. Theoretical Computer Science, 375 (1–3), 137168.CrossRefGoogle Scholar
Might, M., Chambers, B., & Shivers, O. 2007 (January) Model checking via ΓCFA. In Proceedings of the 8th International Conference on Verification, Model Checking and Abstract Interpretation (VMCAI 2007), pp. 59–73.Google Scholar
Palsberg, J. (1995) Closure analysis in constraint form. ACM Trans. Programming Languages Systems, 17 (1), 4762.CrossRefGoogle Scholar
Sestoft, P. 1988 (October) Replacing Function Parameters by Global Variables. M.Phil. thesis, Copenhagen, Denmark: DIKU, University of Copenhagen.CrossRefGoogle Scholar
Shivers, O. 1988 (June) Control-flow analysis in scheme. In Proceedings of the SIGPLAN '88 Conference on Programming Language Design and Implementation (pldi), pp. 164–174.Google Scholar
Shivers, O. 1991 (May) Control-Flow Analysis of Higher-Order Languages. Ph.D. thesis, Pittsburgh, PA: School of Computer Science, Carnegie-Mellon University. Technical Report CMU-CS-91-145.Google Scholar
Shivers, O. & Might, M. 2006 (June) Continuations and transducer composition. Proceedings of ACM SIGPLAN Conference on Programming Language Design and Implementation, 295–307.Google Scholar
Steele, Jr., & Guy, L. 1978 (May) RABBIT: A Compiler for SCHEME. M.Phil. thesis, Cambridge, MA: Artificial Intelligence Laboratory, Massachusetts Institute of Technology. Technical report AI-TR-474.Google Scholar
Wand, M. & Steckler, P. 1994 (January) Selective and lightweight closure conversion. Proceedings of ACM SIGPLAN Symposium on Principles of Programming Languages, vol. 21, pp. 435–445.Google Scholar
Wright, A. K. & Jagannathan, S. (1998) Polymorphic splitting: an effective polyvariant flow analysis. ACM Trans. Programming Languages Systems, 20 (1), 166207.CrossRefGoogle Scholar
Submit a response

Discussions

No Discussions have been published for this article.