Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Matthew Might

dblp:57/2128 · also Matt Might · DBLP profile ↗
← Back
42ranked-venue papers
12as first author
0since 2021 · last 2020
0000-0002-8430-5316ORCID · corroborated

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 38 · 11 first-authorApplied, interdisciplinary, general and emerging computing · 2Artificial intelligence and machine learning · 1Theory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
11 papers
Program analysis · 68% Programming languages and type systems · 19% Program synthesis and code generation · 9%
Theoretical computer science
3 papers
Automata and formal languages · 77% Logic in computer science · 19% Computational complexity · 4%
Interdisciplinary, comprehensive, and emerging computing
1 paper
Bioinformatics and computational biology · 100%

Topics — the 27 heaviest of 30, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
control flow analysis
1.062017
A posteriori environment analysis with Pushdown Delta CFA · POPL 2017
Pushdown control-flow analysis for free · POPL 2016
EigenCFA: accelerating flow analysis with GPUs · POPL 2011
Program analysis › static analysis
abstract interpretation
0.532015
Galois transformers and modular abstract interpreters: reusable metatheory for program analysis · OOPSLA 2015
Monadic abstract interpreters · PLDI 2013
Logic-flow analysis of higher-order programs · POPL 2007
Program analysis
static analysis
0.422015
Galois transformers and modular abstract interpreters: reusable metatheory for program analysis · OOPSLA 2015
Monadic abstract interpreters · PLDI 2013
Bioinformatics and computational biology
gene expression analysis
0.312018
anexVis: visual analytics framework for analysis of RNA expression · Bioinform. 2018
Program synthesis and code generation
programming by example
0.312018
Neural Guided Constraint Logic Programming for Program Synthesis · NeurIPS 2018
Logic in computer science › logic programming
constraint logic programming
0.312018
Neural Guided Constraint Logic Programming for Program Synthesis · NeurIPS 2018
Automata and formal languages › parsing
ambiguity resolution
0.312017
Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017
Automata and formal languages › formal grammars
context-free grammar
0.312017
Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017
Automata and formal languages
tree automata
0.312017
Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017
Automata and formal languages › parsing
context-free grammar parsing
0.212016
On the complexity and performance of parsing with derivatives · PLDI 2016
Automata and formal languages › parsing › context-free grammar parsing
parsing with derivatives
0.212016
On the complexity and performance of parsing with derivatives · PLDI 2016
Program analysis › control flow analysis
k-CFA
0.222010
Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis · PLDI 2010
Environment analysis via Delta CFA · POPL 2006
Programming languages and type systems › computational effects
monads
0.212013
Monadic abstract interpreters · PLDI 2013
Program analysis › flow analysis
higher-order flow analysis
0.112011
EigenCFA: accelerating flow analysis with GPUs · POPL 2011
Programming languages and type systems
type inference
0.112011
Flow-sensitive type recovery in linear-log time · OOPSLA 2011
Programming languages and type systems › program manipulation
continuation-passing style
0.132016
Pushdown control-flow analysis for free · POPL 2016
Environment analysis via Delta CFA · POPL 2006
Continuations and transducer composition · PLDI 2006
Program analysis › static analysis › interprocedural analysis
context-sensitive analysis
0.112010
Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis · PLDI 2010
Program analysis › static analysis
pointer analysis
0.112010
Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis · PLDI 2010
Programming languages and type systems
higher-order languages
0.112016
Pushdown control-flow analysis for free · POPL 2016
Computational complexity › language complexity
parsing complexity
0.112016
On the complexity and performance of parsing with derivatives · PLDI 2016
Compilers and program optimization › compiler optimization › redundancy elimination
array bounds check elimination
0.112007
Logic-flow analysis of higher-order programs · POPL 2007
Programming languages and type systems › computational effects
monad transformers
0.112015
Galois transformers and modular abstract interpreters: reusable metatheory for program analysis · OOPSLA 2015
Program analysis › static analysis › pointer analysis
context-sensitive pointer analysis
0.012013
Monadic abstract interpreters · PLDI 2013
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.012011
Flow-sensitive type recovery in linear-log time · OOPSLA 2011
GPUs and heterogeneous computing
GPU computing
0.012011
EigenCFA: accelerating flow analysis with GPUs · POPL 2011
Program verification
theorem proving
0.012007
Logic-flow analysis of higher-order programs · POPL 2007
Programming languages and type systems › control operators
continuations
0.012006
Continuations and transducer composition · PLDI 2006

