skip to main content
research-article
Open Access
Artifacts Available
Artifacts Evaluated & Functional

Staged abstract interpreters: fast and modular whole-program analysis via meta-programming

Published:10 October 2019Publication History
Skip Abstract Section

Abstract

It is well known that a staged interpreter is a compiler: specializing an interpreter to a given program produces an equivalent executable that runs faster. This connection is known as the first Futamura projection. It is even more widely known that an abstract interpreter is a program analyzer: tweaking an interpreter to run on abstract domains produces a sound static analysis. What happens when we combine these two ideas, and apply specialization to an abstract interpreter?

In this paper, we present a unifying framework that naturally extends the first Futamura projection from concrete interpreters to abstract interpreters. Our approach derives a sound staged abstract interpreter based on a generic interpreter with type-level binding-time abstractions and monadic abstractions. By using different instantiations of these abstractions, the generic interpreter can flexibly behave in one of four modes: as an unstaged concrete interpreter, a staged concrete interpreter, an unstaged abstract interpreter, or a staged abstract interpreter. As an example of abstraction without regret, the overhead of these abstraction layers is eliminated in the generated code after staging. We show that staging abstract interpreters is practical and useful to optimize static analysis, all while requiring less engineering effort and without compromising soundness. We conduct three case studies, including a comparison with Boucher and Feeley’s abstract compilation, applications to various control-flow analyses, and a demonstration for modular analysis. We also empirically evaluate the effect of staging on the execution time. The experiment shows an order of magnitude speedup with staging for control-flow analyses.

Skip Supplemental Material Section

Supplemental Material

a126-wei.webm

webm

150.2 MB

