Download presentation
Presentation is loading. Please wait.
Published byNickolas Pennel Modified over 9 years ago
1
Supervised by: Dr Sophia Drossopoulou, Dr Nobuko Yoshida ncameron@doc.ic.ac.uk http://www.nicholascameron.co.uk Wildcards, Variance and Virtual Classes Nicholas Cameron Transfer Talk
2
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Halfway Already… oParametric Polymorphism and Subtype Variance oJava Wildcards oGenerics and wildcards oProgramming with wildcards oFormalising wildcards oVirtual Classes oVirtual Types oVirtual Classes oTribe oParametric types
3
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Parametric Polymorphism * * Disclaimer: I don’t really write my shopping list in Excel.
4
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Parametric Polymorphism
5
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Parametric Polymorphism
6
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Parametric Polymorphism
7
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Parametric Polymorphism
8
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Generics class List { X get(int i)... void add(X x)... } List l = new List (); l.add(new Dog()); Dog d = l.get(0);
9
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Virtual Types class List { virtual type X; X get(int i)... void add(X x)... } class DogList extends List { X = Dog; }
10
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Invariance <: Dog <: Animal
11
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Invariance List
12
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcards
13
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London ? o? May be used as an actual type argument oA list of some type (but we don’t know (or care) which type) void m(List aList)...
14
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Bounds oWildcards can have upper and lower bounds oub is a list of some type that is a subtype of Animal olb is a list of some type that is a supertype of Dog void m(List ub)... void m(List lb)...
15
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Subtype Variance List
16
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Subtype Variance oCovariance oContravariance List
17
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London The trade-off void m1(List l) { l.add(new Dog()); //type error Dog d = l.get(0); //ok } void m2(List l) { l.add(new Dog()); //ok Dog d = l.get(0); //type error }
18
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcard Capture oNote: List List oBUT, we can pass it here oCapture conversion void m1(List x) {…} void m2 (List y) { this.m1(y); }
19
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Formalisation JJ
20
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London JJ oExistential types List = X.List List = Y [Dog Object].List
21
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London JJ oCapture = open void m1(List x) {…} void m2 ( Y.List y) { open y as z:List in this. m1(z); }
22
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London JJ oSubtyping List
23
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Back to wildcard capture
24
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcard Capture o...is not subtyping: void m1(List x1, List x2) {…} void m2 (List x1, List x2) { m1(x1, x2); //Type error! }
25
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcard Capture o…requires existential types: void m1(Pair x) {…} Pair m2(List x) {…} void m3 (Pair xx, List x) { m1(xx); //Type error m1(m2(x)); //OK! }
26
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcard Capture oxx: Y,Z.Pair om2(x): Y.Pair void m1(Pair x) {…} Pair m2(List x) {…} void m3 (Pair xx, List x) { m1(xx); //Type error m1(m2(x)); //OK! }
27
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcard Capture om2(x): Y.Pair void m1(Pair x) {…} Pair m2(List x) {…} void m3 ( Y.List x) { open x as y:List in this. m1(this. m2(y)); }
28
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Type System oExpressible but not denotable types oCaused by wildcard capture oSolved by using existential types oPack/close vs. subtyping oModelling capture oSoundness requirement
29
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Soundness
30
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Soundness oChallenges caused by: oType parameters in reduction of open expression oLower bounds oComplexity of formalism
31
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Lemmas ouBound*(lBound( X )) <: uBound*( X ) oC subclassing oT <: R T = R’ oWell formed type environments
32
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Wildcards – further work oFinish proofs oNearly done! oFormalise translation oImperative version
33
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Questions? Thank you! Report: http://www.nicholascameron.co.uk/papers/transfer.pdf
34
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe
35
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe oNested virtual classes class Graph { class Node { } class Edge { Node n1; Node n2; } class ColourGraph extends Graph { class Node { Colour c; }
36
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe oPath dependent types this.out.Node n1.out.Node this.out.n1.out.Edge .Graph.Node class Graph { class Node { } class Edge { Node n1; Node n2; }
37
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe oFlexible, powerful, elegant oUndecidable subtyping? oComplete subtyping?
38
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe – further work oParametric polymorphism and variance oVirtual types? oExtend Tribe with virtual types oGenerics? oOrthogonal? oType variables in paths oGenericity over families
39
Wildcards, Variance and Virtual Classes Nick Cameron, Imperial College London Tribe – further work oDecidable fragment – T 9 oTribal Ownership oProgramming with virtual classes
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.