Gavin M. Bierman

dblp:b/GavinMBierman · DBLP profile ↗
← Back
30ranked-venue papers
16as first author
0since 2021 · last 2017
—ORCID · none

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

Software engineering, systems software and programming languages · 20 · 11 first-authorDatabases, data management, data science and information retrieval · 5 · 2 first-authorTheory of computation · 5 · 3 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
8 papers
Programming languages and type systems · 68% Compilers and program optimization · 10% Program verification · 9%
Databases, data mining, and information retrieval
4 papers
Query processing and optimization · 52% Data models and query languages · 43% Data integration and cleaning · 6%

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

TopicWeightPapersLastEvidence papers
Programming languages and type systems › type systems
gradual typing
0.422015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Gradual typing embedded securely in JavaScript · POPL 2014
Programming languages and type systems
type systems
0.332015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Mutatis Mutandis: Safe and predictable dynamic software updating · ACM Trans. Program. Lang. Syst. 2007
Mutatis mutandis: safe and predictable dynamic software updating · POPL 2005
Data models and query languages › database programming language
language-integrated query
0.322014
Code Generation for Efficient Query Processing in Managed Runtimes · Proc. VLDB Endow. 2014
LINQ: reconciling object, relations and XML in the .NET framework · SIGMOD Conference 2006
Compilers and program optimization
run-time checks
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Programming languages and type systems › type systems › gradual typing
sound gradual typing
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Programming languages and type systems › type systems
soundness
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Query processing and optimization › query compilation
code generation for query execution
0.212014
Code Generation for Efficient Query Processing in Managed Runtimes · Proc. VLDB Endow. 2014
Query processing and optimization › query execution
in-memory query processing
0.212014
Code Generation for Efficient Query Processing in Managed Runtimes · Proc. VLDB Endow. 2014
Query processing and optimization
query compilation
0.212014
Code Generation for Efficient Query Processing in Managed Runtimes · Proc. VLDB Endow. 2014
Program verification › program logic
separation logic
0.122008
Separation logic, abstraction and inheritance · POPL 2008
Separation logic and abstraction · POPL 2005
Software maintenance and evolution
dynamic software updating
0.122007
Mutatis Mutandis: Safe and predictable dynamic software updating · ACM Trans. Program. Lang. Syst. 2007
Mutatis mutandis: safe and predictable dynamic software updating · POPL 2005
Data models and query languages
impedance mismatch
0.122007
Lost in translation: formalizing proposed extensions to c# · OOPSLA 2007
LINQ: reconciling object, relations and XML in the .NET framework · SIGMOD Conference 2006
Programming languages and type systems
inheritance
0.112008
Separation logic, abstraction and inheritance · POPL 2008
Programming languages and type systems
object-oriented programming
0.112008
Separation logic, abstraction and inheritance · POPL 2008
Programming languages and type systems › language design
language extension
0.112007
Lost in translation: formalizing proposed extensions to c# · OOPSLA 2007
Program analysis
static analysis
0.112007
Mutatis Mutandis: Safe and predictable dynamic software updating · ACM Trans. Program. Lang. Syst. 2007
Data integration and cleaning › schema mapping
object-relational mapping
0.112006
LINQ: reconciling object, relations and XML in the .NET framework · SIGMOD Conference 2006
Systems and software security
language-based security
0.112014
Gradual typing embedded securely in JavaScript · POPL 2014
Runtime systems and virtual machines
managed runtime
0.112014
Code Generation for Efficient Query Processing in Managed Runtimes · Proc. VLDB Endow. 2014
Program verification
modular verification
0.112005
Separation logic and abstraction · POPL 2005
Data models and query languages
formal semantics
0.012003
Formal semantics and analysis of object queries · SIGMOD Conference 2003
Data models and query languages › query language
object-oriented query language
0.012003
Formal semantics and analysis of object queries · SIGMOD Conference 2003
Data models and query languages
type system
0.012003
Formal semantics and analysis of object queries · SIGMOD Conference 2003
Data models and query languages
XML query languages
0.012006
LINQ: reconciling object, relations and XML in the .NET framework · SIGMOD Conference 2006
Query processing and optimization
query optimization
0.012003
Formal semantics and analysis of object queries · SIGMOD Conference 2003

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

