{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:56:07Z","timestamp":1776891367427,"version":"3.51.2"},"reference-count":19,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"5-6","license":[{"start":{"date-parts":[[2008,8,12]],"date-time":"2008-08-12T00:00:00Z","timestamp":1218499200000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2008,9]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    We present two complementary improvements for abstract-interpretation-based flow analysis of higher-order languages: (1)\n                    <jats:italic>abstract garbage collection<\/jats:italic>\n                    and (2)\n                    <jats:italic>abstract counting<\/jats:italic>\n                    . 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.\n                  <\/jats:p>","DOI":"10.1017\/s0956796808006941","type":"journal-article","created":{"date-parts":[[2008,8,12]],"date-time":"2008-08-12T07:22:51Z","timestamp":1218525771000},"page":"821-864","source":"Crossref","is-referenced-by-count":11,"title":["Exploiting reachability and cardinality in higher-order flow analysis"],"prefix":"10.46298","volume":"18","author":[{"given":"MATTHEW","family":"MIGHT","sequence":"first","affiliation":[]},{"given":"OLIN","family":"SHIVERS","sequence":"additional","affiliation":[]}],"member":"25203","published-online":{"date-parts":[[2008,8,12]]},"reference":[{"key":"S0956796808006941_ref4","doi-asserted-by":"crossref","unstructured":"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\u2013282.","DOI":"10.1145\/567752.567778"},{"key":"S0956796808006941_ref10","doi-asserted-by":"publisher","DOI":"10.1016\/j.tcs.2006.12.031"},{"key":"S0956796808006941_ref7","doi-asserted-by":"crossref","unstructured":"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\u2013341.","DOI":"10.1145\/268946.268973"},{"key":"S0956796808006941_ref13","doi-asserted-by":"crossref","unstructured":"Sestoft P. 1988 (October) Replacing Function Parameters by Global Variables. M.Phil. thesis, Copenhagen, Denmark: DIKU, University of Copenhagen.","DOI":"10.1145\/99370.99374"},{"key":"S0956796808006941_ref12","doi-asserted-by":"publisher","DOI":"10.1145\/200994.201001"},{"key":"S0956796808006941_ref1","unstructured":"Agesen O. (1995) The cartesian product algorithm: simple and precise type inference of parametric polymorphism. In Proceedings of ECOOP 1995, pp. 2\u201326."},{"key":"S0956796808006941_ref16","doi-asserted-by":"crossref","unstructured":"Shivers O. & Might M. 2006 (June) Continuations and transducer composition. Proceedings of ACM SIGPLAN Conference on Programming Language Design and Implementation, 295\u2013307.","DOI":"10.1145\/1133981.1134016"},{"key":"S0956796808006941_ref2","doi-asserted-by":"crossref","unstructured":"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\u2013310.","DOI":"10.1145\/93542.93585"},{"key":"S0956796808006941_ref11","doi-asserted-by":"crossref","unstructured":"Might M. , Chambers B. , & Shivers O. 2007 (January) Model checking via \u0393CFA. In Proceedings of the 8th International Conference on Verification, Model Checking and Abstract Interpretation (VMCAI 2007), pp. 59\u201373.","DOI":"10.1007\/978-3-540-69738-1_4"},{"key":"S0956796808006941_ref14","doi-asserted-by":"crossref","unstructured":"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\u2013174.","DOI":"10.1145\/53990.54007"},{"key":"S0956796808006941_ref8","unstructured":"Might M. & Shivers O. 2006a (January) Environment analysis via \u0394CFA. In Proceedings of the 33rd Annual ACM Symposium on the Principles of Programming Languages (POPL 2006), pp. 127\u2013140."},{"key":"S0956796808006941_ref15","unstructured":"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."},{"key":"S0956796808006941_ref6","doi-asserted-by":"crossref","unstructured":"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\u2013363.","DOI":"10.1145\/319838.319876"},{"key":"S0956796808006941_ref3","doi-asserted-by":"crossref","unstructured":"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\u2013252.","DOI":"10.1145\/512950.512973"},{"key":"S0956796808006941_ref5","unstructured":"Hannan J. (1995) Type systems for closure conversion. In Proceedings of Workshop on Types for Program Analysis, pp. 48\u201362."},{"key":"S0956796808006941_ref19","doi-asserted-by":"publisher","DOI":"10.1145\/271510.271523"},{"key":"S0956796808006941_ref9","unstructured":"Might M. & Shivers O. 2006b (September) Improving flow analyses via \u0393CFA: abstract garbage collection and counting. In Proceedings of the 11th ACM International Conference on Functional Programming (ICFP 2006), pp. 13\u201325."},{"key":"S0956796808006941_ref18","doi-asserted-by":"crossref","unstructured":"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\u2013445.","DOI":"10.1145\/174675.178044"},{"key":"S0956796808006941_ref17","unstructured":"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."}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796808006941","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:19:12Z","timestamp":1776889152000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796808006941\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,8,12]]},"references-count":19,"journal-issue":{"issue":"5-6","published-print":{"date-parts":[[2008,9]]}},"alternative-id":["S0956796808006941"],"URL":"https:\/\/doi.org\/10.1017\/s0956796808006941","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2008,8,12]]}}}