EDBT 2026 Demo / reviewers in the wild / expert
Cormac Flanagan
dblp:f/CormacFlanagan
· DBLP profile ↗
72ranked-venue papers
40as first author
1since 2021 · last 2024
0000-0002-1828-3120ORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 62 · 36 first-author · 1 since 2021Theory of computation · 7 · 5 first-authorSystems, architecture and hardware · 3 · 1 first-authorSecurity and privacy · 3Databases, data management, data science and information retrieval · 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
36 papers |
Concurrent programming · 42% Program verification · 21% Programming languages and type systems · 21% | |
| Network and information security
6 papers |
Systems and software security · 87% Web and mobile security · 13% | |
| Computer architecture, parallel and distributed computing, and storage systems
4 papers |
Cloud and datacenter computing · 82% Memory systems · 16% Parallel and multicore computing · 2% | |
| Theoretical computer science
3 papers |
Automated reasoning and model checking · 51% Logic in computer science · 49% |
Topics — the 30 heaviest of 89, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Systems and software security
information flow control |
1.3 | 5 | 2018 | Secure serverless computing using dynamic information flow control · Proc. ACM Program. Lang. 2018 Faceted Secure Multi Execution · CCS 2018 Multiple Facets for Dynamic Information Flow with Exceptions · ACM Trans. Program. Lang. Syst. 2017 |
Concurrent programming › concurrency bug detection › data race detection
dynamic race detection |
0.9 | 4 | 2018 | VerifiedFT: a verified, high-performance precise dynamic race detector · PPoPP 2018 BigFoot: static check placement for dynamic race detection · PLDI 2017 Array Shadow State Compression for Precise Dynamic Race Detection (T) · ASE 2015 |
Concurrent programming
concurrency bugs |
0.8 | 9 | 2017 | BigFoot: static check placement for dynamic race detection · PLDI 2017 Sound predictive race detection in polynomial time · POPL 2012 Adversarial memory for detecting destructive races · PLDI 2010 |
Concurrent programming › concurrency bug detection
data race detection |
0.7 | 8 | 2017 | BigFoot: static check placement for dynamic race detection · PLDI 2017 Sound predictive race detection in polynomial time · POPL 2012 Adversarial memory for detecting destructive races · PLDI 2010 |
Systems and software security › information flow control
dynamic information flow control |
0.6 | 2 | 2018 | Secure serverless computing using dynamic information flow control · Proc. ACM Program. Lang. 2018 Precise, dynamic information flow for database-backed applications · PLDI 2016 |
Program analysis
dynamic analysis |
0.5 | 5 | 2015 | Array Shadow State Compression for Precise Dynamic Race Detection (T) · ASE 2015 Adversarial memory for detecting destructive races · PLDI 2010 Velodrome: a sound and complete dynamic atomicity checker for multithreaded programs · PLDI 2008 |
Program verification › concurrent program verification
commutativity-based reduction |
0.4 | 1 | 2020 | The anchor verifier for blocking and non-blocking concurrent software · Proc. ACM Program. Lang. 2020 |
Program verification
concurrent program verification |
0.4 | 1 | 2020 | The anchor verifier for blocking and non-blocking concurrent software · Proc. ACM Program. Lang. 2020 |
Concurrent programming
non-blocking algorithms |
0.4 | 1 | 2020 | The anchor verifier for blocking and non-blocking concurrent software · Proc. ACM Program. Lang. 2020 |
Program analysis
static analysis |
0.3 | 8 | 2010 | Hybrid type checking · ACM Trans. Program. Lang. Syst. 2010 Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 Hybrid type checking · POPL 2006 |
Systems and software security › information flow control
secure multi-execution |
0.3 | 1 | 2018 | Faceted Secure Multi Execution · CCS 2018 |
Cloud and datacenter computing
serverless computing |
0.3 | 1 | 2018 | Secure serverless computing using dynamic information flow control · Proc. ACM Program. Lang. 2018 |
Cloud and datacenter computing › serverless computing
serverless security |
0.3 | 1 | 2018 | Secure serverless computing using dynamic information flow control · Proc. ACM Program. Lang. 2018 |
Programming languages and type systems › information flow control
noninterference |
0.3 | 3 | 2016 | Precise, dynamic information flow for database-backed applications · PLDI 2016 Atomizer: a dynamic atomicity checker for multithreaded programs · POPL 2004 Exploiting purity for atomicity · ISSTA 2004 |
Programming languages and type systems
type systems |
0.3 | 4 | 2012 | Cooperative types for controlling thread interference in Java · ISSTA 2012 Types for atomicity: Static checking and inference for Java · ACM Trans. Program. Lang. Syst. 2008 Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 |
Programming languages and type systems
language semantics |
0.3 | 3 | 2016 | Precise, dynamic information flow for database-backed applications · PLDI 2016 Multiple facets for dynamic information flow · POPL 2012 The Essence of Compiling with Continuations · PLDI 1993 |
Concurrent programming › concurrency verification
atomicity verification |
0.2 | 4 | 2008 | Velodrome: a sound and complete dynamic atomicity checker for multithreaded programs · PLDI 2008 Exploiting Purity for Atomicity · IEEE Trans. Software Eng. 2005 Exploiting purity for atomicity · ISSTA 2004 |
Logic in computer science › semantics
game semantics |
0.2 | 1 | 2015 | Game Semantics for Type Soundness · LICS 2015 |
Automated reasoning and model checking › automata-based verification
trace containment |
0.2 | 1 | 2015 | Game Semantics for Type Soundness · LICS 2015 |
Concurrent programming
atomicity |
0.2 | 4 | 2008 | Types for atomicity: Static checking and inference for Java · ACM Trans. Program. Lang. Syst. 2008 Exploiting Purity for Atomicity · IEEE Trans. Software Eng. 2005 Atomizer: a dynamic atomicity checker for multithreaded programs · POPL 2004 |
Program verification
dynamic verification |
0.2 | 2 | 2010 | Hybrid type checking · ACM Trans. Program. Lang. Syst. 2010 Hybrid type checking · POPL 2006 |
Programming languages and type systems
type checking |
0.2 | 2 | 2010 | Hybrid type checking · ACM Trans. Program. Lang. Syst. 2010 Hybrid type checking · POPL 2006 |
Program verification › predicate transformers
weakest precondition |
0.2 | 2 | 2012 | Detecting inconsistencies via universal reachability analysis · ISSTA 2012 Avoiding exponential explosion: generating compact verification conditions · POPL 2001 |
Web and mobile security › web security
cross-site scripting |
0.1 | 1 | 2012 | Multiple facets for dynamic information flow · POPL 2012 |
Web and mobile security
web security |
0.1 | 1 | 2012 | Multiple facets for dynamic information flow · POPL 2012 |
Requirements engineering and software design › inconsistency management
consistency checking |
0.1 | 1 | 2012 | Detecting inconsistencies via universal reachability analysis · ISSTA 2012 |
Program analysis › dynamic analysis
happens-before analysis |
0.1 | 1 | 2012 | Sound predictive race detection in polynomial time · POPL 2012 |
Concurrent programming › concurrency bug detection › data race detection
predictive race detection |
0.1 | 1 | 2012 | Sound predictive race detection in polynomial time · POPL 2012 |
Concurrent programming › synchronization
locking |
0.1 | 1 | 2020 | The anchor verifier for blocking and non-blocking concurrent software · Proc. ACM Program. Lang. 2020 |
Concurrent programming › concurrency bug detection
atomicity violation detection |
0.1 | 2 | 2008 | Velodrome: a sound and complete dynamic atomicity checker for multithreaded programs · PLDI 2008 Atomizer: a dynamic atomicity checker for multithreaded programs · POPL 2004 |
Methods — techniques the papers use, named apart from their topics
formal semantics · 0.8static labeling · 0.7formal framework · 0.7faceted labeling · 0.7dynamic taint analysis · 0.7dynamic analysis · 0.5commutativity reasoning · 0.5reduction proofs · 0.4faceted values · 0.4dynamic race detection · 0.4static analysis · 0.3microbenchmarking · 0.3micro-benchmarking · 0.3mechanical verification · 0.3shadow memory compression · 0.3noninterference · 0.3dynamic taint tracking · 0.2adaptive online algorithm · 0.2
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2024 | Mover Logic: A Concurrent Program Logic for Reduction and Rely-Guarantee ReasoningabstractRely-guarantee (RG) logic uses thread interference specifications (relies and guarantees) to reason about the correctness of multithreaded software. Unfortunately, RG logic requires each function postcondition to be "stabilized" or specialized to the behavior of other threads, making it difficult to write function specifications that are reusable at multiple call sites. This paper presents mover logic, which extends RG logic to address this problem via the notion of atomic functions. Atomic functions behave as if they execute serially without interference from concurrent threads, and so they can be assigned more general and reusable specifications that avoid the stabilization requirement of RG logic. Several practical verifiers (Calvin-R, QED, CIVL, Armada, Anchor, etc.) have demonstrated the modularity benefits of atomic function specifications. However, the complexity of these systems and their correctness proofs makes it challenging to understand and extend these systems. Mover logic formalizes the central ideas of reduction in a declarative program logic that provides a foundation for future work in this area. Cormac Flanagan, Stephen N. Freund |
ECOOP | 1 |
| 2020 | Transparent IFC Enforcement: Possibility and (In)Efficiency Results
Maximilian Algehed, Cormac Flanagan |
CSF | 2 |
| 2020 | The anchor verifier for blocking and non-blocking concurrent softwareabstractVerifying the correctness of concurrent software with subtle synchronization is notoriously challenging. We present the Anchor verifier, which is based on a new formalism for specifying synchronization disciplines that describes both (1) what memory accesses are permitted, and (2) how each permitted access commutes with concurrent operations of other threads (to facilitate reduction proofs). Anchor supports the verification of both lock-based blocking and cas-based non-blocking algorithms. Experiments on a variety concurrent data structures and algorithms show that Anchor significantly reduces the burden of concurrent verification. Cormac Flanagan, Stephen N. Freund |
Proc. ACM Program. Lang. | 1 |
| 2019 | Optimising Faceted Secure Multi-ExecutionabstractLanguage-Based Information Flow Control (IFC) provides strong security guarantees for untrusted code, but often suffers from a non-negligible rate of false alarms. Multi-execution based techniques promise to provide security guarantees without raising any false alarms. However, all known multi-execution approaches introduce extraneous performance overheads which are rarely studied. In this work, we lay down the foundations for optimisation techniques aimed at reducing these overheads to a managable level, thus helping to make multi-execution more practical. We characterise our optimisations as data-and control-oriented. Data-oriented optimisations reduce storage overheads- which also helps to remove unnecessary repeated computations. In contrast, computation-oriented optimisations rely on program annotations in order to reduce needless computation. These annotations motivate the need for a new, stronger, theoretical notion of transparency- i.e., a stronger notion for characterising the lack of false alarms. To show the efficacy of our optimisation techniques, we apply them to two case-studies: a secure (faceted) database and a chat server written in a multi-execution based IFC framework. Our case-studies clearly show that our optimisations significantly reduce the storage and computational overhead, sometimes from exponential to polynomial order. All of our formal results are accompanied by mechanised proofs in Agda. Maximilian Algehed, Alejandro Russo, Cormac Flanagan |
CSF | 3 |
| 2018 | Faceted Secure Multi ExecutionabstractTo enforce non-interference, both Secure Multi-Execution (SME) and Multiple Facets (MF) rely on the introduction of multi-executions. The attractiveness of these techniques is that they are precise: secure programs running under SME or MF do not change their behavior. Although MF was intended as an optimization for SME, it does provide a weaker security guarantee for termination leaks. This paper presents Faceted Secure Multi Execution (FSME), a novel synthesis of MF and SME that combines the stronger security guarantees of SME with the optimizations of MF. The development of FSME required a unification of the ideas underlying MF and SME into a new multi-execution framework (Multef), which can be parameterized to provide MF, SME, or our new approach FSME, thus enabling an apples-to-apples comparison and benchmarking of all three approaches. Unlike the original work on MF and SME, Multef supports arbitrary (and possibly infinite) lattices necessary for decentralized labeling models---a feature needed in order to make possible the writing of applications where each principal can impose confidentiality and integrity requirements on data. We provide some micro-benchmarks for evaluating Multef and write a file hosting service, called ProtectedBox, whose functionality can be securely extended via third-party plugins. Thomas Schmitz 0001, Maximilian Algehed, Cormac Flanagan, Alejandro Russo |
CCS | 3 |
| 2018 | VerifiedFT: a verified, high-performance precise dynamic race detectorabstractDynamic data race detectors are valuable tools for testing and validating concurrent software, but to achieve good performance they are typically implemented using sophisticated concurrent algorithms. Thus, they are ironically prone to the exact same kind of concurrency bugs they are designed to detect. To address these problems, we have developed VerifiedFT, a clean slate redesign of the FastTrack race detector [19]. The VerifiedFT analysis provides the same precision guarantee as FastTrack, but is simpler to implement correctly and efficiently, enabling us to mechanically verify an implementation of its core algorithm using CIVL [27]. Moreover, VerifiedFT provides these correctness guarantees without sacrificing any performance over current state-of-the-art (but complex and unverified) FastTrack implementations for Java. James R. Wilcox, Cormac Flanagan, Stephen N. Freund |
PPoPP | 2 |
| 2018 | Secure serverless computing using dynamic information flow controlabstractThe rise of serverless computing provides an opportunity to rethink cloud security. We present an approach for securing serverless systems using a novel form of dynamic information flow control (IFC). We show that in serverless applications, the termination channel found in most existing IFC systems can be arbitrarily amplified via multiple concurrent requests, necessitating a stronger termination-sensitive non-interference guarantee, which we achieve using a combination of static labeling of serverless processes and dynamic faceted labeling of persistent data. We describe our implementation of this approach on top of JavaScript for AWS Lambda and OpenWhisk serverless platforms, and present three realistic case studies showing that it can enforce important IFC security properties with modest overhead. Kalev Alpernas, Cormac Flanagan, Sadjad Fouladi, Leonid Ryzhyk, Shmuel Sagiv, Thomas Schmitz 0001, Keith Winstein |
Proc. ACM Program. Lang. | 2 |
| 2017 | Correctness of Partial Escape Analysis for Multithreading OptimizationabstractCompilers often use escape analysis to elide locking operations on thread-local data. Similarly, dynamic race detectors may use escape analysis to elide race checks on thread-local data. In this paper, we study the correctness of these two related optimizations when using a partial escape analysis, which identifies objects that are currently thread-local but that may later become thread-shared. Dustin Rhodes, Cormac Flanagan, Stephen N. Freund |
FTfJP@ECOOP | 2 |
| 2017 | BigFoot: static check placement for dynamic race detectionabstractPrecise dynamic data race detectors provide strong correctness guarantees but have high overheads because they generally keep analysis state in a separate shadow location for each heap memory location, and they check (and potentially update) the corresponding shadow location on each heap access. The BigFoot dynamic data race detector uses a combination of static and dynamic analysis techniques to coalesce checks and compress shadow locations. With BigFoot, multiple accesses to an object or array often induce a single coalesced check that manipulates a single compressed shadow location, resulting in a performance improvement over FastTrack of 61%. Dustin Rhodes, Cormac Flanagan, Stephen N. Freund |
PLDI | 2 |
| 2017 | Multiple Facets for Dynamic Information Flow with ExceptionsabstractJavaScript is the source of many security problems, including cross-site scripting attacks and malicious advertising code. Central to these problems is the fact that code from untrusted sources runs with full privileges. Information flow controls help prevent violations of data confidentiality and integrity. This article explores faceted values , a mechanism for providing information flow security in a dynamic manner that avoids the stuck executions of some prior approaches, such as the no-sensitive-upgrade technique. Faceted values simultaneously simulate multiple executions for different security levels to guarantee termination-insensitive noninterference. We also explore the interaction of faceted values with exceptions, declassification, and clearance. Thomas H. Austin, Thomas Schmitz 0001, Cormac Flanagan |
ACM Trans. Program. Lang. Syst. | 3 |
| 2016 | Macrofication: Refactoring by Reverse Macro Expansion
Christopher Schuster, Tim Disney, Cormac Flanagan |
ESOP | 3 |
| 2016 | Precise, dynamic information flow for database-backed applicationsabstractWe present an approach for dynamic information flow control across the application and database. Our approach reduces the amount of policy code required, yields formal guarantees across the application and database, works with existing relational database implementations, and scales for realistic applications. In this paper, we present a programming model that factors out information flow policies from application code and database queries, a dynamic semantics for the underlying $^JDB$ core language, and proofs of termination-insensitive non-interference and policy compliance for the semantics. We implement these ideas in Jacqueline, a Python web framework, and demonstrate feasibility through three application case studies: a course manager, a health record system, and a conference management system used to run an academic workshop. We show that in comparison to traditional applications with hand-coded policy checks, Jacqueline applications have 1) a smaller trusted computing base, 2) fewer lines of policy code, and 2) reasonable, often negligible, additional overheads. Jean Yang 0001, Travis Hance, Thomas H. Austin, Armando Solar-Lezama, Cormac Flanagan, Stephen Chong |
PLDI | 5 |
| 2015 | Array Shadow State Compression for Precise Dynamic Race Detection (T)abstractPrecise dynamic race detectors incur significant time and space overheads, particularly for array-intensive programs, due to the need to store and manipulate analysis (or shadow) state for every element of every array. This paper presents SlimState, a precise dynamic race detector that uses an adaptive, online algorithm to optimize array shadow state representations. SlimState is based on the insight that common array access patterns lead to analogous patterns in array shadow state, enabling optimized, space efficient representations of array shadow state with no loss in precision. We have implemented SlimState for Java. Experiments on a variety of benchmarks show that array shadow compression reduces the space and time overhead of race detection by 27% and 9%, respectively. It is particularly effective for array-intensive programs, reducing space and time overheads by 35% and 17%, respectively, on these programs. James R. Wilcox, Parker Finch, Cormac Flanagan, Stephen N. Freund |
ASE | 3 |
| 2015 | Game Semantics for Type SoundnessabstractThe key idea of game semantics is that a term can interact with its enclosing context via various events, such as function calls and returns. A trace is a sequence of such interaction events. The meaning of the term is then naturally represented by the set of all event traces that the term can generate. Game semantics allows us to define the meaning of both expressions and types in the same domain which enables an interesting alternative to subject reduction for proving type soundness. This paper uses game semantics to define the meaning of and verify type soundness for a sequence of programming languages, starting with a functional sequential language (the call-by-value simply-typed lambda calculus), and then extending that proof with sub typing, side effects, control effects, and concurrency. These proofs are reasonably short and fairly semantic in structure, focusing on the relationship between the meanings of each term and its corresponding type. In particular, we show that the typing and sub typing relations are both conservative approximations of alternating trace containment. Tim Disney, Cormac Flanagan |
LICS | 2 |
| 2015 | Cooperative types for controlling thread interference in Java
Jaeheon Yi, Tim Disney, Stephen N. Freund, Cormac Flanagan |
Sci. Comput. Program. | 4 |
| 2014 | Sweeten your JavaScript: hygienic macros for ES5abstractLisp and Scheme have demonstrated the power of macros to enable programmers to evolve and craft languages. In languages with more complex syntax, macros have had less success. In part, this has been due to the difficulty in building expressive hygienic macro systems for such languages. JavaScript in particular presents unique challenges for macro systems due to ambiguities in the lexing stage that force the JavaScript lexer and parser to be intertwined. Tim Disney, Nathan Faubion, David Herman, Cormac Flanagan |
DLS | 4 |
| 2014 | Dynamic detection of object capability violations through model checkingabstractIn this paper we present a new tool called DOCaT (Dynamic Object Capability Tracer), a model checker for JavaScript that detects capability leaks in an object capability system. DOCaT includes an editor that highlights the sections of code that can be potentially transferred to untrusted third-party code along with a trace showing how the code could be leaked in an actual execution. This code highlighting provides a simple way of visualizing the references untrusted code potentially has access to and helps programmers to discover if their code is leaking more capabilities then required. DOCaT is implemented using a combination of source code rewriting (using Sweet.js, a JavaScript macro system), dynamic behavioral intercession (Proxies, introduced in ES6, the most recent version of JavaScript), and model checking. Together these methods are able to locate common ways for untrusted code to elevate its authority. Dustin Rhodes, Tim Disney, Cormac Flanagan |
DLS | 3 |
| 2014 | Developments in automated verification techniques
Cormac Flanagan, Barbara König 0001 |
Int. J. Softw. Tools Technol. Transf. | 1 |
| 2013 | RedCard: Redundant Check Elimination for Dynamic Race Detectors
Cormac Flanagan, Stephen N. Freund |
ECOOP | 1 |
| 2012 | A Functional View of Imperative Information Flow
Thomas H. Austin, Cormac Flanagan, Martín Abadi |
APLAS | 2 |
| 2012 | Detecting inconsistencies via universal reachability analysisabstractRecent research has suggested that a large class of software bugs fall into the category of inconsistencies, or cases where two pieces of program code make incompatible assumptions. Existing approaches to inconsistency detection have used intentionally unsound techniques aimed at bug-finding rather than verification. We describe an inconsistency detection analysis that extends previous work and is based on the foundation of the weakest precondition calculus. On a closed program, this analysis can serve as a full verification technique, while in cases where some code is unknown, a theorem prover is incomplete, or specifications are incomplete, it can serve as bug finding technique with a low false-positive rate. Aaron Tomb, Cormac Flanagan |
ISSTA | 2 |
| 2012 | Cooperative types for controlling thread interference in JavaabstractMultithreaded programs are notoriously prone to unintended interference between concurrent threads. To address this problem, we argue that yield annotations in the source code should document all thread interference, and we present a type system for verifying the absence of undocumented interference in Java programs. Under this type system, well-typed programs behave as if context switches occur only at yield annotations. Thus, well-typed programs can be understood using intuitive sequential reasoning, except where yield annotations remind the programmer to account for thread interference. Jaeheon Yi, Tim Disney, Stephen N. Freund, Cormac Flanagan |
ISSTA | 4 |
| 2012 | Multiple facets for dynamic information flowabstractJavaScript has become a central technology of the web, but it is also the source of many security problems, including cross-site scripting attacks and malicious advertising code. Central to these problems is the fact that code from untrusted sources runs with full privileges. We implement information flow controls in Firefox to help prevent violations of data confidentiality and integrity. Most previous information flow techniques have primarily relied on either static type systems, which are a poor fit for JavaScript, or on dynamic analyses that sometimes get stuck due to problematic implicit flows, even in situations where the target web application correctly satisfies the desired security policy. We introduce faceted values, a new mechanism for providing information flow security in a dynamic manner that overcomes these limitations. Taking inspiration from secure multi-execution, we use faceted values to simultaneously and efficiently simulate multiple executions for different security levels, thus providing non-interference with minimal overhead, and without the reliance on the stuck executions of prior dynamic approaches. Thomas H. Austin, Cormac Flanagan |
POPL | 2 |
| 2012 | Sound predictive race detection in polynomial timeabstractData races are among the most reliable indicators of programming errors in concurrent software. For at least two decades, Lamport's happens-before (HB) relation has served as the standard test for detecting races--other techniques, such as lockset-based approaches, fail to be sound, as they may falsely warn of races. This work introduces a new relation, causally-precedes (CP), which generalizes happens-before to observe more races without sacrificing soundness. Intuitively, CP tries to capture the concept of happens-before ordered events that must occur in the observed order for the program to observe the same values. What distinguishes CP from past predictive race detection approaches (which also generalize an observed execution to detect races in other plausible executions) is that CP-based race detection is both sound and of polynomial complexity. We demonstrate that the unique aspects of CP result in practical benefit. Applying CP to real-world programs, we successfully analyze server-level applications (e.g., Apache FtpServer) and show that traces longer than in past predictive race analyses can be analyzed in mere seconds to a few minutes. For these programs, CP race detection uncovers races that are hard to detect by repeated execution and HB race detection: a single run of CP race detection produces several races not discovered by 10 separate rounds of happens-before race detection. Yannis Smaragdakis, Jacob Evans, Caitlin Sadowski, Jaeheon Yi, Cormac Flanagan |
POPL | 5 |
| 2011 | Temporal higher-order contractsabstractBehavioral contracts are embraced by software engineers because they document module interfaces, detect interface violations, and help identify faulty modules (packages, classes, functions, etc). This paper extends prior higher-order contract systems to also express and enforce temporal properties, which are common in software systems with imperative state, but which are mostly left implicit or are at best informally specified. The paper presents both a programmatic contract API as well as a temporal contract language, and reports on experience and performance results from implementing these contracts in Racket. Tim Disney, Cormac Flanagan, Jay McCarthy |
ICFP | 2 |
| 2011 | Virtual values for language extensionabstractThis paper focuses on extensibility, the ability of a programmer using a particular language to extend the expressiveness of that language. This paper explores how to provide an interesting notion of extensibility by virtualizing the interface between code and data. A virtual value is a special value that supports behavioral intercession. When a primitive operation is applied to a virtual value, it invokes a trap on that virtual value. A virtual value contains multiple traps, each of which is a user-defined function that describes how that operation should behave on that value. This paper formalizes the semantics of virtual values, and shows how they enable the definition of a variety of language extensions, including additional numeric types; delayed evaluation; taint tracking; contracts; revokable membranes; and units of measure. We report on our experience implementing virtual values for Javascript within an extension for the Firefox browser. Thomas H. Austin, Tim Disney, Cormac Flanagan |
OOPSLA | 3 |
| 2011 | Correct blame for contracts: no more scapegoatingabstractBehavioral software contracts supplement interface information with logical assertions. A rigorous enforcement of contracts provides useful feedback to developers if it signals contract violations as soon as they occur and if it assigns blame to violators with preciseexplanations. Correct blame assignment gets programmers started with the debugging process and can significantly decrease the time needed to discover and fix bugs. Christos Dimoulas, Robert Bruce Findler, Cormac Flanagan, Matthias Felleisen |
POPL | 3 |
| 2011 | Cooperative reasoning for preemptive executionabstractWe propose a cooperative methodology for multithreaded software, where threads use traditional synchronization idioms such as locks, but additionally document each point of potential thread interference with a "yield" annotation. Under this methodology, code between two successive yield annotations forms a serializable transaction that is amenable to sequential reasoning. This methodology reduces the burden of reasoning about thread interleavings by indicating only those interference points that matter. We present experimental results showing that very few yield annotations are required, typically one or two per thousand lines of code. We also present dynamic analysis algorithms for detecting cooperability violations, where thread interference is not documented by a yield, and for yield annotation inference for legacy software. Jaeheon Yi, Caitlin Sadowski, Cormac Flanagan |
PPoPP | 3 |
| 2011 | Cooperative Concurrency for a Multicore World - (Extended Abstract)
Jaeheon Yi, Caitlin Sadowski, Stephen N. Freund, Cormac Flanagan |
RV | 4 |
| 2010 | The RoadRunner dynamic analysis framework for concurrent programsabstractRoadRunner is a dynamic analysis framework designed to facilitate rapid prototyping and experimentation with dynamic analyses for concurrent Java programs. It provides a clean API for communicating an event stream to back-end analyses, where each event describes some operation of interest performed by the target program, such as accessing memory, synchronizing on a lock, forking a new thread, and so on. This API enables the developer to focus on the essential algorithmic issues of the dynamic analysis, rather than on orthogonal infrastructure complexities. Cormac Flanagan, Stephen N. Freund |
PASTE | 1 |
| 2010 | Adversarial memory for detecting destructive racesabstractMultithreaded programs are notoriously prone to race conditions, a problem exacerbated by the widespread adoption of multi-core processors with complex memory models and cache coherence protocols. Much prior work has focused on static and dynamic analyses for race detection, but these algorithms typically are unable to distinguish destructive races that cause erroneous behavior from benign races that do not. Performing this classification manually is difficult, time consuming, and error prone. Cormac Flanagan, Stephen N. Freund |
PLDI | 1 |
| 2010 | Hybrid type checkingabstractTraditional static type systems are effective for verifying basic interface specifications. Dynamically checked contracts support more precise specifications, but these are not checked until runtime, resulting in incomplete detection of defects. Hybrid type checking is a synthesis of these two approaches that enforces precise interface specifications, via static analysis where possible, but also via dynamic checks where necessary. This article explores the key ideas and implications of hybrid type checking, in the context of the λ-calculus extended withcontract types, that is, with dependent function types and with arbitrary refinements of base types. Kenneth L. Knowles, Cormac Flanagan |
ACM Trans. Program. Lang. Syst. | 2 |
| 2009 | SingleTrack: A Dynamic Determinism Checker for Multithreaded Programs
Caitlin Sadowski, Stephen N. Freund, Cormac Flanagan |
ESOP | 3 |
| 2009 | FastTrack: efficient and precise dynamic race detectionabstract\begin{abstract} Cormac Flanagan, Stephen N. Freund |
PLDI | 1 |
| 2008 | Velodrome: a sound and complete dynamic atomicity checker for multithreaded programsabstractAtomicity is a fundamental correctness property in multithreaded programs, both because atomic code blocks are amenable to sequential reasoning (which significantly simplifies correctness arguments), and because atomicity violations often reveal defects in a program's synchronization structure. Unfortunately, all atomicity analyses developed to date are incomplete in that they may yield false alarms on correctly synchronized programs, which limits their usefulness. Cormac Flanagan, Stephen N. Freund, Jaeheon Yi |
PLDI | 1 |
| 2008 | Atomizer: A dynamic atomicity checker for multithreaded programs
Cormac Flanagan, Stephen N. Freund |
Sci. Comput. Program. | 1 |
| 2008 | Types for atomicity: Static checking and inference for JavaabstractAtomicity is a fundamental correctness property in multithreaded programs. A method is atomic if, for every execution, there is an equivalent serial execution in which the actions of the method are not interleaved with actions of other threads. Atomic methods are amenable to sequential reasoning, which significantly facilitates subsequent analysis and verification. This article presents a type system for specifying and verifying the atomicity of methods in multithreaded Java programs using a synthesis of Lipton's theory of reduction and type systems for race detection. The type system supports guarded, write-guarded, and unguarded fields, as well as thread-local data, parameterized classes and methods, and protected locks. We also present an algorithm for verifying atomicity via type inference. We have applied our type checker and type inference tools to a number of commonly used Java library classes and programs. These tools were able to verify the vast majority of methods in these benchmarks as atomic, indicating that atomicity is a widespread methodology for multithreaded programming. In addition, reported atomicity violations revealed some subtle errors in the synchronization disciplines of these programs. Cormac Flanagan, Stephen N. Freund, Marina Lifshin, Shaz Qadeer |
ACM Trans. Program. Lang. Syst. | 1 |
| 2007 | Type Reconstruction for General Refinement Types
Kenneth L. Knowles, Cormac Flanagan |
ESOP | 2 |
| 2007 | Type inference against races
Cormac Flanagan, Stephen N. Freund |
Sci. Comput. Program. | 1 |
| 2006 | Hybrid type checkingabstractTraditional static type systems are very effective for verifying basic interface specifications, but are somewhat limited in the kinds specifications they support. Dynamically-checked contracts can enforce more precise specifications, but these are not checked until run time, resulting in incomplete detection of defects. Hybrid type checking is a synthesis of these two approaches that enforces precise interface specifications, via static analysis where possible, but also via dynamic checks where necessary. This paper explores the key ideas and implications of hybrid type checking, in the context of the simply-typed A-calculus with arbitrary refinements of base types. Cormac Flanagan |
POPL | 1 |
| 2006 | Types for safe locking: Static race detection for JavaabstractThis article presents a static race-detection analysis for multithreaded shared-memory programs, focusing on the Java programming language. The analysis is based on a type system that captures many common synchronization patterns. It supports classes with internal synchronization, classes that require client-side synchronization, and thread-local classes. In order to demonstrate the effectiveness of the type system, we have implemented it in a checker and applied it to over 40,000 lines of hand-annotated Java code. We found a number of race conditions in the standard Java libraries and other test programs. The checker required fewer than 20 additional type annotations per 1,000 lines of code. This article also describes two improvements that facilitate checking much larger programs: an algorithm for annotation inference and a user interface that clarifies warnings generated by the checker. These extensions have enabled us to use the checker for identifying race conditions in large-scale software systems with up to 500,000 lines of code. Martín Abadi, Cormac Flanagan, Stephen N. Freund |
ACM Trans. Program. Lang. Syst. | 2 |
| 2005 | Extending JML for Modular Specification and Verification of Multi-threaded Programs
Edwin Rodríguez, Matthew B. Dwyer, Cormac Flanagan, John Hatcliff, Gary T. Leavens, Robby |
ECOOP | 3 |
| 2005 | Dynamic partial-order reduction for model checking softwareabstractWe present a new approach to partial-order reduction for model checking software. This approach is based on initially exploring an arbitrary interleaving of the various concurrent processes/threads, and dynamically tracking interactions between these to identify backtracking points where alternative paths in the state space need to be explored. We present examples of multi-threaded programs where our new dynamic partial-order reduction technique significantly reduces the search space, even though traditional partial-order algorithms are helpless. Cormac Flanagan, Patrice Godefroid |
POPL | 1 |
| 2005 | Automatic type inference via partial evaluationabstractType checking and type inference are fundamentally similar problems. However, the algorithms for performing the two operations, on the same type system, often differ significantly. The type checker is typically a straightforward encoding of the original type rules. For many systems, type inference is performed using a two-phase, constraint-based algorithm.We present an approach that, given the original type rules written as clauses in a logic programming language, automatically generates an efficient, two-phase, constraint-based type inference algorithm. Our approach works by partially evaluating the type checking rules with respect to the target program to yield a set of constraints suitable for input to an external constraint solver. This approach avoids the need to manually develop and verify a separate type inference algorithm, and is ideal for experimentation with and rapid prototyping of novel type systems. Aaron Tomb, Cormac Flanagan |
PPDP | 2 |
| 2005 | Modular verification of multithreaded programs
Cormac Flanagan, Stephen N. Freund, Shaz Qadeer, Sanjit A. Seshia |
Theor. Comput. Sci. | 1 |
| 2005 | Exploiting Purity for AtomicityabstractMultithreaded programs often exhibit erroneous behavior because of unintended interactions between concurrent threads. This paper focuses on the noninterference property of atomicity. A procedure is atomic if, for every execution, there is an equivalent serial execution in which the actions of the atomic procedure are not interleaved with actions of other threads. This key property makes atomic procedures amenable to sequential reasoning techniques, which significantly facilitates subsequent validation activities such as code inspection and testing. Several existing tools verify atomicity by using commutativity of actions to show that every execution reduces to a corresponding serial execution. However, experiments with these tools have highlighted a number of interesting procedures that, while intuitively atomic, are not reducible. In this paper, we exploit the notion of pure code blocks to verify the atomicity of such irreducible procedures. If a pure block terminates normally, then its evaluation does not change the program state and, hence, these evaluation steps can be removed from the program trace before reduction. We develop a static typed-based analysis for atomicity based on this insight, and we illustrate this analysis on a number of interesting examples that could not be verified using earlier tools based purely on reduction. Cormac Flanagan, Stephen N. Freund, Shaz Qadeer |
IEEE Trans. Software Eng. | 1 |
| 2004 | Atomizer: A Dynamic Atomicity Checker for Multithreaded Programs (Summary)abstractSummary form only given. Ensuring the correctness of multithreaded programs is difficult, due to the potential for unexpected interactions between concurrent threads. We focus on the fundamental noninterference property of atomicity and present a dynamic analysis for detecting atomicity violations. This analysis combines ideas from both Lipton 's theory of reduction and earlier dynamic race detectors such as Eraser. Experimental results demonstrate that this dynamic atomicity analysis is effective for detecting errors due to unintended interactions between threads. In addition, the majority of methods in our benchmarks are atomic, supporting our hypothesis that atomicity is a standard methodology in multithreaded programming. Cormac Flanagan, Stephen N. Freund |
IPDPS | 1 |
| 2004 | Exploiting purity for atomicityabstractAbstract—Multithreaded programs often exhibit erroneous behavior because of unintended interactions between concurrent threads. This paper focuses on the noninterference property of atomicity. A procedure is atomic if, for every execution, there is an equivalent serial execution in which the actions of the atomic procedure are not interleaved with actions of other threads. This key property makes atomic procedures amenable to sequential reasoning techniques, which significantly facilitates subsequent validation activities such as code inspection and testing. Several existing tools verify atomicity by using commutativity of actions to show that every execution reduces to a corresponding serial execution. However, experiments with these tools have highlighted a number of interesting procedures that, while intuitively atomic, are not reducible. In this paper, we exploit the notion of pure code blocks to verify the atomicity of such irreducible procedures. If a pure block terminates normally, then its evaluation does not change the program state and, hence, these evaluation steps can be removed from the program trace before reduction. We develop a static typed-based analysis for atomicity based on this insight, and we illustrate this analysis on a number of interesting examples that could not be verified using earlier tools based purely on reduction. Index Terms—Atomicity, purity, reduction, concurrent programs. 1 Cormac Flanagan, Stephen N. Freund, Shaz Qadeer |
ISSTA | 1 |
| 2004 | Atomizer: a dynamic atomicity checker for multithreaded programsabstractEnsuring the correctness of multithreaded programs is difficult, due to the potential for unexpected interactions between concurrent threads. Much previous work has focused on detecting race conditions, but the absence of race conditions does not by itself prevent undesired thread interactions. We focus on the more fundamental non-interference property of atomicity; a method is atomic if its execution is not affected by and does not interfere with concurrently-executing threads. Atomic methods can be understood according to their sequential semantics, which significantly simplifies (formal and informal) correctness arguments.This paper presents a dynamic analysis for detecting atomicity violations. This analysis combines ideas from both Lipton's theory of reduction and earlier dynamic race detectors. Experience with a prototype checker for multithreaded Java code demonstrates that this approach is effective for detecting errors due to unintended interactions between threads. In particular, our atomicity checker detects errors that would be missed by standard race detectors, and it produces fewer false alarms on benign races that do not cause atomicity violations. Our experimental results also indicate that the majority of methods in our benchmarks are atomic, supporting our hypothesis that atomicity is a standard methodology in multithreaded programming. Cormac Flanagan, Stephen N. Freund |
POPL | 1 |
| 2004 | Type Inference Against Races
Cormac Flanagan, Stephen N. Freund |
SAS | 1 |
| 2004 | Automatic software model checking via constraint logic
Cormac Flanagan |
Sci. Comput. Program. | 1 |
| 2003 | Theorem Proving Using Lazy Proof Explication
Cormac Flanagan, Rajeev Joshi, Xinming Ou, James B. Saxe |
CAV | 1 |
| 2003 | Automatic Software Model Checking Using CLP
Cormac Flanagan |
ESOP | 1 |
| 2003 | A type and effect system for atomicityabstractEnsuring the correctness of multithreaded programs is difficult, due to the potential for unexpected and nondeterministic interactions between threads. Previous work addressed this problem by devising tools for detecting race conditions, a situation where two threads simultaneously access the same data variable, and at least one of the accesses is a write. However, verifying the absence of such simultaneous-access race conditions is neither necessary nor sufficient to ensure the absence of errors due to unexpected thread interactions.We propose that a stronger non-interference property is required, namely atomicity. Atomic methods can be assumed to execute serially, without interleaved steps of other threads. Thus, atomic methods are amenable to sequential reasoning techniques, which significantly simplifies both formal and informal reasoning about program correctness.This paper presents a type system for specifying and verifying the atomicity of methods in multithreaded Java programs. The atomic type system is a synthesis of Lipton's theory of reduction and type systems for race detection.We have implemented this atomic type system for Java and used it to check a variety of standard Java library classes. The type checker uncovered subtle atomicity violations in classes such as java.lang.String and java.lang.String-Buffer that cause crashes under certain thread interleavings.This paper proposes that a stronger non-interference property is required, namely atomicity, and presents a type system for verifying the atomicity of methods in multithreaded Java programs. Methods in a class can be annotated with the keyword atomic. Clients of a well-typed class can then assume that each atomic method is executed in one step, thus significantly simplifying both formal and informal reasoning about the client's correctness. Cormac Flanagan, Shaz Qadeer |
PLDI | 1 |
| 2002 | A Modular Checker for Multithreaded Programs
Cormac Flanagan, Shaz Qadeer, Sanjit A. Seshia |
CAV | 1 |
| 2002 | Thread-Modular Verification for Shared-Memory Programs
Cormac Flanagan, Stephen N. Freund, Shaz Qadeer |
ESOP | 1 |
| 2002 | Extended Static Checking for JavaabstractSoftware development and maintenance are costly endeavors. The cost can be reduced if more software defects are detected earlier in the development cycle. This paper introduces the Extended Static Checker for Java (ESC/Java), an experimental compile-time program checker that finds common programming errors. The checker is powered by verification-condition generation and automatic theorem-proving techniques. It provides programmers with a simple annotation language with which programmer design decisions can be expressed formally. ESC/Java examines the annotated software and warns of inconsistencies between the design decisions recorded in the annotations and the actual code, and also warns of potential runtime errors in the code. This paper gives an overview of the checker architecture and annotation language and describes our experience applying the checker to tens of thousands of lines of Java programs. Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe, Raymie Stata |
PLDI | 1 |
| 2002 | Predicate abstraction for software verificationabstractSoftware verification is an important and difficult problem. Many static checking techniques for software require annotations from the programmer in the form of method specifications and loop invariants. This annotation overhead, particularly of loop invariants, is a significant hurdle in the acceptance of static checking. We reduce the annotation burden by inferring loop invariants automatically.Our method is based on predicate abstraction, an abstract interpretation technique in which the abstract domain is constructed from a given set of predicates over program variables. A novel feature of our approach is that it infers universally-quantified loop invariants, which are crucial for verifying programs that manipulate unbounded data such as arrays. We present heuristics for generating appropriate predicates for each loop automatically; the programmer can specify additional predicates as well. We also present an efficient algorithm for computing the abstraction of a set of states in terms of a collection of predicates.Experiments on a 44KLOC program show that our approach can automatically infer the necessary predicates and invariants for all but 31 of the 396 routines that contain loops. Cormac Flanagan, Shaz Qadeer |
POPL | 1 |
| 2002 | DrScheme: a programming environment for SchemeabstractDrScheme is a programming environment for Scheme. It fully integrates a graphics-enriched editor, a parser for multiple variants of Scheme, a functional read-eval-print loop, and an algebraic printer. The environment is especially useful for students, because it has a tower of syntactically restricted variants of Scheme that are designed to catch typical student mistakes and explain them in terms the students understand. The environment is also useful for professional programmers, due to its sophisticated programming tools, such as the static debugger, and its advanced language features, such as units and mixins. Beyond the ordinary programming environment tools, DrScheme provides an algebraic stepper, a context-sensitive syntax checker, and a static debugger. The stepper reduces Scheme programs to values, according to the reduction semantics of Scheme. It is useful for explaining the semantics of linguistic facilities and for studying the behavior of small programs. The syntax checker annotates programs with font and color changes based on the syntactic structure of the program. On demand, it draws arrows that point from bound to binding occurrences of identifiers. It also supports α-renaming. Finally, the static debugger provides a type inference system that explains specific inferences in terms of a value-flow graph, selectively overlaid on the program text. Robert Bruce Findler, John Clements, Cormac Flanagan, Matthew Flatt, Shriram Krishnamurthi, Paul Steckler, Matthias Felleisen |
J. Funct. Program. | 3 |
| 2001 | Detecting race conditions in large programsabstractThe race condition checker \rcc{} statically identifies potential races in concurrent Java programs. This paper describes improvements to \rcc{} that enable it to be used on large, realistic programs. These improvements include not only extensions to the underlying analysis, but also an annotation inference algorithm and a user interface to help programmers understand warnings generated by the tool. Experience with programs containing up to 500,000 lines of code indicate that it is an effective tool for identifying races in large-scale software systems. Cormac Flanagan, Stephen N. Freund |
PASTE | 1 |
| 2001 | Avoiding exponential explosion: generating compact verification conditionsabstractCurrent verification condition (VC) generation algorithms, such as weakest preconditions, yield a VC whose size may be exponential in the size of the code fragment being checked. This paper describes a two-stage VC generation algorithm that generates compact VCs whose size is worst-case quadratic in the size of the source fragment, and is close to linear in practice.This two-stage VC generation algorithm has been implemented as part of the Extended Static Checker for Java. It has allowed us to check large and complex methods that would otherwise be impossible to check due to time and space constraints. Cormac Flanagan, James B. Saxe |
POPL | 1 |
| 2001 | Annotation inference for modular checkers
Cormac Flanagan, Rajeev Joshi, K. Rustan M. Leino |
Inf. Process. Lett. | 1 |
| 2000 | Type-based race detection for JavaabstractThis paper presents a static race detection analysis for multithreaded Java programs. Our analysis is based on a formal type system that is capable of capturing many common synchronization patterns. These patterns include classes with internal synchronization, classes thatrequire client-side synchronization, and thread-local classes. Experience checking over 40,000 lines of Java code with the type system demonstrates that it is an effective approach for eliminating races conditions. On large examples, fewer than 20 additional type annotations per 1000 lines of code were required by the type checker, and we found a number of races in the standard Java libraries and other test programs. Cormac Flanagan, Stephen N. Freund |
PLDI | 1 |
| 1999 | Object Types against Races
Cormac Flanagan, Martín Abadi |
CONCUR | 1 |
| 1999 | Types for Safe Locking
Cormac Flanagan, Martín Abadi |
ESOP | 1 |
| 1999 | The Semantics of Future and an ApplicationabstractThe future annotation of MultiLisp provides a simple method for taming the implicit parallelism of functional programs. Prior research on future has concentrated on implementation and design issues, and has largely ignored the development of a semantic characterization of future . This paper considers an idealized functional language with futures and presents a series of operational semantics with increasing degrees of intensionality. The first semantics defines future to be a semantically transparent annotation. The second semantics interprets a future expression as a potentially parallel task. The third semantics explicates the coordination of parallel tasks by introducing placeholder objects and touch operations. We use the last semantics to derive a program analysis algorithm and an optimization algorithm that removes provably redundant touch operations. Experiments with the Gambit compiler indicate that this optimization significantly reduces the overhead imposed by touch operations. Cormac Flanagan, Matthias Felleisen |
J. Funct. Program. | 1 |
| 1999 | Componential Set-Based AnalysisabstractSet-based analysis (SBA) produces good predictions about the behavior of functional and object-oriented programs. The analysis proceeds by inferring constraints that characterize the data flow relationships of the analyzed program. Experiences with MrSpidey, a static debugger based on SBA, indicate that SBA can adequately deal with programs of up to a couple of thousand lines of code. SBA fails, however, to cope with larger programs because it generates systems of constraints that are at least linear, and possibility quadratic, in the size of the analyzed program. This article presents theoretical and practical results concerning methods for reducing the size of constraint systems. The theoretical results include of proof-theoretic characterization of the observable behavior of constraint systems for program components, and a complete algorithm for deciding the observable equivalence of constraint systems. In the course of this development we establish a close connection between the observable equivalence of constraint systems and the equivalence of regular-tree grammars. We then exploit this connection to adapt a variety of algoirthms for simplifying grammars to the problem of simplifying constraint systems. Based on the resulting algorithms, we have developed componential set-based analysis , a modular and polymorphic variant of SBA. Experimental results verify the effectiveness of the simplification algorithms and the componential analysis. The simplified constraint systems are typically an order of magnitude smaller than the original systems. These reductions in size produce significant gains in the speed of the analysis. Cormac Flanagan, Matthias Felleisen |
ACM Trans. Program. Lang. Syst. | 1 |
| 1997 | Componential Set-Based AnalysisabstractSet based analysis is a constraint-based whole program analysis that is applicable to functional and object-oriented programming language. Unfortunately, the analysis is useless for large programs, since it generates descriptions of data flow relationships that grow quadratically in the size of the program.This paper presents componential set-based analysis, which is faster and handles larger programs without any loss of accuracy over set-based analysis. The design of the analysis exploits a number of theoretical results concerning constraint systems, including a completeness result and a decision algorithm concerning the observable equivalance of constraint systems. Experimental results validate the practically of the analysis. Cormac Flanagan, Matthias Felleisen |
PLDI | 1 |
| 1996 | pHluid: The Design of a Parallel Functional Language Implementation on WorkstationsabstractThis paper describes the distributed memory implementation of a shared memory parallel functional language. The language is Id, an implicitly parallel, mostly functional language that is currently evolving into a dialect of Haskell. The target is a distributed memory machine, because we expect these to be the most widely available parallel platforms in the future. The difficult problem is to bridge the gap between the shared memory language model and the distributed memory machine model. The language model assumes that all data is uniformly accessible, whereas the machine has a severe memory hierarchy: a processor's access to remote memory (using explicit communication) is orders of magnitude slower than its access to local memory. Thus, avoiding communication is crucial for good performance. The Id language, and its general dataflow-inspierd compilation to multithreaded code are described elsewhere. In this paper, we focus on our new parallel runtime system and its features for avoiding communication and for tolerating its latency when necessary: multithreading, scheduling and load balancing; the distributed heap model and distributed coherent cacheing, and parallel garbage collection. We have completed the first implementation, and we present some preliminary performance mearsurements. Cormac Flanagan, Rishiyur S. Nikhil |
ICFP | 1 |
| 1996 | Static Debugging: Browsing the Web of Program InvariantsabstractMrSpidey is a user-friendly, interactive static debugger for Scheme. A static debugger supplements the standard debugger by analyzing the program and pinpointing those program operations that may cause run-time errors such as dereferencing the null pointer or applying non-functions. The program analysis of MrSpidey computes value set descriptions for each term in the program and constructs a value flow graph connecting the set descriptions. Using the set descriptions, MrSpidey can identify and highlight potentially erroneous program operations, whose cause the programmer can then explore by selectively exposing portions of the value flow graph. Cormac Flanagan, Matthew Flatt, Shriram Krishnamurthi, Stephanie Weirich, Matthias Felleisen |
PLDI | 1 |
| 1995 | The Semantics of Future and Its Use in Program OptimizationsabstractThe future annotations of MultiLisp provide a simple method for taming the implicit parallelism of functional programs. Past research concerning futures has focused on implementation issues. In this paper, we present a series of operational semantics for an idealized functional language with futures with varying degrees of intensionality. We develop a set-based analysis algorithm from the most intensional semantics, and use that algorithm to perform touch optimization on programs. Experiments with the Gambit compiler indicates that this optimization substantially reduces program execution times. 1 Implicit Parallelism via Annotations Programs in functional languages offer numerous opportunities for executing program components in parallel. In a call-by-value language, for example, the evaluation of every function application could spawn a parallel thread for each sub-expression. However, if such a strategy were applied indiscriminately, the execution of a program would generate far t... Cormac Flanagan, Matthias Felleisen |
POPL | 1 |
| 1993 | The Essence of Compiling with ContinuationsabstractIn order to simplify the compilation process, many compilers for higher-order languages use the continuation-passing style (CPS) transformation in a first phase to generate an intermediate representation of the source program. The salient aspect of this intermediate form is that all procedures take an argument that represents the rest of the computation (the “continuation”). Since the nai¨ve CPS transformation considerably increases the size of programs, CPS compilers perform reductions to produce a more compact intermediate representation. Although often implemented as a part of the CPS transformation, this step is conceptually a second phase. Finally, code generators for typical CPS compilers treat continuations specially in order to optimize the interpretation of continuation parameters. Cormac Flanagan, Amr Sabry, Bruce F. Duba, Matthias Felleisen |
PLDI | 1 |