ambienttalk: object-oriented event-driven programming in...
TRANSCRIPT
![Page 1: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/1.jpg)
Tom Van Cutsem Stijn Mostinckx Elisa Gonzalez Boix Jessie Dedecker Wolfgang De Meuter
Programming Technology LabVrije Universiteit Brussel
Brussels, Belgium
XXVI Intl. Conf. of the Chilean Computer Science Society, Iquique, Chile, Nov 2007
AmbientTalk: Object-orientedEvent-driven programming in
Mobile Ad hoc Networks
![Page 2: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/2.jpg)
Context
2
Hardware
Software
Pervasive Computing (Mobile Networks)
Object-oriented programming languages
![Page 3: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/3.jpg)
Context
2
Hardware
Software
Pervasive Computing (Mobile Networks)
Object-oriented programming languages
![Page 4: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/4.jpg)
Mobile Ad hoc Networks
3
![Page 5: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/5.jpg)
Mobile Ad hoc Networks
3
Volatile Connections
![Page 6: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/6.jpg)
Mobile Ad hoc Networks
3
Volatile Connections
Scarce Infrastructure
![Page 7: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/7.jpg)
Loose Coupling
4
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 8: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/8.jpg)
Loose Coupling
4
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 9: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/9.jpg)
Loose Coupling
4
asynchronous
send
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 10: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/10.jpg)
Loose Coupling
4
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 11: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/11.jpg)
Loose Coupling
4
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 12: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/12.jpg)
Loose Coupling
4
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 13: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/13.jpg)
Loose Coupling
4
asynchronous
receive
reduces impact of volatile connections
Decoupling communication in Time & Synchronisation
![Page 14: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/14.jpg)
Loose Coupling
5
enables ad hoc anonymous collaborations
Decoupling communication in Space
![Page 15: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/15.jpg)
Loose Coupling
5
enables ad hoc anonymous collaborations
Decoupling communication in Space
![Page 16: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/16.jpg)
Loose Coupling
5
enables ad hoc anonymous collaborations
Decoupling communication in Space
provide service
![Page 17: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/17.jpg)
Loose Coupling
5
enables ad hoc anonymous collaborations
Decoupling communication in Space
require serviceprovide service
![Page 18: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/18.jpg)
Ubiquitous Flea Market
6
Example: buy/sell concert tickets to proximate peers
offer
demand
![Page 19: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/19.jpg)
Ubiquitous Flea Market
6
Example: buy/sell concert tickets to proximate peers
offer
demand
![Page 20: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/20.jpg)
AmbientTalk: the language
• Distributed object-oriented language
• Event-driven concurrency based on actors [Agha86]
• Future-type asynchronous message sends
• Built-in publish/subscribe engine for service discovery of remote objects
7
![Page 21: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/21.jpg)
AmbientTalk: the project
• Started in 2005
• Small team: 3-6 people
• Interpreter
• Pure Java implementation
• Runs on J2ME/CDC phones
8
![Page 22: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/22.jpg)
def Item := object: { def category; def description; def ownerContactInfo; def init(c,d,o) { category := c; description := d; ownerContactInfo := o; } def getContactInfo() { ownerContactInfo } def placeSupply() {...} def placeDemand() {...}}
Objects
9
def ticket := Item.new(ConcertTicket,”...”,”...”);ticket.placeDemand();
• Prototype-based
• Objects are created:
• anonymously
• by cloning others
![Page 23: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/23.jpg)
Extensible language
10
def fac(n) { (n = 0).ifTrue: { 1 } ifFalse: { n * fac(n-1) }}
• Block closures
• Keyworded messages
• Interfacing with JVM
![Page 24: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/24.jpg)
Extensible language
10
def fac(n) { (n = 0).ifTrue: { 1 } ifFalse: { n * fac(n-1) }}
def Button := jlobby.java.awt.Button;def b := Button.new(”test”);b.addActionListener(object: { def actionPerformed(ae) { println(”button pressed”); }});
• Block closures
• Keyworded messages
• Interfacing with JVM
![Page 25: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/25.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
Based on E programming language [Miller05]
![Page 26: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/26.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
‘local’ object
Based on E programming language [Miller05]
![Page 27: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/27.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
‘local’ object
obj
obj.m()
Based on E programming language [Miller05]
![Page 28: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/28.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
‘local’ object ‘remote’ object
Based on E programming language [Miller05]
![Page 29: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/29.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
‘local’ object ‘remote’ object
obj
obj<-m()
Based on E programming language [Miller05]
![Page 30: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/30.jpg)
Event loop concurrency
11
Actor
Message queue Event loop
‘local’ object ‘remote’ object
Actors cannot cause deadlock
No race conditions on objects
obj
obj<-m()
Based on E programming language [Miller05]
![Page 31: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/31.jpg)
Futures
12
advertisement
def future := advertisement<-getContactInfo()
![Page 32: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/32.jpg)
Futures
12
advertisement
def future := advertisement<-getContactInfo()
![Page 33: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/33.jpg)
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
![Page 34: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/34.jpg)
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
![Page 35: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/35.jpg)
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
![Page 36: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/36.jpg)
when: future becomes: { |contactInfo| println(“contact seller: “ + contactInfo)}
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
![Page 37: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/37.jpg)
when: future becomes: { |contactInfo| println(“contact seller: “ + contactInfo)}
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
contactInfo
![Page 38: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/38.jpg)
when: future becomes: { |contactInfo| println(“contact seller: “ + contactInfo)}
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
contactInfo
![Page 39: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/39.jpg)
when: future becomes: { |contactInfo| println(“contact seller: “ + contactInfo)}
Futures
12
advertisement
def future := advertisement<-getContactInfo()
?future
contactInfo
![Page 40: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/40.jpg)
Exporting objects
13
item
![Page 41: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/41.jpg)
Exporting objects
13
item
deftype ConcertTicket;
def Item := object: { def category; // a type tag ... def placeSupply() { export: item as: category; }}
![Page 42: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/42.jpg)
def placeDemand() { whenever: category discovered: {|item| ... }}
Service Discovery
14
<closure>
![Page 43: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/43.jpg)
def placeDemand() { whenever: category discovered: {|item| ... }}
Service Discovery
14
<closure> item
![Page 44: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/44.jpg)
def placeDemand() { whenever: category discovered: {|item| ... }}
Service Discovery
14
<closure> item
![Page 45: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/45.jpg)
item<closure>
Failure handling
15
item<-getContactInfo()
![Page 46: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/46.jpg)
item<closure> remote ref
Failure handling
15
item<-getContactInfo()
![Page 47: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/47.jpg)
item<closure> remote ref
Failure handling
15
item<-getContactInfo()
![Page 48: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/48.jpg)
item<closure> remote ref
Failure handling
15
item<-getContactInfo()
![Page 49: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/49.jpg)
item<closure> remote ref
Failure handling
15
when: item disconnected: { println(“Item no longer available”)}
when: item reconnected: { println(“Item available again”)}
item<-getContactInfo()
![Page 50: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/50.jpg)
item<closure> remote ref
Failure handling
15
when: item disconnected: { println(“Item no longer available”)}
when: item reconnected: { println(“Item available again”)}
item<-getContactInfo()
![Page 51: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/51.jpg)
whenever: category discovered: { |item| when: item<-getContactInfo() becomes: { |contactInfo| println(“contact seller: “ + contactInfo) } when: item disconnected: { println(“Item no longer available”) }}
Events + Objects
• Block closures as first-class event-handlers
• preserve state (all lexically visible variables)
• can be arbitrarily nested
• Leads to less ‘inversion of control’
16
![Page 52: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/52.jpg)
whenever: category discovered: { |item| when: item<-getContactInfo() becomes: { |contactInfo| println(“contact seller: “ + contactInfo) } when: item disconnected: { println(“Item no longer available”) }}
Events + Objects
• Block closures as first-class event-handlers
• preserve state (all lexically visible variables)
• can be arbitrarily nested
• Leads to less ‘inversion of control’
16
![Page 53: AmbientTalk: Object-oriented Event-driven programming in ...soft.vub.ac.be/~tvcutsem/talks/presentations/AmbientTalk2-SCCC.pdf · AmbientTalk: Object-oriented Event-driven programming](https://reader035.vdocuments.us/reader035/viewer/2022062916/5ebbee5d36a8515b776a2be2/html5/thumbnails/53.jpg)
Conclusion
• MANETs → loosely coupled collaboration
• AmbientTalk: event-driven OO language
• Buffered asynchronous messages: tolerate temporary network failures by default
• Built-in service discovery: no servers required
17
http://prog.vub.ac.be/amop
Volatile Connections → time & sync-decoupling
Scarce Infrastructure → space-decoupling