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.

Jan Midtgaard

dblp:03/5231 · DBLP profile ↗
← Back
21ranked-venue papers
13as first author
1since 2021 · last 2025
0000-0002-6506-5468ORCID · verified

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

Software engineering, systems software and programming languages · 17 · 12 first-author · 1 since 2021Theory of computation · 7 · 3 first-authorDatabases, data management, data science and information retrieval · 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
3 papers
Program analysis · 69% Programming languages and type systems · 24% Compilers and program optimization · 4%

Topics — the 7 heaviest of 9, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis › static analysis
abstract interpretation
0.322013
Monadic abstract interpreters · PLDI 2013
Control-flow analysis of function calls and returns by abstract interpretation · Inf. Comput. 2012
Program analysis
control flow analysis
0.322012
Control-flow analysis of function calls and returns by abstract interpretation · Inf. Comput. 2012
Flow-sensitive type recovery in linear-log time · OOPSLA 2011
Programming languages and type systems › computational effects
monads
0.212013
Monadic abstract interpreters · PLDI 2013
Program analysis
static analysis
0.212013
Monadic abstract interpreters · PLDI 2013
Programming languages and type systems
type inference
0.112011
Flow-sensitive type recovery in linear-log time · OOPSLA 2011
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

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

monadic semantics · 0.2sub-0CFA · 0.1linear-log-time algorithm · 0.1
YearPublicationVenuePosition
2025 Dynamic Verification of OCaml Software with Gospel and Ortac/QCheck-STM
abstract
Abstract This paper introduces the QCheck-STM plugin for Ortac, a framework for dynamic verification of OCaml code. Ortac/QCheck-STM consumes OCaml module signatures annotated with behavioural specification contracts expressed in the Gospel language, extracts a functional model of a mutable data structure from it, and generates code for automated runtime assertion checking. We report on the implementation of the tool, the structure of the generated code, and on errors found in established OCaml libraries.
Nikolaus Huber, Naomi Spargo, Nicolas Osborne, Samuel Hym, Jan Midtgaard
TACAS (3)5
2020 Stack-Driven Program Generation of WebAssembly
Árpád Perényi, Jan Midtgaard
APLAS2
2018 Developments in property-based testing (invited talk)
abstract
Property-based testing (aka. QuickCheck) is a successful au- tomated testing approach originating in the programming language community (Claessen-Hughes:ICFP00). It unites the well-known idea of randomized testing with that of en- suring program-specific properties akin to those encoun- tered within verification and theorem proving. Starting as a Haskell library the approach has grown to become language independent with ports to over 30 different programming languages. Over the years property-based testing has been used to pinpoint an impressive amount of software errors in a multitude of settings, initially within academia but more and more so also in the software industry. In this talk I will first recall the basic concepts of property- based testing and then cover a couple of recent applications, while sharing some of the folklore and community know- how. This includes quite a bit of symbolic program manipu- lation at the heart of the PEPM community. I will then offer a personal perspective on the approach, both in terms of programming language theory and software engineering.
Jan Midtgaard
PEPM1
2018 Process-Local Static Analysis of Synchronous Processes
Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson
SAS1
2017 Effect-driven QuickChecking of compilers
abstract
How does one test a language implementation with QuickCheck (aka. property-based testing)? One approach is to generate programs following the grammar of the language. But in a statically-typed language such as OCaml too many of these candidate programs will be rejected as ill-typed by the type checker. As a refinement Pałka et al. propose to generate programs in a goal-directed, bottom-up reading up of the typing relation. We have written such a generator. However many of the generated programs has output that depend on the evaluation order, which is commonly under-specified in languages such as OCaml, Scheme, C, C++, etc. In this paper we develop a type and effect system for conservatively detecting evaluation-order dependence and propose its goal-directed reading as a generator of programs that are independent of evaluation order. We illustrate the approach by generating programs to test OCaml's two compiler backends against each other and report on a number of bugs we have found doing so.
Jan Midtgaard, Mathias Nygaard Justesen, Patrick Kasting, Flemming Nielson, Hanne Riis Nielson
Proc. ACM Program. Lang.1
2017 QuickChecking static analysis properties
abstract
Summary A static analysis can check programs for potential errors. A natural question that arises is therefore: who checks the checker? Researchers have given this question varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen‐and‐paper soundness proofs, to verified fixed point checking. In this paper, we demonstrate how quickchecking can be useful to test a range of static analysis properties with limited effort. We show how to check a range of algebraic lattice properties, to help ensure that an implementation follows the formal specification of a lattice. Moreover, we offer a number of generic, type‐safe combinators to check transfer functions and operators on lattices, to help ensure that these are, eg, monotone, strict, or invariant. We substantiate our claims by quickchecking a type analysis for the Lua programming language.
Jan Midtgaard, Anders Møller
Softw. Test. Verification Reliab.1
2016 Iterated process analysis over lattice-valued regular expressions
abstract
We present an iterated approach to statically analyze programs of two processes communicating by message passing. Our analysis operates over a domain of lattice-valued regular expressions, and computes increasingly better approximations of each process's communication behavior. Overall the work extends traditional semantics-based program analysis techniques to automatically reason about message passing in a manner that can simultaneously analyze both values of variables as well as message order, message content, and their interdependencies.
Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson
PPDP1
2016 A Parametric Abstract Domain for Lattice-Valued Regular Expressions
Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson
SAS1
2015 QuickChecking Static Analysis Properties
abstract
A static analysis can check programs for potential errors. A natural question that arises is therefore: who checks the checker? Researchers have given this question varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen-and-paper soundness proofs, to verified fixed point checking. In this paper we demonstrate how quickchecking can be useful for testing a range of static analysis properties with limited effort. We show how to check a range of algebraic lattice properties, to help ensure that an implementation follows the formal specification of a lattice. Moreover, we offer a number of generic, type-safe combinators to check transfer functions and operators on lattices, to help ensure that these are, e.g., monotone, strict, or invariant. We substantiate our claims by quickchecking a type analysis for the Lua programming language.
Jan Midtgaard, Anders Møller
ICST1
2015 Systematic derivation of correct variability-aware program analyses
Jan Midtgaard, Aleksandar S. Dimovski, Claus Brabrand, Andrzej Wasowski
Sci. Comput. Program.1
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
PLDI4
2013 Engineering definitional interpreters
abstract
A definitional interpreter should be clear and easy to write, but it may run 4--10 times slower than a well-crafted bytecode interpreter. In a case study focused on implementation choices, we explore ways of making definitional interpreters faster without expending much programming effort. We implement, in OCaml, interpreters based on three semantics for a simple subset of Lua. We compile the OCaml to x86 native code, and we systematically investigate hundreds of combinations of algorithms and data structures. In this experimental context, our fastest interpreters are based on natural semantics; good algorithms and data structures make them 2--3 times faster than naïve interpreters. Our best interpreter, created using only modest effort, runs only 1.5 times slower than a mature bytecode interpreter implemented in C.
Jan Midtgaard, Norman Ramsey, Bradford Larsen
PPDP1
2012 Calculating Graph Algorithms for Dominance and Shortest Path
Ilya Sergey, Jan Midtgaard, Dave Clarke 0001
MPC2
2012 A Structural Soundness Proof for Shivers's Escape Technique - A Case for Galois Connections
Jan Midtgaard, Michael D. Adams 0001, Matthew Might
SAS1
2012 Control-flow analysis of function calls and returns by abstract interpretation
Jan Midtgaard, Thomas P. Jensen
Inf. Comput.1
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
OOPSLA3
2009 Control-flow analysis of function calls and returns by abstract interpretation
abstract
We derive a control-flow analysis that approximates the interprocedural control-flow of both function calls and returns in the presence of first-class functions and tail-call optimization. In addition to an abstract environment, our analysis computes for each expression an abstract control stack, effectively approximating where function calls return across optimized tail calls. The analysis is systematically calculated by abstract interpretation of the stack-based CaEK abstract machine of Flanagan et al. using a series of Galois connections. Abstract interpretation provides a unifying setting in which we 1) prove the analysis equivalent to the composition of a continuation-passing style (CPS) transformation followed by an abstract interpretation of a stack-less CPS machine, and 2) extract an equivalent constraint-based formulation, thereby providing a rational reconstruction of a constraint-based control-flow analysis from abstract interpretation principles.
Jan Midtgaard, Thomas P. Jensen
ICFP1
2008 A Calculational Approach to Control-Flow Analysis by Abstract Interpretation
Jan Midtgaard, Thomas P. Jensen
SAS1
2005 A functional correspondence between monadic evaluators and abstract machines for languages with computational effects
Mads Sig Ager, Olivier Danvy, Jan Midtgaard
Theor. Comput. Sci.3
2004 A functional correspondence between call-by-need evaluators and lazy abstract machines
Mads Sig Ager, Olivier Danvy, Jan Midtgaard
Inf. Process. Lett.3
2003 A functional correspondence between evaluators and abstract machines
abstract
We bridge the gap between functional evaluators and abstract machines for the λ-calculus, using closure conversion, transformation into continuation-passing style, and defunctionalization.We illustrate this approach by deriving Krivine's abstract machine from an ordinary call-by-name evaluator and by deriving an ordinary call-by-value evaluator from Felleisen et al.'s CEK machine. The first derivation is strikingly simpler than what can be found in the literature. The second one is new. Together, they show that Krivine's abstract machine and the CEK machine correspond to the call-by-name and call-by-value facets of an ordinary evaluator for the λ-calculus.We then reveal the denotational content of Hannan and Miller's CLS machine and of Landin's SECD machine. We formally compare the corresponding evaluators and we illustrate some degrees of freedom in the design spaces of evaluators and of abstract machines for the λ-calculus with computational effects.Finally, we consider the Categorical Abstract Machine and the extent to which it is more of a virtual machine than an abstract machine.
Mads Sig Ager, Dariusz Biernacki, Olivier Danvy, Jan Midtgaard
PPDP4