References

  1. Michael D. Adams, Andrew W. Keep, Jan Midtgaard, Matthew Might, Arun Chauhan, and R. Kent Dybvig. 2011. Flowsensitive Type Recovery in Linear-log Time. In Proceedings of the 2011 ACM International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA ’11). ACM, New York, NY, USA, 483–498. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Mads Sig Ager, Dariusz Biernacki, Olivier Danvy, and Jan Midtgaard. 2003. A functional correspondence between evaluators and abstract machines. In Proceedings of the 5th International ACM SIGPLAN Conference on Principles and Practice of Declarative Programming, 27-29 August 2003, Uppsala, Sweden. ACM, 8–19. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Baris Aktemur, Yukiyoshi Kameyama, Oleg Kiselyov, and Chung-chieh Shan. 2013. Shonan challenge for generative programming: short position paper. In Proceedings of the ACM SIGPLAN 2013 Workshop on Partial Evaluation and Program Manipulation, PEPM 2013, Rome, Italy, January 21-22, 2013, Elvira Albert and Shin-Cheng Mu (Eds.). ACM, 147–154. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Nada Amin and Tiark Rompf. 2018. Collapsing towers of interpreters. PACMPL 2, POPL (2018), 52:1–52:33. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Torben Amtoft. 1999. Partial evaluation for constraint-based program analyses. BRICS Report Series 6, 45 (1999).Google ScholarGoogle Scholar
  6. Tony Antoniadis, Konstantinos Triantafyllou, and Yannis Smaragdakis. 2017. [orting Doop to Soufflé: A Tale of Inter-engine Portability for Datalog-based Analyses. In Proceedings of the 6th ACM SIGPLAN International Workshop on State Of the Art in Program Analysis (SOAP 2017). ACM, New York, NY, USA, 25–30. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. J. Michael Ashley and R. Kent Dybvig. 1998. A practical and flexible flow analysis for higher-order languages. ACM Transactions on Programming Languages and Systems 20, 4 (1998), 845–868. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Lars Bergstrom, Matthew Fluet, Matthew Le, John Reppy, and Nora Sandler. 2014. Practical and Effective Higher-order Optimizations. In Proceedings of the 19th ACM SIGPLAN International Conference on Functional Programming (ICFP ’14). ACM, New York, NY, USA, 81–93. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, and Armin Rigo. 2009. Tracing the Meta-level: PyPy’s Tracing JIT Compiler. In Proceedings of the 4th Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages and Programming Systems (ICOOOLPS ’09). ACM, New York, NY, USA, 18–25. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Dominique Boucher and Marc Feeley. 1996. Abstract Compilation: A New Implementation Paradigm for Static Analysis. In Proceedings of the 6th International Conference on Compiler Construction (CC ’96). Springer-Verlag, London, UK, UK, 192–207. http://dl.acm.org/citation.cfm?id=647473.727587Google ScholarGoogle ScholarCross RefCross Ref
  11. Cristiano Calcagno, Walid Taha, Liwen Huang, and Xavier Leroy. 2003. Implementing Multi-stage Languages Using ASTs, Gensym, and Reflection. In Generative Programming and Component Engineering, Second International Conference, GPCE 2003, Erfurt, Germany, September 22-25, 2003, Proceedings (Lecture Notes in Computer Science), Frank Pfenning and Yannis Smaragdakis (Eds.), Vol. 2830. Springer, 57–76. Google ScholarGoogle ScholarCross RefCross Ref
  12. Jacques Carette and Oleg Kiselyov. 2005. Multi-stage Programming with Functors and Monads: Eliminating Abstraction Overhead from Generic Code. In Generative Programming and Component Engineering, Robert Glück and Michael Lowry (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 256–274.Google ScholarGoogle Scholar
  13. Jacques Carette, Oleg Kiselyov, and Chung-chieh Shan. 2009. Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages. J. Funct. Program. 19, 5 (2009), 509–543. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Paul Chiusano and Rnar Bjarnason. 2014. Functional Programming in Scala (1st ed.). Manning Publications Co., Greenwich, CT, USA.Google ScholarGoogle Scholar
  15. P. Cousot. 1999. The Calculational Design of a Generic Abstract Interpreter. In Calculational System Design, M. Broy and R. Steinbrüggen (Eds.). NATO ASI Series F. IOS Press, Amsterdam.Google ScholarGoogle Scholar
  16. Patrick Cousot and Radhia Cousot. 1977. Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints. In Conference Record of the Fourth ACM Symposium on Principles of Programming Languages, Los Angeles, California, USA, January 1977, Robert M. Graham, Michael A. Harrison, and Ravi Sethi (Eds.). ACM, 238–252. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. P. Cousot and R. Cousot. 1979. Systematic design of program analysis frameworks. In Conference Record of the Sixth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM Press, New York, NY, San Antonio, Texas, 269–282.Google ScholarGoogle Scholar
  18. Patrick Cousot and Radhia Cousot. 2002. Modular Static Program Analysis. In Compiler Construction, 11th International Conference, CC 2002, Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2002, Grenoble, France, April 8-12, 2002, Proceedings (Lecture Notes in Computer Science), R. Nigel Horspool (Ed.), Vol. 2304. Springer, 159–178. Google ScholarGoogle ScholarCross RefCross Ref
  19. Patrick Cousot, Roberto Giacobazzi, and Francesco Ranzato. 2019. A 2 I: Abstract 2 Interpretation. Proc. ACM Program. Lang. 3, POPL, Article 42 (Jan. 2019), 31 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Daniel Damian. 1999. Partial evaluation for program analysis. Progress report, BRICS PhD School, University of Aarhus (1999).Google ScholarGoogle Scholar
  21. Olivier Danvy, Jürgen Koslowski, and Karoline Malmkjær. 1991. Compiling monads. Kansas State University, Manhattan, Kansas, Tech. Rep. CIS-92-3 (1991).Google ScholarGoogle Scholar
  22. David Darais, Nicholas Labich, Phuc C. Nguyen, and David Van Horn. 2017. Abstracting definitional interpreters (functional pearl). PACMPL 1, ICFP (2017), 12:1–12:25. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. David Darais, Matthew Might, and David Van Horn. 2015. Galois Transformers and Modular Abstract Interpreters: Reusable Metatheory for Program Analysis. In Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2015). ACM, New York, NY, USA, 552–571. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. David Darais and David Van Horn. 2016. Constructive Galois Connections: Taming the Galois Connection Framework for Mechanized Metatheory. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming (ICFP 2016). ACM, New York, NY, USA, 311–324. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Grégory M. Essertel, Ruby Y. Tahboub, James M. Decker, Kevin J. Brown, Kunle Olukotun, and Tiark Rompf. 2018. Flare: Optimizing Apache Spark with Native Compilation for Scale-Up Architectures and Medium-Size Data. In 13th USENIX Symposium on Operating Systems Design and Implementation, OSDI 2018, Carlsbad, CA, USA, October 8-10, 2018., Andrea C. Arpaci-Dusseau and Geoff Voelker (Eds.). USENIX Association, 799–815. https://www.usenix.org/conference/osdi18/ presentation/essertelGoogle ScholarGoogle Scholar
  26. Mattias Felleisen and D. P. Friedman. 1987. A Calculus for Assignments in Higher-order Languages. In Proceedings of the 14th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL ’87). ACM, New York, NY, USA, 314–. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Cormac Flanagan, Amr Sabry, Bruce F. Duba, and Matthias Felleisen. 1993. The Essence of Compiling with Continuations. In Proceedings of the ACM SIGPLAN 1993 Conference on Programming Language Design and Implementation (PLDI ’93). ACM, New York, NY, USA, 237–247. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Yoshihiko Futamura. 1971. Partial evaluation of ccomputation process-an approach to a compiler-compiler. Systems, Compurters, Controls 25 (1971), 45–50.Google ScholarGoogle Scholar
  29. Yoshihiko Futamura. 1999. Partial Evaluation of Computation Process–An Approach to a Compiler-Compiler. Higher-Order and Symbolic Computation 12, 4 (01 Dec 1999), 381–391. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Roberto Giacobazzi, Francesco Logozzo, and Francesco Ranzato. 2015. Analyzing Program Analyses. In Proceedings of the 42Nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’15). ACM, New York, NY, USA, 261–273. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Thomas Gilray, Michael D. Adams, and Matthew Might. 2016a. Allocation characterizes polyvariance: a unified methodology for polyvariant control-flow analysis. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming, ICFP 2016, Nara, Japan, September 18-22, 2016, Jacques Garrigue, Gabriele Keller, and Eijiro Sumii (Eds.). ACM, 407–420. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Thomas Gilray, Steven Lyde, Michael D. Adams, Matthew Might, and David Van Horn. 2016b. Pushdown control-flow analysis for free. In Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2016, St. Petersburg, FL, USA, January 20 - 22, 2016, Rastislav Bodík and Rupak Majumdar (Eds.). ACM, 691–704. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Github, Inc. 2019. Semantic Analyzer. https://github.com/github/semantic .Google ScholarGoogle Scholar
  34. Sumit Gulwani, Saurabh Srivastava, and Ramarathnam Venkatesan. 2008. Program Analysis As Constraint Solving. In Proceedings of the 29th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’08). ACM, New York, NY, USA, 281–292. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Ben Hardekopf and Calvin Lin. 2011. Flow-sensitive pointer analysis for millions of lines of code. In Proceedings of the CGO 2011, The 9th International Symposium on Code Generation and Optimization, Chamonix, France, April 2-6, 2011. IEEE Computer Society, 289–298. Google ScholarGoogle ScholarCross RefCross Ref
  36. David Van Horn and Matthew Might. 2010. Abstracting abstract machines. In Proceeding of the 15th ACM SIGPLAN international conference on Functional programming, ICFP 2010, Baltimore, Maryland, USA, September 27-29, 2010, Paul Hudak and Stephanie Weirich (Eds.). ACM, 51–62. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. David Van Horn and Matthew Might. 2012. Systematic abstraction of abstract machines. J. Funct. Program. 22, 4-5 (2012), 705–746. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. J. Ian Johnson, Nicholas Labich, Matthew Might, and David Van Horn. 2013. Optimizing Abstract Abstract Machines. In Proceedings of the 18th ACM SIGPLAN International Conference on Functional Programming (ICFP ’13). ACM, New York, NY, USA, 443–454. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. Neil D. Jones. 1996. What not to do when writing an interpreter for specialisation. In Partial Evaluation, Olivier Danvy, Robert Glück, and Peter Thiemann (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 216–237.Google ScholarGoogle Scholar
  40. Neil D. Jones, Carsten K. Gomard, and Peter Sestoft. 1993. Partial evaluation and automatic program generation. Prentice Hall.Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Manohar Jonnalagedda, Thierry Coppey, Sandro Stucki, Tiark Rompf, and Martin Odersky. 2014. Staged parser combinators for efficient data processing. In Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications, OOPSLA 2014, part of SPLASH 2014, Portland, OR, USA, October 20-24, 2014, Andrew P. Black and Todd D. Millstein (Eds.). ACM, 637–653. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Herbert Jordan, Bernhard Scholz, and Pavle Subotić. 2016. Soufflé: On Synthesis of Program Analyzers. In Computer Aided Verification, Swarat Chaudhuri and Azadeh Farzan (Eds.). Springer International Publishing, Cham, 422–430.Google ScholarGoogle Scholar
  43. Sven Keidel, Casper Bach Poulsen, and Sebastian Erdweg. 2018. Compositional Soundness Proofs of Abstract Interpreters. Proc. ACM Program. Lang. 2, ICFP, Article 72 (July 2018), 26 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  44. Oleg Kiselyov. 2014. The Design and Implementation of BER MetaOCaml - System Description. In Functional and Logic Programming - 12th International Symposium, FLOPS 2014, Kanazawa, Japan, June 4-6, 2014. Proceedings (Lecture Notes in Computer Science), Michael Codish and Eijiro Sumii (Eds.), Vol. 8475. Springer, 86–102. Google ScholarGoogle ScholarCross RefCross Ref
  45. Oleg Kiselyov. 2018. Reconciling Abstraction with High Performance: A MetaOCaml approach. Foundations and Trends® in Programming Languages 5, 1 (2018), 1–101. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Oleg Kiselyov, Aggelos Biboudis, Nick Palladinos, and Yannis Smaragdakis. 2017. Stream fusion, to completeness. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18-20, 2017, Giuseppe Castagna and Andrew D. Gordon (Eds.). ACM, 285–299. http://dl.acm.org/citation.cfm? id=3009880Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. Sheng Liang, Paul Hudak, and Mark P. Jones. 1995. Monad Transformers and Modular Interpreters. In Conference Record of POPL’95: 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, San Francisco, California, USA, January 23-25, 1995, Ron K. Cytron and Peter Lee (Eds.). ACM Press, 333–343. Google ScholarGoogle ScholarDigital LibraryDigital Library
  48. Stefan Marr and Stéphane Ducasse. 2015. Tracing vs. Partial Evaluation: Comparing Meta-compilation Approaches for Self-optimizing Interpreters. In Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2015). ACM, New York, NY, USA, 821–839. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Jan Midtgaard. 2012. Control-flow Analysis of Functional Programs. ACM Comput. Surv. 44, 3, Article 10 (June 2012), 33 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Matthew Might and Olin Shivers. 2006. Improving Flow Analyses via Gamma-CFA: Abstract Garbage Collection and Counting. In Proceedings of the Eleventh ACM SIGPLAN International Conference on Functional Programming (ICFP ’06). ACM, New York, NY, USA, 13–25. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Eugenio Moggi. 1991. Notions of Computation and Monads. Inf. Comput. 93, 1 (1991), 55–92. Google ScholarGoogle ScholarDigital LibraryDigital Library
  52. Flemming Nielson. 1989. Two-level semantics and abstract interpretation. Theoretical Computer Science 69, 2 (1989), 117 – 242. Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. Flemming Nielson and Hanne Riis Nielson. 1988. Two-level semantics and code generation. Theoretical Computer Science 56, 1 (1988), 59 – 133. Google ScholarGoogle ScholarDigital LibraryDigital Library
  54. Flemming Nielson and Hanne Riis Nielson. 1992. Two-level Functional Languages. Cambridge University Press, New York, NY, USA.Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Georg Ofenbeck, Tiark Rompf, and Markus Püschel. 2017. Staging for Generic Programming in Space and Time. In Proceedings of the 16th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences (GPCE 2017). ACM, New York, NY, USA, 15–28. Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Erik Osheim. 2019. Kind Projector. https://github.com/non/kind-projector .Google ScholarGoogle Scholar
  57. John Reppy. 2006. Type-sensitive Control-flow Analysis. In Proceedings of the 2006 Workshop on ML (ML ’06). ACM, New York, NY, USA, 74–83. Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. Tiark Rompf. 2016. The Essence of Multi-stage Evaluation in LMS. In A List of Successes That Can Change the World - Essays Dedicated to Philip Wadler on the Occasion of His 60th Birthday (Lecture Notes in Computer Science), Sam Lindley, Conor McBride, Philip W. Trinder, and Donald Sannella (Eds.), Vol. 9600. Springer, 318–335. Google ScholarGoogle ScholarCross RefCross Ref
  59. Tiark Rompf and Nada Amin. 2015. Functional Pearl: A SQL to C Compiler in 500 Lines of Code. In Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming (ICFP 2015). ACM, New York, NY, USA, 2–9. Google ScholarGoogle ScholarDigital LibraryDigital Library
  60. Tiark Rompf and Martin Odersky. 2010. Lightweight modular staging: a pragmatic approach to runtime code generation and compiled DSLs. In Generative Programming And Component Engineering, Proceedings of the Ninth International Conference on Generative Programming and Component Engineering, GPCE 2010, Eindhoven, The Netherlands, October 10-13, 2010, Eelco Visser and Jaakko Järvi (Eds.). ACM, 127–136. Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Tiark Rompf, Arvind K. Sujeeth, Kevin J. Brown, HyoukJoong Lee, Hassan Chafi, and Kunle Olukotun. 2014. Surgical precision JIT compilers. In ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI ’14, Edinburgh, United Kingdom - June 09 - 11, 2014, Michael F. P. O’Boyle and Keshav Pingali (Eds.). ACM, 41–52. Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Mads Rosendahl. 2013. Abstract Interpretation as a Programming Language. Electronic Proceedings in Theoretical Computer Science 129 (2013), 84–104. Google ScholarGoogle ScholarCross RefCross Ref
  63. Ilya Sergey, Dominique Devriese, Matthew Might, Jan Midtgaard, David Darais, Dave Clarke, and Frank Piessens. 2013. Monadic Abstract Interpreters. In Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’13). ACM, New York, NY, USA, 399–410. Google ScholarGoogle ScholarDigital LibraryDigital Library
  64. Tim Sheard, Zine-El-Abidine Benaissa, and Emir Pasalic. 1999. DSL implementation using staging and monads. In Proceedings of the Second Conference on Domain-Specific Languages (DSL ’99), Austin, Texas, USA, October 3-5, 1999, Thomas Ball (Ed.). ACM, 81–94. Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. Tim Sheard and Simon Peyton Jones. 2002. Template Meta-programming for Haskell. SIGPLAN Not. 37, 12 (Dec. 2002), 60–75. Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. Olin Shivers. 1988. Control Flow Analysis in Scheme. In Proceedings of the ACM SIGPLAN 1988 Conference on Programming Language Design and Implementation (PLDI ’88). ACM, New York, NY, USA, 164–174. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. Olin Shivers. 1991. The Semantics of Scheme Control-flow Analysis. In Proceedings of the 1991 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-based Program Manipulation (PEPM ’91). ACM, New York, NY, USA, 190–198. Google ScholarGoogle ScholarDigital LibraryDigital Library
  68. Gagandeep Singh, Markus Püschel, and Martin Vechev. 2017a. A Practical Construction for Decomposing Numerical Abstract Domains. Proc. ACM Program. Lang. 2, POPL, Article 55 (Dec. 2017), 28 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  69. Gagandeep Singh, Markus Püschel, and Martin T. Vechev. 2017b. Fast polyhedra abstract domain. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18-20, 2017, Giuseppe Castagna and Andrew D. Gordon (Eds.). ACM, 46–59. http://dl.acm.org/citation.cfm?id=3009885Google ScholarGoogle ScholarDigital LibraryDigital Library
  70. Yannis Smaragdakis and George Balatsouras. 2015. Pointer Analysis. Found. Trends Program. Lang. 2, 1 (April 2015), 1–69. Google ScholarGoogle ScholarDigital LibraryDigital Library
  71. Arvind K. Sujeeth, Kevin J. Brown, HyoukJoong Lee, Tiark Rompf, Hassan Chafi, Martin Odersky, and Kunle Olukotun. 2014. Delite: A Compiler Architecture for Performance-Oriented Embedded Domain-Specific Languages. ACM Trans. Embedded Comput. Syst. 13, 4s (2014), 134:1–134:25. Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Arvind K. Sujeeth, Austin Gibbons, Kevin J. Brown, HyoukJoong Lee, Tiark Rompf, Martin Odersky, and Kunle Olukotun. 2013. Forge: generating a high performance DSL implementation from a declarative specification. In Generative Programming: Concepts and Experiences, GPCE’13, Indianapolis, IN, USA - October 27 - 28, 2013, Jaakko Järvi and Christian Kästner (Eds.). ACM, 145–154. Google ScholarGoogle ScholarDigital LibraryDigital Library
  73. Walid Taha. 1999. Multi-stage programming: Its theory and applications. Ph.D. Dissertation. Oregon Graduate Institute of Science and Technology.Google ScholarGoogle Scholar
  74. Walid Taha and Tim Sheard. 1997. Multi-Stage Programming with Explicit Annotations. In Proceedings of the ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation (PEPM ’97), Amsterdam, The Netherlands, June 12-13, 1997, John P. Gallagher, Charles Consel, and A. Michael Berman (Eds.). ACM, 203–217. Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. Ruby Y. Tahboub, Grégory M. Essertel, and Tiark Rompf. 2018. How to Architect a Query Compiler, Revisited. In Proceedings of the 2018 International Conference on Management of Data, SIGMOD Conference 2018, Houston, TX, USA, June 10-15, 2018, Gautam Das, Christopher M. Jermaine, and Philip A. Bernstein (Eds.). ACM, 307–322. Google ScholarGoogle ScholarDigital LibraryDigital Library
  76. John Toman and Dan Grossman. 2017. Taming the Static Analysis Beast. In 2nd Summit on Advances in Programming Languages (SNAPL 2017) (Leibniz International Proceedings in Informatics (LIPIcs)), Benjamin S. Lerner, Rastislav Bodík, and Shriram Krishnamurthi (Eds.), Vol. 71. Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik, Dagstuhl, Germany, 18:1–18:14. Google ScholarGoogle ScholarCross RefCross Ref
  77. David Van Horn and Harry G. Mairson. 2008. Deciding kCFA is Complete for EXPTIME. In Proceedings of the 13th ACM SIGPLAN International Conference on Functional Programming (ICFP ’08). ACM, New York, NY, USA, 275–282. Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. Dimitrios Vardoulakis and Olin Shivers. 2011. CFA2: a Context-Free Approach to Control-Flow Analysis. Logical Methods in Computer Science 7, 2 (2011). Google ScholarGoogle ScholarCross RefCross Ref
  79. Philip Wadler. 1992. The Essence of Functional Programming. In Proceedings of the 19th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’92). ACM, New York, NY, USA, 1–14. Google ScholarGoogle ScholarDigital LibraryDigital Library
  80. Guannan Wei, James Decker, and Tiark Rompf. 2018. Refunctionalization of Abstract Abstract Machines: Bridging the Gap Between Abstract Abstract Machines and Abstract Definitional Interpreters (Functional Pearl). Proc. ACM Program. Lang. 2, ICFP, Article 105 (July 2018), 28 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  81. Jeremy Yallop. 2017. Staged generic programming. PACMPL 1, ICFP (2017), 29:1–29:29. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Staged abstract interpreters: fast and modular whole-program analysis via meta-programming

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader