Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

John Field

dblp:72/4043 · DBLP profile ↗
← Back
24ranked-venue papers
12as first author
0since 2021 · last 2012
0000-0003-3951-6365ORCID · reported

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

Software engineering, systems software and programming languages · 21 · 9 first-authorTheory of computation · 2 · 2 first-author

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

Software engineering, system software, and programming languages
11 papers
Concurrent programming · 36% Program analysis · 23% Programming languages and type systems · 23%
Databases, data mining, and information retrieval
1 paper
Transaction processing and concurrency control · 50% Web and social media mining · 50%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Distributed systems · 100%

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

TopicWeightPapersLastEvidence papers
Web and social media mining › event detection
conflict detection
0.112012
JANUS: exploiting parallelism via hindsight · PLDI 2012
Transaction processing and concurrency control › concurrency control
optimistic concurrency control
0.112012
JANUS: exploiting parallelism via hindsight · PLDI 2012
Concurrent programming › concurrency control
optimistic concurrency control
0.112012
JANUS: exploiting parallelism via hindsight · PLDI 2012
Concurrent programming
synchronization
0.112012
JANUS: exploiting parallelism via hindsight · PLDI 2012
Program analysis
dynamic analysis
0.112011
HAWKEYE: effective discovery of dataflow impediments to parallelization · OOPSLA 2011
Programming languages and type systems
language design
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Concurrent programming
message passing
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Programming languages and type systems
type systems
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Software maintenance and evolution
reverse engineering
0.112006
Semantics-based reverse engineering of object-oriented data models · ICSE 2006
Program analysis
static analysis
0.122002
Deriving Specialized Program Analyses for Certifying Component-Client Conformance · PLDI 2002
Aggregate Structure Identification and Its Application to Program Analysis · POPL 1999
Concurrent programming › concurrency models
actor model
0.112005
Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments · POPL 2005
Distributed systems › fault tolerance
checkpointing
0.112005
Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments · POPL 2005
Distributed systems
distributed coordination
0.112005
Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments · POPL 2005
Distributed systems
fault tolerance
0.112005
Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments · POPL 2005
Programming languages and type systems
equational logic
0.021997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Parametric Program Slicing · POPL 1995
Program analysis › static analysis
program slicing
0.021996
Slicing Class Hierarchies in C++ · OOPSLA 1996
Parametric Program Slicing · POPL 1995
Program analysis
data flow analysis
0.011999
Aggregate Structure Identification and Its Application to Program Analysis · POPL 1999
Program analysis
type analysis
0.011999
Aggregate Structure Identification and Its Application to Program Analysis · POPL 1999
Software maintenance and evolution › software reengineering › software modernization › software migration
code migration
0.012006
Semantics-based reverse engineering of object-oriented data models · ICSE 2006
Compilers and program optimization
intermediate representation
0.011997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Compilers and program optimization
program transformation
0.011997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Compilers and program optimization › program transformation
semantics-preserving transformation
0.011997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Logic in computer science › completeness
complete axiomatization
0.011997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Logic in computer science › algebraic logic
equational logic
0.011997
Toward a Complete Transformational Toolkit for Compilers · ACM Trans. Program. Lang. Syst. 1997
Software maintenance and evolution
program comprehension
0.011996
Slicing Class Hierarchies in C++ · OOPSLA 1996
Programming languages and type systems
term rewriting
0.011995
Parametric Program Slicing · POPL 1995
Program analysis
program representation
0.011999
Aggregate Structure Identification and Its Application to Program Analysis · POPL 1999
Compilers and program optimization › intermediate representation
static single assignment form
0.011999
Aggregate Structure Identification and Its Application to Program Analysis · POPL 1999
Programming languages and type systems
evaluation strategies
0.011990
On Laziness and Optimality in Lambda Interpreters: Tools for Specification and Analysis · POPL 1990
Programming languages and type systems
lambda calculus
0.011990
On Laziness and Optimality in Lambda Interpreters: Tools for Specification and Analysis · POPL 1990

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