query compilation · 0.4language-integrated query · 0.4simulation proof · 0.2runtime checks · 0.2formalization · 0.1static analysis · 0.1core calculus · 0.1abstract predicates · 0.1type system · 0.0operational semantics · 0.0effect system · 0.0
YearPublicationVenuePosition
2017 Self-managed collections: Off-heap memory management for scalable query-dominated collections
abstract
Explosive growth in DRAM capacities and the emergence of language-integrated query enable a new class of managed applications that perform complex query processing on huge volumes of data stored as collections of objects in the memory space of the application. While more flexible in terms of schema design and application development, this approach typically experiences sub-par query execution performance when compared to specialized systems like DBMS. To address this issue, we propose self-managed collections, which utilize off-heap memory management and dynamic query compilation to improve the performance of querying managed data through language-integrated query. We evaluate self-managed collections using both microbenchmarks and enumeration-heavy queries from the TPC-H business intelligence benchmark. Our results show that self-managed collections outperform ordinary managed collections in both query processing and memory management by up to an order of magnitude and even outperform an optimized in memory columnar database system for the vast majority of queries.
Fabian Nagel, Gavin M. Bierman, Aleksandar Dragojevic, Stratis Viglas
EDBT2
2015 Safe & Efficient Gradual Typing for TypeScript
abstract
Current proposals for adding gradual typing to JavaScript, such as Closure, TypeScript and Dart, forgo soundness to deal with issues of scale, code reuse, and popular programming patterns. We show how to address these issues in practice while retaining soundness. We design and implement a new gradual type system, prototyped for expediency as a 'Safe' compilation mode for TypeScript. Our compiler achieves soundness by enforcing stricter static checks and embedding residual runtime checks in compiled code. It emits plain JavaScript that runs on stock virtual machines. Our main theorem is a simulation that ensures that the checks introduced by Safe TypeScript (1) catch any dynamic type error, and (2) do not alter the semantics of type-safe TypeScript code.
Aseem Rastogi, Nikhil Swamy, Cédric Fournet, Gavin M. Bierman, Panagiotis Vekris
POPL4
2014 Understanding TypeScript
Gavin M. Bierman, Martín Abadi, Mads Torgersen
ECOOP1
2014 Gradual typing embedded securely in JavaScript
abstract
JavaScript's flexible semantics makes writing correct code hard and writing secure code extremely difficult. To address the former problem, various forms of gradual typing have been proposed, such as Closure and TypeScript. However, supporting all common programming idioms is not easy; for example, TypeScript deliberately gives up type soundness for programming convenience. In this paper, we propose a gradual type system and implementation techniques that provide important safety and security guarantees.
Nikhil Swamy, Cédric Fournet, Aseem Rastogi, Karthikeyan Bhargavan, Juan Chen 0002, Pierre-Yves Strub, Gavin M. Bierman
POPL7
2014 Code Generation for Efficient Query Processing in Managed Runtimes
abstract
In this paper we examine opportunities arising from the convergence of two trends in data management: in-memory database systems (imdbs), which have received renewed attention following the availability of affordable, very large main memory systems; and language-integrated query, which transparently integrates database queries with programming languages (thus addressing the famous 'impedance mismatch' problem). Language-integrated query not only gives application developers a more convenient way to query external data sources like imdbs, but also to use the same querying language to query an application's in-memory collections. The latter offers further transparency to developers as the query language and all data is represented in the data model of the host programming language. However, compared to imdbs, this additional freedom comes at a higher cost for query evaluation. Our vision is to improve in-memory query processing of application objects by introducing database technologies to managed runtimes. We focus on querying and we leverage query compilation to improve query processing on application objects. We explore different query compilation strategies and study how they improve the performance of query processing over application data. We take C# as the host programming language as it supports language-integrated query through the linq framework. Our techniques deliver significant performance improvements over the default linq implementation. Our work makes important first steps towards a future where data processing applications will commonly run on machines that can store their entire datasets in-memory, and will be written in a single programming language employing language-integrated query and imdb-inspired runtimes to provide transparent and highly efficient querying.
Fabian Nagel, Gavin M. Bierman, Stratis Viglas
Proc. VLDB Endow.2
2012 Pause 'n' Play: Formalizing Asynchronous C#
Gavin M. Bierman, Claudio V. Russo, Geoffrey Mainland, Erik Meijer 0001, Mads Torgersen
ECOOP1
2012 Semantic subtyping with an SMT solver
abstract
Abstract We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on a Satisfiability Modulo Theories solver to compute subtyping efficiently. Moreover, using a satisfiability modulo theories solver allows us to show the uniqueness of normal forms for non-deterministic expressions, provide precise counterexamples when type-checking fails, detect empty types, and compute instances of types statically and at run-time.
Gavin M. Bierman, Andrew D. Gordon 0001, Catalin Hritcu, David E. Langworthy
J. Funct. Program.1
2012 Extending relational algebra with similarities
abstract
In this paper we propose various extensions to the relational model to support similarity-based querying. We build upon the -relation model, where tuples are assigned values from an arbitrary semiring , and its associated positive relational algebra $\text{RA}^{+}_{\mathcal{K}}$ . We consider a recently proposed extension to $\text{RA}^{+}_{\mathcal{K}}$ using a monus operation on the semiring to support negative queries, and show how, surprisingly, it fails for important ‘fuzzy’ semirings. Instead, we suggest using a negation operator. We also consider the identities satisfied by the relational algebra $\text{RA}^{+}_{\mathcal{K}}$ . We show that moving from a semiring to a particular form of lattice (a De Morgan frame) yields a relational algebra that satisfies all the classical (positive) relational algebra identities. We claim that to support real-world similarity queries realistically, one must move from tuple-level annotations to attribute-level annotations. We show in detail how our De Morgan frame-based model can be extended to support attribute-level annotations and give worked examples of similarity queries in this setting.
Melita Hajdinjak, Gavin M. Bierman
Math. Struct. Comput. Sci.2
2010 Adding Dynamic Types to C#
Gavin M. Bierman, Erik Meijer 0001, Mads Torgersen
ECOOP1
2010 Semantic subtyping with an SMT solver
abstract
We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on an SMT solver to compute subtyping efficiently. Moreover, interpreting types as formulas allows us to call the SMT solver at run-time to compute instances of types.
Gavin M. Bierman, Andrew D. Gordon 0001, Catalin Hritcu, David E. Langworthy
ICFP1
2009 A theory of typed coercions and its applications
abstract
A number of important program rewriting scenarios can be recast as type-directed coercion insertion. These range from more theoretical applications such as coercive subtyping and supporting overloading in type theories, to more practical applications such as integrating static and dynamically typed code using gradual typing, and inlining code to enforce security policies such as access control and provenance tracking. In this paper we give a general theory of type-directed coercion insertion. We specifically explore the inherent tradeoff between expressiveness and ambiguity--the more powerful the strategy for generating coercions, the greater the possibility of several, semantically distinct rewritings for a given program. We consider increasingly powerful coercion generation strategies, work out example applications supported by the increased power (including those mentioned above), and identify the inherent ambiguity problems of each setting, along with various techniques to tame the ambiguities.
Nikhil Swamy, Michael Hicks 0001, Gavin M. Bierman
ICFP3
2008 UpgradeJ: Incremental Typechecking for Class Upgrades
Gavin M. Bierman, Matthew J. Parkinson, James Noble 0001
ECOOP1
2008 Separation logic, abstraction and inheritance
abstract
Inheritance is a fundamental concept in object-oriented programming, allowing new classes to be defined in terms of old classes. When used with care, inheritance is an essential tool for object-oriented programmers. Thus, for those interested in developing formal verification techniques, the treatment of inheritance is of paramount importance. Unfortunately, inheritance comes in a number of guises, all requiring subtle techniques.
Matthew J. Parkinson, Gavin M. Bierman
POPL2
2008 Information systems preface
Gavin M. Bierman, Christoph Koch 0001
Inf. Syst.1
2008 Dynamic rebinding for marshalling and update, via redex-time and destruct-time reduction
abstract
Abstract Most programming languages adopt static binding, but for distributed programming an exclusive reliance on static binding is too restrictive: dynamic binding is required in various guises, for example, when a marshalled value is received from the network, containing identifiers that must be rebound to local resources. Typically, it is provided only by ad hoc mechanisms that lack clean semantics. In this paper, we adopt a foundational approach, developing core dynamic rebinding mechanisms as extensions to the simply typed call-by-value λ calculus. To do so, we must first explore refinements of the call-by-value reduction strategy that delay instantiation, to ensure computations make use of the most recent versions of rebound definitions. We introduce redex - time and destruct - time strategies. The latter forms the basis for a λ marsh calculus that supports dynamic rebinding of marshalled values, while remaining as far as possible statically typed. We sketch an extension of λ marsh with concurrency and communication, giving examples showing how wrappers for encapsulating untrusted code can be expressed. Finally, we show that a high-level semantics for dynamic updating can also be based on the destruct-time strategy, defining a λ update calculus with simple primitives to provide type-safe updating of running code. We show how the ideas of this simple calculus extend to more real-world, module-level dynamic updating in the style of Erlang. We thereby establish primitives and a common semantic foundation for a variety of real-world dynamic rebinding requirements.
Peter Sewell, Gareth Paul Stoyle, Michael Hicks 0001, Gavin M. Bierman, Keith Wansbrough
J. Funct. Program.4
2007 Lost in translation: formalizing proposed extensions to c#
abstract
Current real-world software applications typically involve heavy use of relational and XML data and their query languages. Unfortunately object-oriented languages and database query languages are based on different semantic foundations and optimization strategies. The resulting ''ROX (Relations, Objects, XML) impedance mismatc'' makes life very difficult for developers.
Gavin M. Bierman, Erik Meijer 0001, Mads Torgersen
OOPSLA1
2007 Mutatis Mutandis: Safe and predictable dynamic software updating
abstract
This article presents Proteus, a core calculus that models dynamic software updating, a service for fixing bugs and adding features to a running program. Proteus permits a program's type structure to change dynamically but guarantees the updated program remains type-correct by ensuring a property we call con-freeness. We show how con-freeness can be enforced dynamically, and how it can be approximated via a novel static analysis. This analysis can be used to assess the implications of a program's structure on future updates in order to make update success more predictable. We have implemented Proteus for C, and briefly discuss our implementation which we have tested on several well-known programs.
Gareth Paul Stoyle, Michael Hicks 0001, Gavin M. Bierman, Peter Sewell, Iulian Neamtiu
ACM Trans. Program. Lang. Syst.3
2006 LINQ: reconciling object, relations and XML in the .NET framework
abstract
Many software applications today need to handle data from different data models; typically objects from the host programming language along with the relational and XML data models. The ROX impedance mismatch makes programs awkward to write and hard to maintain.The .NET Language-Integrated Query (LINQ) framework, proposed for the next release of the .NET framework, approaches this problem by defining a pattern of general-purpose standard query operators for traversal, filter, and projection. Based on this pattern, any .NET language can define special query comprehension syntax that is subsequently compiled into these standard operators (our code examples are in VB).Besides the general query operators, the LINQ framework also defines two domain specific APIs that work over XML (XLinq) and relational data (DLinq) respectively. The operators over XML use a lightweight and easy to use in-memory XML representation to provide XQuery-style expressiveness in the host programming language. The operators over relational data provide a simple OR mapping by leveraging remotable queries that are executed directly in the back-end relational store.
Erik Meijer 0001, Brian Beckman, Gavin M. Bierman
SIGMOD Conference3
2005 The Essence of Data Access in Comega
Gavin M. Bierman, Erik Meijer 0001, Wolfram Schulte
ECOOP1
2005 First-Class Relationships in an Object-Oriented Language
Gavin M. Bierman, Alisdair Stuart Wren
ECOOP1
2005 Separation logic and abstraction
abstract
In this paper we address the problem of writing specifications for programs that use various forms of modularity, including procedures and Java-like classes. We build on the formalism of separation logic and introduce the new notion of an abstract predicate and, more generally, abstract predicate families. This provides a flexible mechanism for reasoning about the different forms of abstraction found in modern programming languages, such as abstract datatypes and objects. As well as demonstrating the soundness of our proof system, we illustrate its utility with a series of examples.
Matthew J. Parkinson, Gavin M. Bierman
POPL2
2005 Mutatis mutandis: safe and predictable dynamic software updating
abstract
Dynamic software updates can be used to fix bugs or add features to a running program without downtime. Essential for some applications and convenient for others, low-level dynamic updating has been used for many years. Perhaps surprisingly, there is little high-level understanding or language support to help programmers write dynamic updates effectively.To bridge this gap, we present Proteus, a core calculus for dynamic software updating in C-like languages that is flexible, safe, and predictable. Proteus supports dynamic updates to functions (even active ones), to named types and to data, allowing on-line evolution to match source-code evolution as we have observed it in practice. We ensure updates are type-safe by checking for a property we call "con-freeness" for updated types t at the point of update. This means that non-updated code will not use t concretely beyond that point (concrete usages are via explicit coercions) and thus t's representation can safely change. We show how con-freeness can be enforced dynamically for a particular program state. We additionally define a novel and efficient static updateability analysis to establish con-freeness statically, and can thus automatically infer program points at which all future (well-formed) updates will be type-safe. We have implemented our analysis for C and tested it on several well-known programs.
Gareth Paul Stoyle, Michael Hicks 0001, Gavin M. Bierman, Peter Sewell, Iulian Neamtiu
POPL3
2003 Dynamic rebinding for marshalling and update, with destruct-time?
abstract
Most programming languages adopt static binding, but for distributed programming an exclusive reliance on static binding is too restrictive: dynamic binding is required in various guises, for example when a marshalled value is received from the network, containing identifiers that must be rebound to local resources. Typically it is provided only by ad-hoc mechanisms that lack clean semantics.In this paper we adopt a foundational approach, developing core dynamic rebinding mechanisms as extensions to simply-typed call-by-value ? -calculus. To do so we must first explore refinements of the call-by-value reduction strategy that delay instantiation, to ensure computations make use of the most recent versions of rebound definitions. We introduce redex-time and destruct-time strategies. The latter forms the basis for a ?marsh calculus that supports dynamic rebinding of marshalled values, while remaining as far as possible statically-typed. We sketch an extension of ? marsh with concurrency and communication, giving examples showing how wrappers for encapsulating untrusted code can be expressed. Finally, we show that a high-level semantics for dynamic updating can also be based on the destruct-time strategy, defining a ?marsh calculus with simple primitives to provide type-safe updating of running code. We thereby establish primitives and a common semantic foundation for a variety of real-world dynamic rebinding requirements.
Gavin M. Bierman, Michael Hicks 0001, Peter Sewell, Gareth Paul Stoyle, Keith Wansbrough
ICFP1
2003 Formal semantics and analysis of object queries
abstract
Modern database systems provide not only powerful data models but also complex query languages supporting powerful features such as the ability to create new database objects and invocation of arbitrary methods (possibly written in a third-party programming language).In this sense query languages have evolved into powerful programming languages. Surprisingly little work exists utilizing techniques from programming language research to specify and analyse these query languages. This paper provides a formal, high-level operational semantics for a complex-value OQL-like query language that can create fresh database objects, and invoke external methods. We define a type system for our query language and prove an important soundness property.We define a simple effect typing discipline to delimit the computational effects within our queries. We prove that this effect system is correct and show how it can be used to detect cases of non-determinism and to define correct query optimizations.
Gavin M. Bierman
SIGMOD Conference1
2001 Strong Normalisation of Cut-Elimination in Classical Logic
Christian Urban, Gavin M. Bierman
Fundam. Informaticae2
2000 Program equivalence in a linear functional language
abstract
Researchers have recently proposed that for certain applications it is advantageous to use functional languages whose type systems are based upon linear logic: so-called linear functional languages. In this paper we develop reasoning techniques for programs in a linear functional language, linPCF , based on their operational behaviour. The principal theorem of this paper is to show that contextual equivalence of linPCF programs can be characterised coinductively. This characterisation provides a tractable method for reasoning about contextual equivalence, and is used in three ways: [bull ] A number of useful contextual equivalences between linPCF programs is given. [bull ] A notion of type isomorphism with respect to contextual equivalence, called operational isomorphism, is given. In particular the types !ϕ[otimes ]!ψ and !(ϕ&ψ) are proved to be operationally isomorphic. [bull ] A translation of non-strict PCF into linPCF is shown to be adequate, but not fully abstract, with respect to contextual equivalence.
Gavin M. Bierman
J. Funct. Program.1
1999 A Classical Linear lambda-Calculus
Gavin M. Bierman
Theor. Comput. Sci.1
1998 A Computational Interpretation of the lambda-µ-Calculus
Gavin M. Bierman
MFCS1
1998 Computational Types from a Logical Perspective
abstract
Moggi's computational lambda calculus is a metalanguage for denotational semantics which arose from the observation that many different notions of computation have the categorical structure of a strong monad on a cartesian closed category. In this paper we show that the computational lambda calculus also arises naturally as the term calculus corresponding (by the Curry–Howard correspondence) to a novel intuitionistic modal propositional logic. We give natural deduction, sequent calculus and Hilbert-style presentations of this logic and prove strong normalisation and confluence results.
Nick Benton, Gavin M. Bierman, Valeria de Paiva
J. Funct. Program.2
1996 A Note on Full Intuitionistic Linear Logic
Gavin M. Bierman
Ann. Pure Appl. Log.1