Abstract:
Modern object-oriented programming languages support many techniques that simplify
the work of a programmer. Among them is generic types: the ability to create generic
descriptions of algorithms and object structures that will be automatically specialised by
supplying the type information when they are used. At the same time, object-oriented
technologies still suffer from aliasing: the case of many objects in a program's memory
referring to the same object via different references.
Ownership types enforce encapsulation in object-oriented programs by ensuring that
objects cannot be referred to from the outside of the object(s) that own them. Existing
ownership programming languages either do not support generic types or attempt to add
them on top of ownership restrictions.
The goal of this work is to bring object ownership into mainstream object-oriented
programming languages. This thesis presents Generic Ownership which provides perobject
ownership on top of a generic imperative language. Surprisingly, the resulting
system not only provides ownership guarantees comparable to the established systems,
but also requires few additional language mechanisms to achieve them due to full reuse of
generic types.
In this thesis I formalise the core of Generic Ownership, highlighting that the restriction
of this calls, owner preservation over subtyping, and appropriate owner nesting are the
only necessary requirements for ownership. I describe two formalisms: (1) a simple
formalism, capturing confinement in a functional setting, and (2) a complete formalism,
providing a way for Generic Ownership to support both deep and shallow variations of
ownership types.
I support the formal work by describing how the Ownership Generic Java (OGJ)
language is implemented as a minimal extension to Java 5. OGJ is the first publicly
available language implementation that supports ownership, confinement, and generic
types at the same time. I demonstrate OGJ in practice: show how to use OGJ to write
programs and provide insights into the implementations of Generic Ownership.