Corpus ID: 236447567

So You Want to Analyze Scheme Programs With Datalog?

  title={So You Want to Analyze Scheme Programs With Datalog?},
  author={Davis Ross Silverman and Yihao Sun and Kristopher K. Micinski and Thomas Gilray},
Static analysis approximates the results of a program by examining only its syntax. For example, controlflow analysis (CFA) determines which syntactic lambdas (for functional languages) or (for object-oriented) methods may be invoked at each call site within a program. Rich theoretical results exist studying control flow analysis for Scheme-like languages, but implementations are often complex and specialized. By contrast, object-oriented languages (Java in particular) enjoy high-precision… Expand

Tables from this paper


Strictly declarative specification of sophisticated points-to analyses
The DOOP framework for points-to analysis of Java programs is presented, carrying the declarative approach further than past work by describing the full end-to-end analysis in Datalog and optimizing aggressively using a novel technique specifically targeting highly recursive Datalogy programs. Expand
Control-flow analysis of higher-order languages of taming lambda
This dissertation presents a technique for recovering the control-flow graph of a Scheme program at compile time, and gives examples of how this information can be used to perform several data-flow analysis optimisations, including copy propagation, induction- variable elimination, useless-variable elimination, and type recovery. Expand
On fast large-scale program analysis in Datalog
This work introduces a new program synthesis methodology for Datalog specifications to produce highly efficient monolithic C++ analyzers and demonstrates its competitiveness with state-of-the-art handcrafted tools. Expand
Pushdown control-flow analysis for free
A new technique is described that builds on CFA2, PDCFA, and AAC but is both straightforward to implement and computationally inexpensive and imposes only a constant-factor overhead on the underlying analysis and costs only O(n^3) in the monovariant case. Expand
Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis
It is shown that the exact same specification of k-CFA is polynomial-time for object-oriented languages yet exponential- time for functional ones: objects and closures are subtly different, in a way that interacts crucially with context-sensitivity and complexity. Expand
Allocation characterizes polyvariance: a unified methodology for polyvariant control-flow analysis
A unified methodology for implementing and understanding polyvariance in a higher-order setting (i.e., for control-flow analyses) is described by extending the method of abstracting abstract machines (AAM), a systematic approach to producing an abstract interpretation of abstract-machine semantics. Expand
Tutorial on Static Inference of Numeric Invariants by Abstract Interpretation
This tutorial presents Abstract Interpretation and its use to create static analyzers that infer numeric invariants on programs, and the principles and algorithms presented are effectively used in analyzers for real industrial programs, although this is out of the scope of this tutorial. Expand
Abstracting abstract machines
It is demonstrated that the derivational approach to abstract interpretation that yields novel and transparently sound static analyses when applied to well-established abstract machines scales up uniformly to allow static analysis of realistic language features, including tail calls, conditionals, side effects, exceptions, first-class continuations, and even garbage collection. Expand
Principles of Program Analysis
This book is unique in providing an overview of the four major approaches to program analysis: data flow analysis, constraint-based analysis, abstract interpretation, and type and effect systems. Expand
Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints
A program denotes computations in some universe of objects. Abstract interpretation of programs consists in using that denotation to describe computations in another universe of abstract objects, soExpand