Actors without Borders:
Amnesty for Imprisoned State
Elias Castegren, Tobias Wrigstad PLACES’17, Uppsala
sa Structured Aliasing
Actors without Borders: Amnesty for Imprisoned State Elias Castegren - - PowerPoint PPT Presentation
Actors without Borders: Amnesty for Imprisoned State Elias Castegren , Tobias Wrigstad PLACES17, Uppsala sa Structured Aliasing The Actor Model 2 Actor Isolation allows Sequential Reasoning 3 Passing Data Between Actors (by copy) 4
Elias Castegren, Tobias Wrigstad PLACES’17, Uppsala
sa Structured Aliasing2
3
4
4
for i in [0..len-1] val x = l!get(i) transmogrify(x) end Quadratic complexity
6
val iter = l!iter() while iter.hasNext() val x = iter.getNext() transmogrify(x) end Linear complexity Subject to data-races! iter
7
l!iter() while l!hasNext() val x = l!getNext() transmogrify(x) end
Forces complexity on the actor l!iter() while l!hasNext() val x = l!getNext() transmogrify(x) end
8
iter
Holding a reference to an isolated object is OK as long as only the owner accesses it
9
10
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end hasNext
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end λ _ . iter.hasNext()
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end λ _ . iter.hasNext() Linear complexity All accesses synchronised
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end Linear complexity All accesses synchronised iter
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end Linear complexity All accesses synchronised
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end Linear complexity All accesses synchronised I bestow thee with activity!
val iter = l!iter() while iter!hasNext() val x = iter!getNext() transmogrify(x) end Linear complexity All accesses synchronised Actor kept simple
actor A var c : C def foo() : unit … end def bar() : unit … end def getC : bestowed[C] bestow this.c end end class C def beep() : unit … end def boop() : unit … end end
14
actor A var c : C def foo() : unit … end def bar() : unit … end def getC : bestowed[C] bestow this.c end end class C def beep() : unit … end def boop() : unit … end end
14
15
Passive type Bestowed type Actor type Message send Bestowing Bestowed value
15
Passive type Bestowed type Actor type Message send Bestowing Bestowed value
15
16
16
17
18
19
19
20
Atomic blocks to group operations Implementation sketches Polymorphic concurrency control
21
l!apply(f, 2) l!apply(f, 3)
23
l!apply(f, 2) l!apply(f, 3)
23
l!apply(f, 2) l!apply(f, 3)
23
l!apply(f, 2) l!apply(f, 3)
?
23
atomic l l!apply(f, 2) l!apply(f, 3) end
24
atomic l l!apply(f, 2) l!apply(f, 3) end
24
atomic l l!apply(f, 2) l!apply(f, 3) end
24
atomic l l!apply(f, 2) l!apply(f, 3) end
24
atomic l l.apply(f, 2) l.apply(f, 3) end
25
def foo(l : safe List) : unit val iter = l.iter() atomic iter iter.apply(f) iter.apply(f) end
def foo(l : safe List) : unit val iter = l.iter() atomic iter iter.apply(f) iter.apply(f) end
Bestowed
Atomic blocks to group operations Implementation sketches Polymorphic concurrency control
28