Methods — techniques the papers use, named apart from their topics

recurrent neural network · 0.7graph neural network · 0.7abstract interpretation · 0.5visualization techniques · 0.3visual analytics · 0.3tree automata intersection · 0.3state-dependent allocation · 0.2performance evaluation · 0.2complexity analysis · 0.2PDCFA · 0.2CFA2 · 0.2AAC · 0.2monad transformers · 0.2galois connection · 0.2monadic semantics · 0.2GPU acceleration · 0.10CFA · 0.1
YearPublicationVenuePosition
2020 Cardioinformatics: the nexus of bioinformatics and precision cardiology
abstract
Cardiovascular disease (CVD) is the leading cause of death worldwide, causing over 17 million deaths per year, which outpaces global cancer mortality rates. Despite these sobering statistics, most bioinformatics and computational biology research and funding to date has been concentrated predominantly on cancer research, with a relatively modest footprint in CVD. In this paper, we review the existing literary landscape and critically assess the unmet need to further develop an emerging field at the multidisciplinary interface of bioinformatics and precision cardiovascular medicine, which we refer to as 'cardioinformatics'.
Bohdan B. Khomtchouk, Diem-Trang T. Tran, Kasra A. Vand, Matthew Might, Or Gozani, Themistocles L. Assimes
Briefings Bioinform.4
2019 Demand Control-Flow Analysis
Kimball Germane, Jay McCarthy, Michael D. Adams 0001, Matthew Might
VMCAI4
2019 Relatively Complete Pushdown Analysis of Escape Continuations
Kimball Germane, Matthew Might
VMCAI2
2018 Neural Guided Constraint Logic Programming for Program Synthesis
abstract
Synthesizing programs using example input/outputs is a classic problem in artificial intelligence. We present a method for solving Programming By Example (PBE) problems by using a neural model to guide the search of a constraint logic programming system called miniKanren. Crucially, the neural model uses miniKanren's internal representation as input; miniKanren represents a PBE problem as recursive constraints imposed by the provided examples. We explore Recurrent Neural Network and Graph Neural Network models. We contribute a modified miniKanren, drivable by an external agent, available at https://github.com/xuexue/neuralkanren. We show that our neural-guided approach using constraints can synthesize programs faster in many cases, and importantly, can generalize to larger problems.
Lisa Zhang 0003, Gregory Rosenblatt, Ethan Fetaya, Renjie Liao 0001, William E. Byrd, Matthew Might, Raquel Urtasun, Richard S. Zemel
NeurIPS6
2018 anexVis: visual analytics framework for analysis of RNA expression
abstract
Summary: Although RNA expression data are accumulating at a remarkable speed, gaining insights from them still requires laborious analyses, which hinder many biological and biomedical researchers. This report introduces a visual analytics framework that applies several well-known visualization techniques to leverage understanding of an RNA expression dataset. Our analyses on glycosaminoglycan-related genes have demonstrated the broad application of this tool, anexVis (analysis of RNA expression), to advance the understanding of tissue-specific glycosaminoglycan regulation and functions, and potentially other biological pathways. Availability and implementation: The application is accessible at https://anexvis.chpc.utah.edu/, source codes deposited on GitHub. Supplementary information: Supplementary data are available at Bioinformatics online.
Diem-Trang T. Tran, Tian Zhang 0005, Ryan Stutsman, Matthew Might, Umesh R. Desai, Balagurunathan Kuberan
Bioinform.4
2018 Abstract allocation as a unified approach to polyvariance in control-flow analyses
abstract
Abstract In higher order settings, control-flow analysis aims to model the propagation of both data and control by finitely approximating program behaviors across all possible executions. The polyvariance of an analysis describes the number of distinct abstract representations, or variants, for each syntactic entity (e.g., functions, variables, or intermediate expressions). Monovariance, one of the most basic forms of polyvariance, maintains only a single abstract representation for each variable or expression. Other polyvariant strategies allow a greater number of distinct abstractions and increase analysis complexity with the aim of increasing analysis precision. For example, k -call sensitivity distinguishes flows by the most recent k call sites, k -object sensitivity by a history of allocation points, and argument sensitivity by a tuple of dynamic argument types. From this perspective, even a concrete operational semantics may be thought of as an unboundedly polyvariant analysis. In this paper, we develop a unified methodology that fully captures this design space. It is easily tunable and guarantees soundness regardless of how tuned. We accomplish this by extending the method of abstracting abstract machines, a systematic approach to abstract interpretation of operational abstract-machine semantics. Our approach permits arbitrary instrumentation of the underlying analysis and arbitrary tuning of an abstract-allocation function. We show that the design space of abstract allocators both unifies and generalizes existing notions of polyvariance. Simple changes to the behavior of this function recapitulate classic styles of analysis and yield novel combinations and variants.
Thomas Gilray, Michael D. Adams 0001, Matthew Might
J. Funct. Program.3
2017 A posteriori environment analysis with Pushdown Delta CFA
abstract
Flow-driven higher-order inlining is blocked by free variables, yet current theories of environment analysis cannot reliably cope with multiply-bound variables. One of these, ΔCFA, is a promising theory based on stack change but is undermined by its finite-state model of the stack. We present Pushdown ΔCFA which takes a ΔCFA-approach to pushdown models of control flow and can cope with multiply-bound variables, even in the face of recursion.
Kimball Germane, Matthew Might
POPL2
2017 Nebo: An efficient, parallel, and portable domain-specific language for numerically solving partial differential equations
Christopher Earl, Matthew Might, Abhishek Bagusetty, James C. Sutherland
J. Syst. Softw.2
2017 Restricting grammars with tree automata
abstract
Precedence and associativity declarations in systems like yacc resolve ambiguities in context-free grammars (CFGs) by specifying restrictions on allowed parses. However, they are special purpose and do not handle the grammatical restrictions that language designers need in order to resolve ambiguities like dangling else, the interactions between binary operators and functional if expressions in ML, and the interactions between object allocation and function calls in JavaScript. Often, language designers resort to restructuring their grammars in order to encode these restrictions, but this obfuscates the designer's intent and can make grammars more difficult to read, write, and maintain. In this paper, we show how tree automata can modularly and concisely encode such restrictions. We do this by reinterpreting CFGs as tree automata and then intersecting them with tree automata encoding the desired restrictions. The results are then reinterpreted back into CFGs that encode the specified restrictions. This process can be used as a preprocessing step before other CFG manipulations and is well behaved. It performs well in practice and never introduces ambiguities or LR( k ) conflicts.
Michael D. Adams 0001, Matthew Might
Proc. ACM Program. Lang.2
2017 A unified approach to solving seven programming problems (functional pearl)
abstract
We present seven programming challenges in Racket, and an elegant, unified approach to solving them using constraint logic programming in miniKanren.
William E. Byrd, A. Ballantyne, Gregory Rosenblatt, Matthew Might
Proc. ACM Program. Lang.4
2016 A small embedding of logic programming with a simple complete search
abstract
We present a straightforward, call-by-value embedding of a small logic programming language with a simple complete search. We construct the entire language in 54 lines of Racket---half of which implement unification. We then layer over it, in 43 lines, a reconstruction of an existing logic programming language, miniKanren, and attest to our implementation's pedagogical value. Evidence suggests our combination of expressiveness, concision, and elegance is compelling: since microKanren's release, it has spawned over 50 embeddings in over two dozen host languages, including Go, Haskell, Prolog and Smalltalk.
Jason Hemann, Daniel P. Friedman, William E. Byrd, Matthew Might
DLS4
2016 Allocation characterizes polyvariance: a unified methodology for polyvariant control-flow analysis
abstract
The polyvariance of a static analysis is the degree to which it structurally differentiates approximations of program values. Polyvariant techniques come in a number of different flavors that represent alternative heuristics for managing the trade-off an analysis strikes between precision and complexity. For example, call sensitivity supposes that values will tend to correlate with recent call sites, object sensitivity supposes that values will correlate with the allocation points of related objects, the Cartesian product algorithm supposes correlations between the values of arguments to the same function, and so forth.
Thomas Gilray, Michael D. Adams 0001, Matthew Might
ICFP3
2016 On the complexity and performance of parsing with derivatives
abstract
Current algorithms for context-free parsing inflict a trade-off between ease of understanding, ease of implementation, theoretical complexity, and practical performance. No algorithm achieves all of these properties simultaneously. Might et al. introduced parsing with derivatives, which handles arbitrary context-free grammars while being both easy to understand and simple to implement. Despite much initial enthusiasm and a multitude of independent implementations, its worst-case complexity has never been proven to be better than exponential. In fact, high-level arguments claiming it is fundamentally exponential have been advanced and even accepted as part of the folklore. Performance ended up being sluggish in practice, and this sluggishness was taken as informal evidence of exponentiality. In this paper, we reexamine the performance of parsing with derivatives. We have discovered that it is not exponential but, in fact, cubic. Moreover, simple (though perhaps not obvious) modifications to the implementation by Might et al. lead to an implementation that is not only easy to understand but also highly performant in practice.
Michael D. Adams 0001, Celeste Hollenbeck, Matthew Might
PLDI3
2016 Pushdown control-flow analysis for free
abstract
Traditional control-flow analysis (CFA) for higher-order languages introduces spurious connections between callers and callees, and different invocations of a function may pollute each other's return flows. Recently, three distinct approaches have been published that provide perfect call-stack precision in a computable manner: CFA2, PDCFA, and AAC. Unfortunately, implementing CFA2 and PDCFA requires significant engineering effort. Furthermore, all three are computationally expensive. For a monovariant analysis, CFA2 is in O(2^n), PDCFA is in O(n^6), and AAC is in O(n^8). In this paper, we describe a new technique that builds on these but is both straightforward to implement and computationally inexpensive. The crucial insight is an unusual state-dependent allocation strategy for the addresses of continuations. Our technique imposes only a constant-factor overhead on the underlying analysis and costs only O(n^3) in the monovariant case. We present the intuitions behind this development, benchmarks demonstrating its efficacy, and a proof of the precision of this analysis.
Thomas Gilray, Steven Lyde, Michael D. Adams 0001, Matthew Might, David Van Horn
POPL4
2015 Control-flow analysis of dynamic languages via pointer analysis
abstract
We demonstrate how to map a control-flow analysis for a higher-order language (dynamic languages are typically higher-order) into a pointer analysis for a first-order language, such as C. This allows us to use existing pointer analysis tools to perform a control-flow analysis, exploiting their technical advancements and the engineering effort that went into developing them. We compare the results of two recent parallel pointer analysis tools with a parallel control-flow analysis tool. While it has been known that a control-flow analysis of higher-order languages and a pointer analysis of first-order languages are very similar, we demonstrate that these two analyses are actually more similar than previously thought. We present the first mapping between a high-order control-flow analysis and a pointer analysis.
Steven Lyde, William E. Byrd, Matthew Might
DLS3
2015 Galois transformers and modular abstract interpreters: reusable metatheory for program analysis
abstract
The design and implementation of static analyzers has become increasingly systematic. Yet for a given language or analysis feature, it often requires tedious and error prone work to implement an analyzer and prove it sound. In short, static analysis features and their proofs of soundness do not compose well, causing a dearth of reuse in both implementation and metatheory. We solve the problem of systematically constructing static analyzers by introducing Galois transformers: monad transformers that transport Galois connection properties. In concert with a monadic interpreter, we define a library of monad transformers that implement building blocks for classic analysis parameters like context, path, and heap (in)sensitivity. Moreover, these can be composed together independent of the language being analyzed. Significantly, a Galois transformer can be proved sound once and for all, making it a reusable analysis component. As new analysis features and abstractions are developed and mixed in, soundness proofs need not be reconstructed, as the composition of a monad transformer stack is sound by virtue of its constituents. Galois transformers provide a viable foundation for reusable and composable metatheory for program analysis. Finally, these Galois transformers shift the level of abstraction in analysis design and implementation to a level where non-specialists have the ability to synthesize sound analyzers over a number of parameters.
David Darais, Matthew Might, David Van Horn
OOPSLA2
2015 Static Analysis of Non-interference in Expressive Low-Level Languages
Peter Aldous, Matthew Might
SAS2
2014 Fast Flow Analysis with Godel Hashes
abstract
Flow analysis, such as control-flow, data-flow, and exception-flow analysis, usually depends on relational operations on flow sets. Unfortunately, set related operations, such as inclusion and equality, are usually very expensive. They can easily take more than 97% of the total analyzing time, even in a very simple analysis. We attack this performance bottleneck by proposing Godel hashes to enable fast and precise flow analysis. Godel hashes is an ultra compact, partial-order-preserving, fast and perfect hashing mechanism, inspired by the proofs of Godel's incompleteness theorems. Compared with array, tree, traditional hash, and bit vector-backed set implementations, we find Godel hashes to be tens or even hundreds of times faster for performance in the critical operations of inclusion and equality. We apply Godel hashes in real-world analysis for object-oriented programs. The instrumented analysis is tens of times faster than the one with original data structures on DaCapo benchmarks.
Shuying Liang, Weibin Sun, Matthew Might
SCAM3
2014 Pruning, Pushdown Exception-Flow Analysis
abstract
Statically reasoning in the presence of exceptions and about the effects of exceptions is challenging: exception-flows are mutually determined by traditional control-flow and points-to analyses. We tackle the challenge of analyzing exception-flows from two angles. First, from the angle of pruning control-flows (both normal and exceptional), we derive a pushdown framework for an object-oriented language with full-featured exceptions. Unlike traditional analyses, it allows precise matching of throwers to catchers. Second, from the angle of pruning points-to information, we generalize abstract garbage collection to object-oriented programs and enhance it with liveness analysis. We then seamlessly weave the techniques into enhanced reach ability computation, yielding highly precise exception-flow analysis, without becoming intractable, even for large applications. We evaluate our pruned, pushdown exception-flow analysis, comparing it with an established analysis on large scale standard Java benchmarks. The results show that our analysis significantly improves analysis precision over traditional analysis within a reasonable analysis time.
Shuying Liang, Weibin Sun, Matthew Might, Andrew W. Keep, David Van Horn
SCAM3
2014 Deletion: The curse of the red-black tree
abstract
Abstract Okasaki introduced the canonical formulation of functional red-black trees when he gave a concise, elegant method of persistent element insertion. Persistent element deletion, on the other hand, has not enjoyed the same treatment. For this reason, many functional implementations simply omit persistent deletion. Those that include deletion typically take one of two approaches. The more-common approach is a superficial translation of the standard imperative algorithm. The resulting algorithm has functional airs but remains clumsy and verbose, characteristic of its imperative heritage. (Indeed, even the term insertion is a holdover from imperative origins, but is now established in functional contexts. Accordingly, we use the term deletion which has the same connotation.) The less-common approach leverages the features of advanced type systems, which obscures the essence of the algorithm. Nevertheless, foreign-language implementors reference such implementations and, apparently unable to tease apart the algorithm and its type specification, transliterate the entirety unnecessarily. Our goal is to provide for persistent deletion what Okasaki did for insertion: a succinct, comprehensible method that will liberate implementors. We conceptually simplify deletion by temporarily introducing a “double-black” color into Okasaki's tree type. This third color, with its natural interpretation, significantly simplifies the preservation of invariants during deletion.
Kimball Germane, Matthew Might
J. Funct. Program.2
2014 Pushdown flow analysis with abstract garbage collection
abstract
Abstract In the static analysis of functional programs, pushdown flow analysis and abstract garbage collection push the boundaries of what we can learn about programs statically. This work illuminates and poses solutions to theoretical and practical challenges that stand in the way of combining the power of these techniques. Pushdown flow analysis grants unbounded yet computable polyvariance to the analysis of return-flow in higher-order programs. Abstract garbage collection grants unbounded polyvariance to abstract addresses which become unreachable between invocations of the abstract contexts in which they were created. Pushdown analysis solves the problem of precisely analyzing recursion in higher-order languages; abstract garbage collection is essential in solving the “stickiness” problem. Alone, our benchmarks demonstrate that each method can reduce analysis times and boost precision by orders of magnitude. We combine these methods. The challenge in marrying these techniques is not subtle: computing the reachable control states of a pushdown system relies on limiting access during transition to the top of the stack; abstract garbage collection, on the other hand, needs full access to the entire stack to compute a root set, just as concrete collection does. Conditional pushdown systems were developed for just such a conundrum, but existing methods are ill-suited for the dynamic nature of garbage collection. We show fully precise and approximate solutions to the feasible paths problem for pushdown garbage-collecting control-flow analysis. Experiments reveal synergistic interplay between garbage collection and pushdown techniques, and the fusion demonstrates “better-than-both-worlds” precision.
Dionna Amalie Glaze, Ilya Sergey, Christopher Earl, Matthew Might, David Van Horn
J. Funct. Program.4
2013 Optimizing abstract abstract machines
abstract
The technique of abstracting abstract machines (AAM) provides a systematic approach for deriving computable approximations of evaluators that are easily proved sound. This article contributes a complementary step-by-step process for subsequently going from a naive analyzer derived under the AAM approach, to an efficient and correct implementation. The end result of the process is a two to three order-of-magnitude improvement over the systematically derived analyzer, making it competitive with hand-optimized implementations that compute fundamentally less precise results.
Dionna Amalie Glaze, Nicholas Labich, Matthew Might, David Van Horn
ICFP3
2013 Monadic abstract interpreters
abstract
Recent developments in the systematic construction of abstract interpreters hinted at the possibility of a broad unification of concepts in static analysis. We deliver that unification by showing context-sensitivity, polyvariance, flow-sensitivity, reachability-pruning, heap-cloning and cardinality-bounding to be independent of any particular semantics. Monads become the unifying agent between these concepts and between semantics. For instance, by plugging the same "context-insensitivity monad" into a monadically-parameterized semantics for Java or for the lambda calculus, it yields the expected context-insensitive analysis.
Ilya Sergey, Dominique Devriese, Matthew Might, Jan Midtgaard, David Darais, Dave Clarke 0001, Frank Piessens
PLDI3
2012 Introspective pushdown analysis of higher-order programs
abstract
In the static analysis of functional programs, pushdown flow analysis and abstract garbage collection skirt just inside the boundaries of soundness and decidability. Alone, each method reduces analysis times and boosts precision by orders of magnitude. This work illuminates and conquers the theoretical challenges that stand in the way of combining the power of these techniques. The challenge in marrying these techniques is not subtle: computing the reachable control states of a pushdown system relies on limiting access during transition to the top of the stack; abstract garbage collection, on the other hand, needs full access to the entire stack to compute a root set, just as concrete collection does. Introspective pushdown systems resolve this conflict. Introspective pushdown systems provide enough access to the stack to allow abstract garbage collection, but they remain restricted enough to compute control-state reachability, thereby enabling the sound and precise product of pushdown analysis and abstract garbage collection. Experiments reveal synergistic interplay between the techniques, and the fusion demonstrates "better-than-both-worlds" precision.
Christopher Earl, Ilya Sergey, Matthew Might, David Van Horn
ICFP3
2012 A Structural Soundness Proof for Shivers's Escape Technique - A Case for Galois Connections
Jan Midtgaard, Michael D. Adams 0001, Matthew Might
SAS3
2012 Systematic abstraction of abstract machines
abstract
Abstract We describe a derivational approach to abstract interpretation that yields novel and transparently sound static analyses when applied to well-established abstract machines for higher-order and imperative programming languages. To demonstrate the technique and support our claim, we transform the CEK machine of Felleisen and Friedman ( Proc. of the 14th ACM SIGACT-SIGPLAN Symp. Prin. Program. Langs , 1987, pp. 314–325), a lazy variant of Krivine's machine ( Higher-Order Symb. Comput. Vol 20, 2007, pp. 199–207), and the stack-inspecting CM machine of Clements and Felleisen ( ACM Trans. Program. Lang. Syst. Vol 26, 2004, pp. 1029–1052) into abstract interpretations of themselves. The resulting analyses bound temporal ordering of program events; predict return-flow and stack-inspection behavior; and approximate the flow and evaluation of by-need parameters. For all of these machines, we find that a series of well-known concrete machine refactorings, plus a technique of store-allocated continuations, leads to machines that abstract into static analyses simply by bounding their stores. These machines are parameterized by allocation functions that tune performance and precision and substantially expand the space of analyses that this framework can represent. We demonstrate that the technique scales up uniformly to allow static analysis of realistic language features, including tail calls, conditionals, mutation, exceptions, first-class continuations, and even garbage collection. In order to close the gap between formalism and implementation, we provide translations of the mathematics as running Haskell code for the initial development of our method.
David Van Horn, Matthew Might
J. Funct. Program.2
2011 Parsing with derivatives: a functional pearl
abstract
We present a functional approach to parsing unrestricted context-free grammars based on Brzozowski's derivative of regular expressions. If we consider context-free grammars as recursive regular expressions, Brzozowski's equational theory extends without modification to context-free grammars (and it generalizes to parser combinators). The supporting actors in this story are three concepts familiar to functional programmers - laziness, memoization and fixed points; these allow Brzozowski's original equations to be transliterated into purely functional code in about 30 lines spread over three functions.
Matthew Might, David Darais, Daniel Spiewak
ICFP1
2011 Flow-sensitive type recovery in linear-log time
abstract
The flexibility of dynamically typed languages such as JavaScript, Python, Ruby, and Scheme comes at the cost of run-time type checks. Some of these checks can be eliminated via control-flow analysis. However, traditional control-flow analysis (CFA) is not ideal for this task as it ignores flow-sensitive information that can be gained from dynamic type predicates, such as JavaScript's 'instanceof' and Scheme's 'pair?', and from type-restricted operators, such as Scheme's 'car'. Yet, adding flow-sensitivity to a traditional CFA worsens the already significant compile-time cost of traditional CFA. This makes it unsuitable for use in just-in-time compilers. In response, we have developed a fast, flow-sensitive type-recovery algorithm based on the linear-time, flow-insensitive sub-0CFA. The algorithm has been implemented as an experimental optimization for the commercial Chez Scheme compiler, where it has proven to be effective, justifying the elimination of about 60% of run-time type checks in a large set of benchmarks. The algorithm processes on average over 100,000 lines of code per second and scales well asymptotically, running in only O(n log n) time. We achieve this compile-time performance and scalability through a novel combination of data structures and algorithms.
Michael D. Adams 0001, Andrew W. Keep, Jan Midtgaard, Matthew Might, Arun Chauhan 0001, R. Kent Dybvig
OOPSLA4
2011 EigenCFA: accelerating flow analysis with GPUs
abstract
We describe, implement and benchmark EigenCFA, an algorithm for accelerating higher-order control-flow analysis (specifically, 0CFA) with a GPU. Ultimately, our program transformations, reductions and optimizations achieve a factor of 72 speedup over an optimized CPU implementation.
Tarun Prabhu, Shreyas Ramalingam, Matthew Might, Mary W. Hall
POPL3
2011 A Family of Abstract Interpretations for Static Analysis of Concurrent Higher-Order Programs
Matthew Might, David Van Horn
SAS1
2010 Abstracting abstract machines
abstract
We describe a derivational approach to abstract interpretation that yields novel and transparently sound static analyses when applied to well-established abstract machines. To demonstrate the technique and support our claim, we transform the CEK machine of Felleisen and Friedman, a lazy variant of Krivine's machine, and the stack-inspecting CM machine of Clements and Felleisen into abstract interpretations of themselves. The resulting analyses bound temporal ordering of program events; predict return-flow and stack-inspection behavior; and approximate the flow and evaluation of by-need parameters. For all of these machines, we find that a series of well-known concrete machine refactorings, plus a technique we call store-allocated continuations, leads to machines that abstract into static analyses simply by bounding their stores. We demonstrate that the technique 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.
David Van Horn, Matthew Might
ICFP2
2010 Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis
abstract
Low-level program analysis is a fundamental problem, taking the shape of "flow analysis" in functional languages and "points-to" analysis in imperative and object-oriented languages. Despite the similarities, the vocabulary and results in the two communities remain largely distinct, with limited cross-understanding. One of the few links is Shivers's k-CFA work, which has advanced the concept of "context-sensitive analysis" and is widely known in both communities.
Matthew Might, Yannis Smaragdakis, David Van Horn
PLDI1
2010 Abstract Interpreters for Free
Matthew Might
SAS1
2010 Shape Analysis in the Absence of Pointers and Structure
Matthew Might
VMCAI1
2009 A PosterioriSoundness for Non-deterministic Abstract Interpretations
Matthew Might, Panagiotis Manolios
VMCAI1
2008 Exploiting reachability and cardinality in higher-order flow analysis
abstract
Abstract 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.
Matthew Might, Olin Shivers
J. Funct. Program.1
2007 Logic-flow analysis of higher-order programs
abstract
This work presents a framework for fusing flow analysis and theorem proving called logic-flow analysis (LFA). The framework itself is the reduced product of two abstract interpretations: (1) an abstract state machine and (2) a set of propositions in a restricted first-order logic. The motivating application for LFA is the safe removal of implicit array-bounds checks without type information, user interaction or program annotation. LFA achieves this by delegating a given task to either the prover or the flow analysis depending on which is best suited to discharge it. Described within are a concrete semantics for continuation-passing style; a restricted, first-order logic; a woven product of two abstract interpretations; proofs of correctness; and a worked example.
Matthew Might
POPL1
2007 Model Checking Via GammaCFA
Matthew Might, Benjamin Chambers, Olin Shivers
VMCAI1
2007 Analyzing the environment structure of higher-order languages using frame strings
Matthew Might, Olin Shivers
Theor. Comput. Sci.1
2006 Improving flow analyses via GammaCFA: abstract garbage collection and counting
abstract
We present two independent and complementary improvements for flow-based analysis of higher-order languages: (1) abstract garbage collection and (2) abstract counting, collectively titled ΓCFA.Abstract garbage collection is an analog to its concrete counterpart: we determine when an abstract resource has become unreachable, and then reallocate it as fresh. This prevents flow sets from merging in the abstract, which has two immediate effects: (1) the precision of the analysis is increased, and (2) the running time of the analysis is frequently reduced. In some nontrivial cases, we achieve an order of magnitude improvement in precision and time simultaneously.In abstract counting, we track 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, in turn, allows us to perform environment analysis and to expand the kinds (rather than just the degree) of optimizations available to the compiler.
Matthew Might, Olin Shivers
ICFP1
2006 Continuations and transducer composition
abstract
On-line transducers are an important class of computational agent; we construct and compose together many software systems using them, such as stream processors, layered network protocols, DSP networks and graphics pipelines. We show an interesting use of continuations, that, when taken in a CPS setting, exposes the control flow of these systems. This enables a CPS-based compiler to optimise systems composed of these transducers, using only standard, known analyses and optimisations. Critically, the analysis permits optimisation across the composition of these transducers, allowing efficient construction of systems in a hierarchical way.
Olin Shivers, Matthew Might
PLDI2
2006 Environment analysis via Delta CFA
abstract
We describe a new program-analysis framework, based on CPS and procedure-string abstractions, that can handle critical analyses which the k-CFA framework cannot. We present the main theorems concerning correctness, show an application analysis, and describe a running implementation.
Matthew Might, Olin Shivers
POPL1