460 likes | 472 Views
This paper explores the concept of existential quantification for variant ownership, which statically partitions the heap and organizes objects into a hierarchical structure. This approach improves reasoning about programs, affects concurrency, memory management, and garbage collection. It discusses the many flavors of ownership, including parametric ownership, encapsulation properties, ownership hierarchy, and more. The paper also delves into the use of existential types and their bounds, as well as the motivation and goals of the proposed approach.
E N D
Nicholas Cameron Sophia Drossopoulou Imperial College London (Victoria University of Wellington) ncameron@ecs.vuw.ac.nz Existential Quantification forVariant Ownership
Ownership • Statically partitions the heap • Organises objects into an hierarchical structure • Improves reasoning about programs • Effects • Concurrency • Memory Management • Garbage Collection • Many flavours • Encapsulation properties
Ownership • Parametric ownership • Each object is owned by a context • context object owner • Classes and types are parameterised by contexts
Ownership • Classes are parameterised by formal contexts • class C<o1, o2> {...} • o1 is the owner of objects of class C • o2 is another context
Ownership • Types are parameterised by actual contexts • class C<o1, o2> {...} • C<this, this> • this • C<world, o> • World, formal contexts • C<x, f> • Final variables, final fields
Ownership • Ownership hierarchy • o1:C<o3, a> • o2:C<o4, a> • o1 is insideo3 • o2 is insideo4 • If o4 is insideo3then o2 is insideo3
Existential Types • Used to model abstraction • ƎX.(X→int) • Or variance in generic object-oriented languages • ƎX.List<X> • List<?> (Java wildcards)
Existential Types • Bounds • ƎX→[Merino Animal].List<X> • Merino <: X <: Animal
Existential Types • Safe covariance: • ƎX→[ Sheep].List<X> <:ƎX→[ Animal].List<X> • List<? ◄ Sheep> <:List<? ◄ Animal>
Existential Types • Packing • pack(List<A>) = ƎX.List<X> • A is hidden – it is the witness type • close expression
Existential Types • Unpacking • unpack(ƎX.List<X>) =List<Z> • Z is a fresh type variable • open expression
Motivation • Desire for variance • +, -, * in Variant Ownership Types • Lu, Potter, ECOOP '06 • ? in MOJO • Cameron, Drossopoulou, Noble, Smith, OOPSLA '07 • any/readonly in Universes • Müller, Dietl, et al., many papers • any in Effective Ownership • Lu, Potter, POPL '06 • ...
Motivation • All tailor-made solutions • No connection to established type theory • Limited expressivity
Motivation • E.g., ? in MOJO • Strict substitution • If ? In .... • Strict method and field lookup • Permeates entire calculus • Additional subtype rules
JoƎ • Goals: • Expressivity • Uniformity
JoƎ • Existential quantification of contexts • Parametrisation by typesandcontexts • This combination gives improved expressivity
JoƎ Class List<owner, X> { List<owner, X> next; X datum; X get() {...} void add(X x) {...} }context parameters type parameters
JoƎ • Generics and quantification for expressivity: • List<this, Sheep<this>> • Ǝo.List<o, Sheep<this>> • Ǝo.List<this, Sheep<o>> • List<this, Ǝo.Sheep<o>> • Ǝo.List<o, Sheep<o>>
JoƎ • Flexible ownership language • Parametric methods • Type and context parameters • Actual contexts • Explicit unpacking • Upper and lower bounds on formal contexts
JoƎ • Upper and lower bounds on formal contexts • Ǝo→[o5 o2].Sheep<o> • o is insideo2 • o5 is insideo
JoƎ • Uniform • Uses only the purest form of existential types • No special cases to support variance • No tailored annotations • Variance is dealt with locally • Direct relation to long history of research on existential types
JoƎ • Describes the topology of the heap • This topology is fixed, not variant • Type sound • Static description of topology reflects heap at runtime • Ownership hierarchy can 'grow', but not 'mutate' • Useful • e.g. effects
JoƎ • Can encode other systems • Generic Universes • Dietl, Drossoploulou, Müller, ECOOP '07 • Existential owners for downcasting • Wrigstad, Clarke, JOT, May '07 • Variant Ownership Types? • Lu, Potter, ECOOP '06 • Single owner case of MOJO • Cameron, Drossopoulou, Noble, Smith, OOPSLA '07
JoƎ • Three environments • Variable environment
JoƎ • Owner environment • Quantified contexts are unpacked here • Does not affect this rule
JoƎ • Type environment • Owner bounds
JoƎ • Substitute receiver for this
JoƎ • Receiver cannot be arbitrary expression • But no loss of expressivity • Thanks to open expression
JoƎ • Receiver must have class type • Forces unpacking • Don't account for quantification here
Summary • Parametric ownership+ Existential quantification of contexts+ Generics= JoƎ • Expressive and Uniform • Can encode existing systems
ncameron@ecs.vuw.ac.nz Thank you!
Ownership • Encapsulation • Owners-as-Dominators • Owners-as-Modifiers • Link Soundness • ... • Owners-as-Dominators • All paths through the heap to an object are dominated by that object's owner • Common for parametric ownership systems • Useful for garbage collection, memory management, ...
Ownership • Owners-as-Dominators
Ownership • Owners-as-Modifiers
JoƎdeep • Owners-as-Dominators • Strong encapsulation property • Very small modifications • Well-formed heap • Well-formed classes • Class type checking
JoƎdeep • Treat existentially quantified context variables as their lower bounds • Owners-as-dominators involves showing referenced objects are outside their owners • If the lower bound is outside, then the hidden context must be outside