Tribal Ownership Nicholas Cameron James Noble Tobias Wrigstad Victoria University of Wellington Uppsala University
Tribe c1:Canvas world s1:Shape s2:Shape r1:Rectangle c2:Canvas s3:Shape s4:Shape r2:Rectangle c3:InCanvas...
Ownership c1:Canvas world s1:Shape s2:Shape r1:Rectangle c2:Canvas s3:Shape s4:Shape r2:Rectangle c3:InCanvas...
Tribal Ownership c1:Canvas world s1:Shape s2:Shape r1:Rectangle c2:Canvas s3:Shape s4:Shape r2:Rectangle c3:InCanvas...
? Questions
Virtual Classes Nested Classes Family Polymorphism Class Families Nested Inheritance...
Virtual Classes Scala Newspeak GBeta...
Tribe class Canvas { class Shape {... } class Circle extends Shape {... } class Rectangle extends Shape {... }... } class ICanvas extends Canvas { class Shape { void onClick() {... } }
Tribe class Canvas { class Shape {... } class Circle extends Shape {... } class Rectangle extends Shape {... }... } class InCanvas extends Canvas { class Shape { void onClick() {... } }
10 Tribe Canvas Shape Circle Rectangle
Tribe Canvas Shape Circle Rectangle InCanvas Shape Circle Rectangle onClick()
Canvas Shape Circle Rectangle InCanvas Shape Circle Rectangle onClick()
Tribe c1:Canvas world s1:Shape s2:Shape r1:Rectangle c2:Canvas s3:Shape s4:Shape r2:Rectangle c3:InCanvas...
c1.Shape c2.Shape Tribe Types
class Canvas { this.Shape f1; world.Canvas f2; class Shape { this.out.out.Canvas f3; this.out.Circle f4; } class Circle extends Shape {... } } Tribe Types
Tribe Types class Canvas { this.Shape f1; world.Canvas f2; class Shape {... } } :Canvas f1:Shape world f2:Canvasf4:Canvas f3:Circle :Shape
Tribe Types :Canvas f1:Shape world f2:Canvasf4:Canvas f3:Circle :Shape class Canvas {... class Shape { this.out.Circle f3; this.out.out.Canvas f4; }
Ownership Types
class List { ListNode first;... } class ListNode { ListNode next; Object datum;... } new List (); Ownership Types
? What if...
c1:Canvas world s1:Shape r1:Rectangle c2:Canvas s3:Shape r2:Rectangle
c1.Shape Tribal Ownership
class Canvas { this.Shape f1; world.Canvas f2; class Shape { this.out.Circle f3; this.out.out.Canvas f4; } class Circle extends Shape {... } } Tribe
class Canvas { this.Shape f1; world.Canvas f2; class Shape { this.out.Circle f3; this.out.out.Canvas f4; } class Circle extends Shape {... } } Tribal Ownership
class List { ListNode first;... } class ListNode { ListNode next; Object datum;... } new List (); What about List?
class List { this.ListNode first; class ListNode { this.out.ListNode next; X datum;... }... } new this.List (); What about List? - Generics
class List { this.ListNode first; class ListNode { this.out.ListNode next; X datum;... }... } new this.List (); What about List? - Generics
class List { this.ListNode first; class ListNode { this.out.ListNode next; X datum;... }... } new this.List (); What about List?
module Collections { class List {... } class Foo imports world.Collections { this.List f; } What about List? – Module classes
Encapsulation
Owners-as-Dominators Owners-as-Modifiers Encapsulation
Descriptive Ownership
O-as-D
Owners-as-Local-Dominators Encapsulation
O-as-LD
O-as-LD private public Only public classes can be named externally
Virtual classes in Tribe give ownership – No syntactic overhead Generics Module classes – Cross family inheritance Owners-as-Local-Dominators Summary
Thank you!
? Questions