Demo Data from SIGIR 2026 / reviewers in the wild / expert
Michael D. Adams 0001
dblp:37/3316-1
· DBLP profile ↗
20ranked-venue papers
11as first author
1since 2021 · last 2025
0000-0003-3160-6972ORCID · conflict
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 19 · 11 first-author · 1 since 2021Systems, architecture and hardware · 1
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
5 papers |
Programming languages and type systems · 86% Program analysis · 9% Compilers and program optimization · 4% | |
| Theoretical computer science
2 papers |
Automata and formal languages · 95% Computational complexity · 5% | |
| Computer architecture, parallel and distributed computing, and storage systems
1 paper |
Distributed systems · 100% |
Topics — the 18 heaviest of 19, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › type checking
bidirectional type checking |
0.9 | 1 | 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor Calculus · Proc. ACM Program. Lang. 2025 |
Programming languages and type systems › programming environment
structure editors |
0.9 | 1 | 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor Calculus · Proc. ACM Program. Lang. 2025 |
Programming languages and type systems
type systems |
0.9 | 1 | 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor Calculus · Proc. ACM Program. Lang. 2025 |
Program analysis
control flow analysis |
0.4 | 2 | 2016 | Pushdown control-flow analysis for free · POPL 2016 Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Automata and formal languages › parsing
ambiguity resolution |
0.3 | 1 | 2017 | Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017 |
Automata and formal languages › formal grammars
context-free grammar |
0.3 | 1 | 2017 | Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017 |
Automata and formal languages
tree automata |
0.3 | 1 | 2017 | Restricting grammars with tree automata · Proc. ACM Program. Lang. 2017 |
Programming languages and type systems › type systems
gradual typing |
0.3 | 1 | 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor Calculus · Proc. ACM Program. Lang. 2025 |
Distributed systems › replication › replicated data types
conflict-free replicated data types |
0.3 | 1 | 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor Calculus · Proc. ACM Program. Lang. 2025 |
Automata and formal languages › parsing
context-free grammar parsing |
0.2 | 1 | 2016 | On the complexity and performance of parsing with derivatives · PLDI 2016 |
Automata and formal languages › parsing › context-free grammar parsing
parsing with derivatives |
0.2 | 1 | 2016 | On the complexity and performance of parsing with derivatives · PLDI 2016 |
Programming languages and type systems › metaprogramming
macro systems |
0.2 | 1 | 2015 | Towards the Essence of Hygiene · POPL 2015 |
Compilers and program optimization
parsing |
0.2 | 1 | 2013 | Principled parsing for indentation-sensitive languages: revisiting landin's offside rule · POPL 2013 |
Programming languages and type systems
type inference |
0.1 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Programming languages and type systems › program manipulation
continuation-passing style |
0.1 | 1 | 2016 | Pushdown control-flow analysis for free · POPL 2016 |
Programming languages and type systems
higher-order languages |
0.1 | 1 | 2016 | Pushdown control-flow analysis for free · POPL 2016 |
Computational complexity › language complexity
parsing complexity |
0.1 | 1 | 2016 | On the complexity and performance of parsing with derivatives · PLDI 2016 |
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation |
0.0 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Methods — techniques the papers use, named apart from their topics
unification-based type inference · 1.7bidirectional marking · 1.7CmRDT · 1.7tree automata intersection · 0.3state-dependent allocation · 0.2performance evaluation · 0.2complexity analysis · 0.2abstract interpretation · 0.2PDCFA · 0.2CFA2 · 0.2AAC · 0.2lexical scope · 0.2alpha-equivalence · 0.2
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2025 | Grove: A Bidirectionally Typed Collaborative Structure Editor CalculusabstractVersion control systems typically rely on a patch language , heuristic patch synthesis algorithms like diff , and three-way merge algorithms . Standard patch languages and merge algorithms often fail to identify conflicts correctly when there are multiple edits to one line of code or code is relocated. This paper introduces Grove, a collaborative structure editor calculus that eliminates patch synthesis and three-way merge algorithms entirely. Instead, patches are derived directly from the log of the developer’s edit actions and all edits commute, i.e. the repository state forms a commutative replicated data type (CmRDT). To handle conflicts that can arise due to code relocation, the core datatype in Grove is a labeled directed multi-graph with uniquely identified vertices and edges. All edits amount to edge insertion and deletion, with deletion being permanent. To support tree-based editing, we define a decomposition from graphs into groves , which are a set of syntax trees with conflicts–including local, relocation, and unicyclic relocation conflicts–represented explicitly using holes and references between trees. Finally, we define a type error localization system for groves that enjoys a totality property, i.e. all editor states in Grove are statically meaningful, so developers can use standard editor services while working to resolve these explicitly represented conflicts. The static semantics is defined as a bidirectional marking system in line with recent work, with gradual typing employed to handle situations where errors and conflicts prevent type determination. We then layer on a unification-based type inference system to opportunistically fill type holes and fail gracefully when no solution exists. We mechanize the metatheory of Grove using the Agda theorem prover. We implement these ideas as the Grove Workbench , which generates the necessary data structures and algorithms in OCaml given a syntax tree specification. Michael D. Adams 0001, Eric Griffis, Thomas Porter, Sundara Vishnu Satish, Eric Zhao 0006, Cyrus Omar |
Proc. ACM Program. Lang. | 1 |
| 2020 | Liberate Abstract Garbage Collection from the Stack by Decomposing the HeapabstractAbstract Abstract garbage collection and the use of pushdown systems each enhance the precision of control-flow analysis (CFA). However, their respective needs conflict: abstract garbage collection requires the stack but pushdown systems obscure it. Though several existing techniques address this conflict, none take full advantage of the underlying interplay. In this paper, we dissolve this conflict with a technique which exploits the precision of pushdown systems to decompose the heap across the continuation.This technique liberates abstract garbage collection from the stack, increasing its effectiveness and the compositionality of its host analysis. We generalize our approach to apply compositional treatment to abstract timestamps which induces the context abstraction of m-CFA, an abstraction more precise than k-CFA’s for many common programming patterns. Kimball Germane, Michael D. Adams 0001 |
ESOP | 2 |
| 2020 | Parsing with zippers (functional pearl)abstractParsing with Derivatives (PwD) is an elegant approach to parsing context-free grammars (CFGs). It takes the equational theory behind Brzozowski's derivative for regular expressions and augments that theory with laziness, memoization, and fixed points. The result is a simple parser for arbitrary CFGs. Although recent work improved the performance of PwD, it remains inefficient due to the algorithm repeatedly traversing some parts of the grammar. In this functional pearl, we show how to avoid this inefficiency by suspending the state of the traversal in a zipper. When subsequent derivatives are taken, we can resume the traversal from where we left off without retraversing already traversed parts of the grammar. However, the original zipper is designed for use with trees, and we want to parse CFGs. CFGs can include shared regions, cycles, and choices between alternates, which makes them incompatible with the traditional tree model for zippers. This paper develops a generalization of zippers to properly handle these additional features. Just as PwD generalized Brzozowski's derivatives from regular expressions to CFGs, we generalize Huet's zippers from trees to CFGs. Abstract The resulting parsing algorithm is concise and efficient: it takes only 31 lines of OCaml code to implement the derivative function but performs 6,500 times faster than the original PwD and 3.24 times faster than the optimized implementation of PwD. Pierce Darragh, Michael D. Adams 0001 |
Proc. ACM Program. Lang. | 2 |
| 2019 | Demand Control-Flow Analysis
Kimball Germane, Jay McCarthy, Michael D. Adams 0001, Matthew Might |
VMCAI | 3 |
| 2018 | Abstract allocation as a unified approach to polyvariance in control-flow analysesabstractAbstract 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. | 2 |
| 2017 | Restricting grammars with tree automataabstractPrecedence 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. | 1 |
| 2016 | Allocation characterizes polyvariance: a unified methodology for polyvariant control-flow analysisabstractThe 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 |
ICFP | 2 |
| 2016 | On the complexity and performance of parsing with derivativesabstractCurrent 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 |
PLDI | 1 |
| 2016 | Pushdown control-flow analysis for freeabstractTraditional 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 |
POPL | 3 |
| 2016 | Specifying and executing optimizations for generalized control flow graphs
William Mansky, Elsa L. Gunter, Dennis Griffith, Michael D. Adams 0001 |
Sci. Comput. Program. | 4 |
| 2015 | Towards the Essence of HygieneabstractHygiene is an essential aspect of Scheme's macro system that prevents unintended variable capture. However, previous work on hygiene has focused on algorithmic implementation rather than precise, mathematical definition of what constitutes hygiene. This is in stark contrast with lexical scope, alpha-equivalence and capture-avoiding substitution, which also deal with preventing unintended variable capture but have widely applicable and well-understood mathematical definitions. Michael D. Adams 0001 |
POPL | 1 |
| 2015 | Optimizing SYB traversals is easy!
Michael D. Adams 0001, Andrew Farmer, José Pedro Magalhães |
Sci. Comput. Program. | 1 |
| 2014 | Indentation-sensitive parsing for ParsecabstractSeveral popular languages including Haskell and Python use the indentation and layout of code as an essential part of their syntax. In the past, implementations of these languages used ad hoc techniques to implement layout. Recent work has shown that a simple extension to context-free grammars can replace these ad hoc techniques and provide both formal foundations and efficient parsing algorithms for indentation sensitivity. Michael D. Adams 0001, Ömer S. Agacan |
Haskell | 1 |
| 2014 | Optimizing SYB is easy!abstractThe most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expression of many traversals, its use incurs a significant runtime cost. Existing techniques for optimizing other generic-programming systems are not able to eliminate this overhead. Michael D. Adams 0001, Andrew Farmer, José Pedro Magalhães |
PEPM | 1 |
| 2013 | Principled parsing for indentation-sensitive languages: revisiting landin's offside ruleabstractSeveral popular languages, such as Haskell, Python, and F#, use the indentation and layout of code as part of their syntax. Because context-free grammars cannot express the rules of indentation, parsers for these languages currently use ad hoc techniques to handle layout. These techniques tend to be low-level and operational in nature and forgo the advantages of more declarative specifications like context-free grammars. For example, they are often coded by hand instead of being generated by a parser generator. Michael D. Adams 0001 |
POPL | 1 |
| 2012 | Template your boilerplate: using template haskell for efficient generic programmingabstractGeneric programming allows the concise expression of algorithms that would otherwise require large amounts of handwritten code. A number of such systems have been developed over the years, but a common drawback of these systems is poor runtime performance relative to handwritten, non-generic code. Generic-programming systems vary significantly in this regard, but few consistently match the performance of handwritten code. This poses a dilemma for developers. Generic-programming systems offer concision but cost performance. Handwritten code offers performance but costs concision. Michael D. Adams 0001, Thomas DuBuisson |
Haskell | 1 |
| 2012 | A Structural Soundness Proof for Shivers's Escape Technique - A Case for Galois Connections
Jan Midtgaard, Michael D. Adams 0001, Matthew Might |
SAS | 2 |
| 2011 | Flow-sensitive type recovery in linear-log timeabstractThe 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 |
OOPSLA | 1 |
| 2008 | Efficient nondestructive equality checking for trees and graphsabstractThe Revised6 Report on Scheme requires its generic equivalence predicate, equal?, to terminate even on cyclic inputs. While the terminating equal? can be implemented via a DFA-equivalence or union-find algorithm, these algorithms usually require an additional pointer to be stored in each object, are not suitable for multithreaded code due to their destructive nature, and may be unacceptably slow for the small acyclic values that are the most likely inputs to the predicate. Michael D. Adams 0001, R. Kent Dybvig |
ICFP | 1 |
| 2007 | Representation-transparent matrix algorithms with scalable performanceabstractPositive results from new object-oriented tools for scientific programming are reported. Using template classes, abstractions of matrix representations are available that subsume conventional row-major, column-major, either Z- or И-Morton-order, as well as block-wise combinations of these. Moreover, the design of the Matrix Template Library (MTL) has been independently extended to provide recursators, to support block-recursive algorithms, supplementing MTL's iterators. Data types modeling both concepts enable the programmer to implement both iterative and recursive algorithms (or even both) on all of the aforementioned matrix representations at once for a wide family of important scientific operations. Peter Gottschling, David S. Wise, Michael D. Adams 0001 |
ICS | 3 |