conflict detection · 0.3dynamic analysis · 0.2operational semantics · 0.1formal verification · 0.1compiler plugin mechanism · 0.1semantic analysis · 0.1bisimulation · 0.1predicate abstraction · 0.0model checking · 0.0algebraic data types · 0.0lambda calculus · 0.0
YearPublicationVenuePosition
2012 JANUS: exploiting parallelism via hindsight
abstract
This paper addresses the problem of reducing unnecessary conflicts in optimistic synchronization. Optimistic synchronization must ensure that any two concurrently executing transactions that commit are properly synchronized. Conflict detection is an approximate check for this condition. For efficiency, the traditional approach to conflict detection conservatively checks that the memory locations mutually accessed by two concurrent transactions are accessed only for reading.
Omer Tripp, Roman Manevich, John Field, Shmuel Sagiv
PLDI3
2012 Selected Papers from the Eleventh International Conference on Coordination Models and Languages
John Field, Vasco Thudichum Vasconcelos
Sci. Comput. Program.1
2011 HAWKEYE: effective discovery of dataflow impediments to parallelization
abstract
Parallelization transformations are an important vehicle for improving the performance and scalability of a software system. Utilizing concurrency requires that the developer first identify a suitable parallelization scope: one that poses as a performance bottleneck, and at the same time, exhibits considerable available parallelism. However, having identified a candidate scope, the developer still needs to ensure the correctness of the transformation. This is a difficult undertaking, where a major source of complication lies in tracking down sequential dependencies that inhibit parallelization and addressing them.
Omer Tripp, Greta Yorsh, John Field, Shmuel Sagiv
OOPSLA3
2009 Thorn: robust, concurrent, extensible scripting on the JVM
abstract
Scripting languages enjoy great popularity due to their support for rapid and exploratory development. They typically have lightweight syntax, weak data privacy, dynamic typing, powerful aggregate data types, and allow execution of the completed parts of incomplete programs. The price of these features comes later in the software life cycle. Scripts are hard to evolve and compose, and often slow. An additional weakness of most scripting languages is lack of support for concurrency - though concurrency is required for scalability and interacting with remote services. This paper reports on the design and implementation of Thorn, a novel programming language targeting the JVM. Our principal contributions are a careful selection of features that support the evolution of scripts into industrial grade programs - e.g., an expressive module system, an optional type annotation facility for declarations, and support for concurrency based on message passing between lightweight, isolated processes. On the implementation side, Thorn has been designed to accommodate the evolution of the language itself through a compiler plugin mechanism and target the Java virtual machine.
Bard Bloom, John Field, Nathaniel Nystrom, Johan Östlund, Gregor Richards, Rok Strnisa, Jan Vitek, Tobias Wrigstad
OOPSLA2
2009 Reactors: A data-oriented synchronous/asynchronous programming model for distributed applications
John Field, Maria-Cristina V. Marinescu, Christian Stefansen
Theor. Comput. Sci.1
2007 Reactors: A Data-Oriented Synchronous/Asynchronous Programming Model for Distributed Applications
John Field, Maria-Cristina V. Marinescu, Christian Stefansen
COORDINATION1
2006 Semantics-based reverse engineering of object-oriented data models
abstract
We present an algorithm for reverse engineering object-oriented (OO) data models from programs written in weakly-typed languages like Cobol. These models, similar to UML class diagrams, can facilitate a variety of program maintenance and migration activities. Our algorithm is based on a semantic analysis of the program's code, and we provide a bisimulation-based formalization of what it means for an OO data model to be correct for a program.
G. Ramalingam, Raghavan Komondoor, John Field, Saurabh Sinha 0003
ICSE3
2005 Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments
abstract
We introduce transactors, a fault-tolerant programming model for composing loosely-coupled distributed components running in an unreliable environment such as the internet into systems that reliably maintain globally consistent distributed state. The transactor model incorporates certain elements of traditional transaction processing, but allows these elements to be composed in different ways without the need for central coordination, thus facilitating the study of distributed fault-tolerance from a semantic point of view. We formalize our approach via the τ-calculus, an extended lambda-calculus based on the actor model, and illustrate its usage through a number of examples. The τ-calculus incorporates constructs which distributed processes can use to create globally-consistent checkpoints. We provide an operational semantics for the τ-calculus, and formalize the following safety and liveness properties: first, we show that globally-consistent checkpoints have equivalent execution traces without any node failures or application-level failures, and second, we show that it is possible to reach globally-consistent checkpoints provided that there is some bounded failure-free interval during which checkpointing can occur.
John Field, Carlos A. Varela
POPL1
2005 Dependent Types for Program Understanding
Raghavan Komondoor, G. Ramalingam, Satish Chandra 0001, John Field
TACAS4
2005 Typestate verification: Abstraction techniques and complexity results
John Field, Deepak Goyal, G. Ramalingam, Eran Yahav
Sci. Comput. Program.1
2004 Partially Disjunctive Heap Abstraction
Roman Manevich, Shmuel Sagiv, G. Ramalingam, John Field
SAS4
2003 Typestate Verification: Abstraction Techniques and Complexity Results
John Field, Deepak Goyal, G. Ramalingam, Eran Yahav
SAS1
2002 Deriving Specialized Program Analyses for Certifying Component-Client Conformance
abstract
We are concerned with the problem of statically certifying (verifying) whether the client of a software component conforms to the component's constraints for correct usage. We show how conformance certification can be efficiently carried out in a staged fashion for certain classes of first-order safety (FOS) specifications, which can express relationship requirements among potentially unbounded collections of runtime objects. In the first stage of the certification process, we systematically derive an abstraction that is used to model the component state during analysis of arbitrary clients. In general, the derived abstraction will utilize first-order predicates, rather than the propositions often used by model checkers. In the second stage, the generated abstraction is incorporated into a static analysis engine to produce a certifier. In the final stage, the resulting certifier is applied to a client to conservatively determine whether the client violates the component's constraints. Unlike verification approaches that analyze a specification and client code together, our technique can take advantage of computationally-intensive symbolic techniques during the abstraction generation phase, without affecting the performance of client analysis. Using as a running example the Concurrent Modification Problem (CMP), which arises when certain classes defined by the Java Collections Framework are misused, we describe several different classes of certifiers with varying time/space/precision tradeoffs. Of particular note are precise, polynomial-time, flow- and context-sensitive certifiers for certain classes of FOS specifications and client programs. Finally, we evaluate a prototype implementation of a certifier for CMP on a variety of test programs. The results of the evaluation show that our approach, though conservative, yields very few "false alarms," with acceptable performance.
G. Ramalingam, Alex Varshavsky, John Field, Deepak Goyal, Shmuel Sagiv
PLDI3
2002 Compactly Representing First-Order Structures for Static Analysis
Roman Manevich, G. Ramalingam, John Field, Deepak Goyal, Shmuel Sagiv
SAS3
1999 Identifying Procedural Structure in Cobol Programs
abstract
The principal control-flow abstraction mechanism in the Cobol language is the perform statement. Normally, perform statements are used in a straightforward manner to define parameterless procedures (where global variables are used to pass data into and out of procedure bodies). However, unlike most procedural constructs, distinct performed procedures can share code in arbitrarily complicated ways. In addition, performs can also be used in such a way as to cause transfers of control that do not correspond to normal call/return semantics.In this paper, we show how a Cobol program can be efficiently transformed into a semantically-equivalent procedurally well-structured representation, in which conventional procedures (i.e., with the usual call and return semantics and without code sharing) and procedure call statements replace performed code and perform statements. This transformation process properly accounts for the non-procedural control flow that can result from ill-behaved perform statements.The program representation derived from our analysis can be used directly in program understanding applications, program restructuring tools, and inter-language translators. In addition, it can be used as the starting point for a variety of context-sensitive program analyses, e.g., program slicing.
John Field, G. Ramalingam
PASTE1
1999 Aggregate Structure Identification and Its Application to Program Analysis
abstract
In this paper, we describe an efficient algorithm for lazily decomposing aggregates such as records and arrays into simpler components based on the access patterns specific to a given program. This process allows us both to identify implicit aggregate structure not evident from declarative information in the program, and to simplify the representation of declared aggregates when references are made only to a subset of their components. We show that the structure identification process can be exploited to yield the following principal results: - A fast type analysis algorithm applicable to program maintenance applications such as date usage inference for the "Year 2000" problem. - An efficient algorithm for atomization of aggregates. Given a program, an aggregate atomization decomposes all of the data that can be manipulated by the program into a set of disjoint atoms such that each data reference can be modeled as one or more references to atoms without loss of semantic information. Aggregate atomization can be used to adapt program analyses and representations designed for scalar data to aggregate data. In particular, atomization can be used to build more precise versions of program representations such as SSA form or PDGs. Such representations can in turn yield more accurate results for problems such as program slicing.Our techniques are especially useful in weakly-typed languages such as Cobol (where a variable need not be declared as an aggregate to store an aggregate value) and in languages where references to statically-defined subranges of data such as arrays or strings are allowed.
G. Ramalingam, John Field, Frank Tip
POPL2
1998 Dynamic dependence in term rewriting systems and its application to program slicing
John Field, Frank Tip
Inf. Softw. Technol.1
1997 Toward a Complete Transformational Toolkit for Compilers
abstract
PIM is an equational logic designed to function as a “transformational toolkit” for compilers and other programming tools that analyze and manipulate imperative languages. It has been applied to such problems as program slicing, symbolic evaluation, conditional constant propagation, and dependence analysis. PIM consists of the untyped lambda calculus extended with an algebraic data type that characterizes the behavior of lazy stores and generalized conditionals. A graph form of PIM terms is by design closely related to several intermediate representations commonly used in optimizing compilers. In this article, we show that PIM's core algebraic component, PIM t , possesses a complete equational axiomatization (under the assumption of certain reasonable restrictions on term formation). This has the practical consequence of guaranteeing that every semantics-preserving transformation on a program representable in PIM t can be derived by application of PIM t rules. We systematically derive the complete PIM t logic as the culmination of a sequence of increasingly powerful equational systems starting from a straightforward “interpreter” for closed PIM t terms. This work is an intermediate step in a larger program to develop a set of well-founded tools for manipulation of imperative programs by compilers and other systems that perform program analysis.
Jan A. Bergstra, T. B. Dinesh, John Field, Jan Heering
ACM Trans. Program. Lang. Syst.3
1996 A Complete Transformational Toolkit for Compilers
Jan A. Bergstra, T. B. Dinesh, John Field, Jan Heering
ESOP3
1996 Slicing Class Hierarchies in C++
abstract
This paper describes an algorithm for slicing class hierarchies in C++ programs. Given a C++ class hierarchy (a collection of C++ classes and inheritance relations among them) and a program P that uses the hierarchy, the algorithm eliminates from the hierarchy those data members, member functions, classes, and inheritance relations that are unnecessary for ensuring that the semantics of P is maintained.Class slicing is especially useful when the program P is generated from a larger program P' by a statement slicing algorithm. Such an algorithm eliminates statements that are irrelevant to a set of slicing criteria---program points of particular interest. There has been considerable previous work on statement slicing, and it will not be the concern of this paper. However, the combination of statement slicing and class slicing for C++ has two principal applications: First, class slicing can enhance statement slicing's utility in program debugging and understanding applications, by eliminating both executable and declarative program components irrelevant to the slicing criteria. Second, the combination of the two slicing algorithms can be used to decrease the space requirements of programs that do not use all the components of a class hierarchy. Such a situation is particularly common in programs that use class libraries.
Frank Tip, Jong-Deok Choi, John Field, G. Ramalingam
OOPSLA3
1995 Parametric Program Slicing
abstract
Program slicing is a technique for isolating computational threads in programs. In this paper, we show how to mechanically extract a family of practical algorithms for computing slices directly from semantic specifications. These algorithms are based on combining the notion of dynamic dependence tracking in term rewriting systems with a program representation whose behavior is defined via an equational logic. Our approach is distinguished by the fact that changes to the behavior of the slicing algorithm can be accomplished through simple changes in rewriting rules that define the semantics of the program representation. Thus, e.g., different notions of dependence may be specified, properties of language-specific datatypes can be exploited, and various time, space, and precision tradeoffs may be made. This flexibility enables us to generalize the traditional notions of static and dynamic slices to that of a constrained slice, where any subset of the inputs of a program may be supplied.
John Field, G. Ramalingam, Frank Tip
POPL1
1993 A Graph Reduction Approach to Incremental Term Rewriting (Preliminary Report)
John Field
RTA1
1992 A Simple Rewriting Semantics for Realistic Imperative Programs and its Application to Program Analysis
John Field
PEPM1
1990 On Laziness and Optimality in Lambda Interpreters: Tools for Specification and Analysis
abstract
In this paper, we introduce a new formal system, $\Lambda CCL$, based on Curien's Categorical Combinators [Cur86a]. We show that $\Lambda CCL$ has properties that make it especially suitable for analysis and implementation of a wide range of $\lambda$-reduction schemes using shared environments, closures, or $\lambda$-terms. In particular, the term structure of $\Lamda CCL$ is very closely related to the structure of existing abstract machines for $\lambda$-reduction. $\Lambda CCL$ is powerful enough to mimic arbitrary (strong) reduction in the $\lambda$-calculus, yet in contrast to the systems in [Cur86a] it is also confluent (on ground terms).As an example of the practical utility of this formalism, we use it to specify a simple lazy interpreter for the $\lambda$-calculus, whose correctness follows trivially from the properties of $\LambdaCCL$. We then describe a labeled variant of $\Lambda CCL, \Lambda CCL^{L}$, which can be used as a tool to determine the degree of "laziness" possessed by various $\lambda$-reduction schemes. In particular, $\Lambda CCL^{L}$ is applied to the problem of optimal reduction in the $\lambda$-calculus. A reduction scheme for the $\lambda$-calculus is optimal if the number of redex contractions that must be performed in the course of reducing any $\lambda$-term to a normal form (if one exists) is guaranteed to be minimal. Results of Levy [Lev78, Lev80] showed that for a natural class of reduction strategies allowing shared redexes, optimal reductions were, at least in principle, possible. He conjectured that an optimal reduction strategy might be realized in practice using shared closures and environments as well as shared $\lambda$-terms. However, using $\Lambda CCL^{L}$, we show that the sharing allowed by environments and closures in $\Lambda CCL$ as implemented using standard term graph-rewriting techniques [BvEG$^{+}$87] is insufficient to implement optimal reduction.
John Field
POPL1