EDBT 2026 Demo / reviewers in the wild / expert
Stephen N. Freund
dblp:93/2065
· DBLP profile ↗
37ranked-venue papers
6as first author
2since 2021 · last 2025
0009-0000-6992-199XORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 31 · 3 first-author · 1 since 2021Systems, architecture and hardware · 2Human-computer interaction and ubiquitous computing · 2 · 2 first-author · 1 since 2021Artificial intelligence and machine learning · 1 · 1 first-authorTheory of computation · 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
18 papers |
Concurrent programming · 57% Program verification · 22% Programming languages and type systems · 12% | |
| Databases, data mining, and information retrieval
1 paper |
Data integration and cleaning · 100% |
Topics — the 30 heaviest of 35, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
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.7 | 7 | 2017 | BigFoot: static check placement for dynamic race detection · PLDI 2017 Adversarial memory for detecting destructive races · PLDI 2010 FastTrack: efficient and precise dynamic race detection · PLDI 2009 |
Concurrent programming › concurrency bug detection
data race detection |
0.6 | 6 | 2017 | BigFoot: static check placement for dynamic race detection · PLDI 2017 Adversarial memory for detecting destructive races · PLDI 2010 Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 |
Program analysis
dynamic analysis |
0.5 | 4 | 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 |
Programming languages and type systems
type systems |
0.4 | 8 | 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 |
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 |
Concurrent programming › concurrency verification
atomicity verification |
0.2 | 3 | 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 |
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 |
Concurrent programming
concurrent data structures |
0.1 | 1 | 2018 | VerifiedFT: a verified, high-performance precise dynamic race detector · PPoPP 2018 |
Program analysis
static analysis |
0.1 | 2 | 2006 | Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 Type-based race detection for Java · PLDI 2000 |
Programming languages and type systems › type systems › behavioral type systems
atomicity type system |
0.1 | 1 | 2008 | Types for atomicity: Static checking and inference for Java · ACM Trans. Program. Lang. Syst. 2008 |
Programming languages and type systems
bytecode verification |
0.1 | 3 | 1999 | The type system for object initializatiion in the Jave bytecode language · ACM Trans. Program. Lang. Syst. 1999 A Formal Framework for the Java Bytecode Language and Verifier · OOPSLA 1999 A Type System for Object Initialization in the Java Bytecode Language · OOPSLA 1998 |
Program verification
annotation inference |
0.1 | 1 | 2006 | Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 |
Programming languages and type systems › type systems
type annotations |
0.1 | 1 | 2006 | Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 |
Programming languages and type systems › information flow control
noninterference |
0.1 | 2 | 2004 | Atomizer: a dynamic atomicity checker for multithreaded programs · POPL 2004 Exploiting purity for atomicity · ISSTA 2004 |
Concurrent programming › concurrency bugs
thread interference |
0.0 | 1 | 2012 | Cooperative types for controlling thread interference in Java · ISSTA 2012 |
Memory systems
cache coherence |
0.0 | 1 | 2010 | Adversarial memory for detecting destructive races · PLDI 2010 |
Memory systems › memory consistency
memory consistency model |
0.0 | 1 | 2010 | Adversarial memory for detecting destructive races · PLDI 2010 |
Program verification
correctness conditions |
0.0 | 1 | 2008 | Velodrome: a sound and complete dynamic atomicity checker for multithreaded programs · PLDI 2008 |
Systems and software security › program analysis
bytecode verification |
0.0 | 1 | 1999 | The type system for object initializatiion in the Jave bytecode language · ACM Trans. Program. Lang. Syst. 1999 |
Programming languages and type systems › type systems
object initialization |
0.0 | 1 | 1999 | The type system for object initializatiion in the Jave bytecode language · ACM Trans. Program. Lang. Syst. 1999 |
Concurrent programming › concurrency bugs
data races |
0.0 | 1 | 2006 | Types for safe locking: Static race detection for Java · ACM Trans. Program. Lang. Syst. 2006 |
Programming languages and type systems › type systems › polymorphism
generics |
0.0 | 1 | 1997 | Adding Type Parameterization to the Java Language · OOPSLA 1997 |
Program analysis
type-based analysis |
0.0 | 1 | 2005 | Exploiting Purity for Atomicity · IEEE Trans. Software Eng. 2005 |
Runtime systems and virtual machines › virtual machine implementation
java virtual machine |
0.0 | 1 | 1999 | The type system for object initializatiion in the Jave bytecode language · ACM Trans. Program. Lang. Syst. 1999 |
Programming languages and type systems › type systems
type soundness |
0.0 | 1 | 1999 | A Formal Framework for the Java Bytecode Language and Verifier · OOPSLA 1999 |
Methods — techniques the papers use, named apart from their topics
large language model · 0.9commutativity reasoning · 0.5adaptive online algorithm · 0.4reduction proofs · 0.4dynamic race detection · 0.4dynamic analysis · 0.4static analysis · 0.4mechanical verification · 0.3type system · 0.3shadow memory compression · 0.3yield annotations · 0.1adversarial memory · 0.1static verification · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2025 | Flowco: Mixed-Initiative Authoring of Reliable End-to-End Data Analyses via Dataflow Graphs and LLMs
Stephen N. Freund, Brooke Simon, Emery D. Berger, Eunice Jun |
UIST | 1 |
| 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 | 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. | 2 |
| 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 | 3 |
| 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 | 3 |
| 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 | 3 |
| 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 | 4 |
| 2015 | Cooperative types for controlling thread interference in Java
Jaeheon Yi, Tim Disney, Stephen N. Freund, Cormac Flanagan |
Sci. Comput. Program. | 3 |
| 2013 | RedCard: Redundant Check Elimination for Dynamic Race Detectors
Cormac Flanagan, Stephen N. Freund |
ECOOP | 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 | 3 |
| 2012 | Dynamic Analyses for Data-Race Detection
John Erickson, Stephen N. Freund, Madan Musuvathi |
RV | 2 |
| 2011 | Cooperative Concurrency for a Multicore World - (Extended Abstract)
Jaeheon Yi, Caitlin Sadowski, Stephen N. Freund, Cormac Flanagan |
RV | 3 |
| 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 | 2 |
| 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 | 2 |
| 2009 | SingleTrack: A Dynamic Determinism Checker for Multithreaded Programs
Caitlin Sadowski, Stephen N. Freund, Cormac Flanagan |
ESOP | 2 |
| 2009 | FastTrack: efficient and precise dynamic race detectionabstract\begin{abstract} Cormac Flanagan, Stephen N. Freund |
PLDI | 2 |
| 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 | 2 |
| 2008 | Atomizer: A dynamic atomicity checker for multithreaded programs
Cormac Flanagan, Stephen N. Freund |
Sci. Comput. Program. | 2 |
| 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. | 2 |
| 2007 | Type inference against races
Cormac Flanagan, Stephen N. Freund |
Sci. Comput. Program. | 2 |
| 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. | 3 |
| 2005 | Modular verification of multithreaded programs
Cormac Flanagan, Stephen N. Freund, Shaz Qadeer, Sanjit A. Seshia |
Theor. Comput. Sci. | 2 |
| 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. | 2 |
| 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 | 2 |
| 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 | 2 |
| 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 | 2 |
| 2004 | Type Inference Against Races
Cormac Flanagan, Stephen N. Freund |
SAS | 2 |
| 2003 | Run-Time Type Checking for Binary Programs
Michael Burrows, Stephen N. Freund, Janet L. Wiener |
CC | 2 |
| 2003 | A Type System for the Java Bytecode Language and Verifier
Stephen N. Freund, John C. Mitchell |
J. Autom. Reason. | 1 |
| 2002 | Thread-Modular Verification for Shared-Memory Programs
Cormac Flanagan, Stephen N. Freund, Shaz Qadeer |
ESOP | 2 |
| 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 | 2 |
| 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 | 2 |
| 1999 | A Formal Framework for the Java Bytecode Language and VerifierabstractThis paper presents a sound type system for a large subset of the Java bytecode language including classes, interfaces, constructors, methods, exceptions, and bytecode subroutines. This work serves as the foundation for developing a formal specification of the bytecode language and the Java Virtual Machine's bytecode verifier. We also describe a prototype implementation of a type checker for our system and discuss some of the other applications of this work. For example, we show how to extend our work to examine other program properties, such as the correct use of object locks. Stephen N. Freund, John C. Mitchell |
OOPSLA | 1 |
| 1999 | The type system for object initializatiion in the Jave bytecode languageabstractIn the standard Java implementation, a Java language program is compiled to Java bytecode. This bytecode may be sent across the network to another site, where it is then executed by the Java Virtual Machine. Since bytecode may be written by hand, or corrupted during network transmission, the Java Virtual Machine contains a bytecode verifier that performs a number of consistency checks before code is run. These checks include type correctness and, as illus-trated by previous attacks on the Java Virtual Machine, are critical for system security. In order to analyze existing bytecode verifiers and to understand the properties that should be verified, we develop a precise specification of statically correct Java bytecode, in the form of a type system. Our focus in this article is a subset of the bytecode language dealing with object creation and initialization. For this subset, we prove, that, for every Java bytecode program that satisfies our typing constraints, every object is initialized before it is used. The type system is easily combined with a previous system developed by Stata and Abadi for bytecode subroutines. Our analysis of subroutines and object initialization reveals a previously unpub-lished bug in the Sun JDK bytecode verifier. Stephen N. Freund, John C. Mitchell |
ACM Trans. Program. Lang. Syst. | 1 |
| 1998 | A Type System for Object Initialization in the Java Bytecode LanguageabstractIn the standard Java implementation, a Java language program is compiled to Java bytecode. This bytecode may be sent across the network to another site, where it is then interpreted by the Java Virtual Machine. Since bytecode may be written by hand, or corrupted during network transmission, the Java Virtual Machine contains a bytecode verifier that performs a number of consistency checks before code is interpreted. As illustrated by previous attacks on the Java Virtual Machine, these tests, which include type correctness, are critical for system security. In order to analyze existing bytecode verifiers and to understand the properties that should be verified, we develop a precise specification of statically-correct Java bytecode, in the form of a type system. Our focus in this paper is a subset of the bytecode language dealing with object creation and initialization. For this subset, we prove that for every Java bytecode program that satisfies our typing constraints, every object is initialized before it is used. The type system is easily combined with a previous system developed by Stata and Abadi for bytecode subroutines. Our analysis of subroutines and object initialization reveals a previously unpublished bug in the Sun JDK bytecode verifier. Stephen N. Freund, John C. Mitchell |
OOPSLA | 1 |
| 1997 | Adding Type Parameterization to the Java LanguageabstractAlthough the Java programming language has achieved widespread acceptance, one feature that seems sorely missed is the ability to use type parameters (as in Ada generics, C++ templates, and ML polymorphic functions or data types) to allow a general concept to be instantiated to one or more specific types. In this paper, we propose parameterized classes and interfaces in which the type parameter may be constrained to either implement a given interface or extend a given class. This design allows the body of a parameterized class to refer to methods on objects of the parameter type, without introducing any new type relations into the language. We show that these Java extensions may be implemented by expanding parameterized classes at class load time, without any extension or modification to existing Java bytecode, verifier or bytecode interpreter. Ole Agesen, Stephen N. Freund, John C. Mitchell |
OOPSLA | 2 |
| 1996 | Thetis: an ANSI C programming environment designed for introductory useabstractCommercially available compilers, particularly those used for languages like ANSI C that have extensive commercial applicability, are not well-suited to students in introductory computer science courses because they assume a level of sophistication that beginning students do not possess.To alleviate this problem at Stanford, we have developed the Thetis programming environment designed specifically for student use.The system consists of a C interpreter and associated user interface that provides students with simple and easily understood editing, debugging, and visualization capabilities.Reactions of students and instructors indicate that Thetis fulfills the goals we set out to accomplish and provides a significantly better learning environment for students in CS l/CS2. Stephen N. Freund, Eric Roberts 0001 |
SIGCSE | 1 |