SlideShare a Scribd company logo
Function-Passing Style 
Typed, Distributed Functional 
Programming 
Heather Miller 
@heathercmiller 
Philipp Haller 
@philippkhaller 
EPFL Typesafe
…been working on 
Language support for distributed 
system builders. 
Serialization 
That happens mostly at compile 
time, so it’s performant. 
Type classes to allow users to 
serialize to different formats 
(binary, JSON, etc) 
1.
…been working on 
Language support for distributed 
system builders. 
Spores 
Portable (serializable) closures. 
Type constraints to restrict what 
they capture 
2.
In this talk… 
A programming model. 
Builds on the basis of serializable 
functions 
to provide a substrate that 
distributed systems can be built 
upon
In this talk… 
A programming model. 
The result… 
the model greatly simplifies the design 
and implementation of mechanisms for: 
Fault-tolerance 
In-memory caching 
Debugging(i.e., pushing types into 
more layers of the stack) 
IN A CLEAN & FUNCTIONAL WAY. 
(STATELESS!)
Note: 
Currently a research project. 
Thus, all aspects of it are under 
development + publication in 
the works. 
(Thanks, )
FUNDAMENTAL 
IDEA:
FUNDAMENTAL 
IDEA: 
Inversion of the actor model. 
Can be thought of as a dual to actors.
FUNDAMENTAL 
IDEA: 
Inversion of the actor model. 
Can be thought of as a dual to actors. 
A DUAL WHICH NICELY 
COMPLEMENTS ACTORS!
Um, 
HOW?
Actors… 
Encapsulate state and behavior. 
Are stationary. 
Actors exchange data/commands 
through asynchronous messaging.
Function-passing… 
Stateless. Built on persistent 
data structures. 
Keep the data stationary. 
Functions are exchanged through 
asynchronous messaging.
Function-passing… 
Stateless. Built on persistent 
data structures. 
Keep the data stationary. 
Functions are exchanged through 
asynchronous messaging. 
Of note: 
This is a model for programming with data and not a new 
model of concurrent processes like actors. 
! 
Instead, we provide a new means of working with 
distributed data in a functional way.
A Note on Distributed Computing 
Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall 
Sun Microsystems Laboratories 
2550 Garcia Avenue 
Mountain View, CA 94043 
1 Introduction 
Much of the current work in distributed, object-oriented 
systems is based on the assumption that objects form a sin-gle 
ontological class. This class consists of all entities that 
can be fully described by the specification of the set of 
interfaces supported by the object and the semantics of the 
operations in those interfaces. The class includes objects 
that share a single address space, objects that are in sepa-rate 
address spaces on the same machine, and objects that 
are in separate address spaces on different machines (with, 
perhaps, different architectures). On the view that all 
1.1 Terminology 
In what follows, we will talk about local and distributed 
computing. By local computing (local object invocation, 
etc.), we mean programs that are confined to a single 
address space. In contrast, we will use the term distributed 
computing (remote object invocation, etc.) to refer to pro-grams 
that make calls to other address spaces, possibly on 
another machine. In the case of distributed computing, 
nothing is known about the recipient of the call (other than 
that it supports a particular interface). For example, the 
client of such a distributed object does not know the hard-ware 
architecture on which the recipient of the call is run-ning,
A Note on Distributed Computing 
Differences in latency, memory access, partial failure, and 
Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall 
concurrency make merging of the computational models of local 
and distributed computing Sun Microsystems both unwise Laboratories 
to attempt and unable to 
succeed. 
2550 Garcia Avenue 
Mountain View, CA 94043 
1 Introduction 
Much of the current work in distributed, object-oriented 
systems is based on the assumption that objects form a sin-gle 
ontological class. This class consists of all entities that 
can be fully described by the specification of the set of 
interfaces supported by the object and the semantics of the 
operations in those interfaces. The class includes objects 
that share a single address space, objects that are in sepa-rate 
address spaces on the same machine, and objects that 
are in separate address spaces on different machines (with, 
perhaps, different architectures). On the view that all 
1.1 Terminology 
In what follows, we will talk about local and distributed 
computing. By local computing (local object invocation, 
etc.), we mean programs that are confined to a single 
address space. In contrast, we will use the term distributed 
computing (remote object invocation, etc.) to refer to pro-grams 
that make calls to other address spaces, possibly on 
another machine. In the case of distributed computing, 
nothing is known about the recipient of the call (other than 
that it supports a particular interface). For example, the 
client of such a distributed object does not know the hard-ware 
architecture on which the recipient of the call is run-ning, 
“ 
”
A Note on Distributed Computing 
Differences in latency, memory access, partial failure, and 
Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall 
concurrency make merging of the computational models of local 
and distributed computing Sun Microsystems both unwise Laboratories 
to attempt and unable to 
succeed. 
2550 Garcia Avenue 
Mountain View, CA 94043 
A better approach is to accept that there are irreconcilable 
differences between local and distributed computing, and to be 
conscious of those differences at all stages of the design and 
implementation of distributed applications. Rather than trying to 
merge local and remote objects, engineers need to be constantly 
reminded of the differences between the two, and know when it 
is appropriate to use each kind of object. 
1 Introduction 
Much of the current work in distributed, object-oriented 
systems is based on the assumption that objects form a sin-gle 
ontological class. This class consists of all entities that 
can be fully described by the specification of the set of 
interfaces supported by the object and the semantics of the 
operations in those interfaces. The class includes objects 
that share a single address space, objects that are in sepa-rate 
address spaces on the same machine, and objects that 
are in separate address spaces on different machines (with, 
perhaps, different architectures). On the view that all 
1.1 Terminology 
In what follows, we will talk about local and distributed 
computing. By local computing (local object invocation, 
etc.), we mean programs that are confined to a single 
address space. In contrast, we will use the term distributed 
computing (remote object invocation, etc.) to refer to pro-grams 
that make calls to other address spaces, possibly on 
another machine. In the case of distributed computing, 
nothing is known about the recipient of the call (other than 
that it supports a particular interface). For example, the 
client of such a distributed object does not know the hard-ware 
architecture on which the recipient of the call is run-ning, 
“ 
” 
“ 
”
So, 
WHAT DOES 
IT LOOKLIKE?
Function-Passing 
Model 
the 
(illustrated)
Function-Passing 
Model 
the 
Two concepts: 
(illustrated)
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data.
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data. 
Portable functions – 
move the functionality to the data. 2.
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data. 
Silos 
Portable functions – 
move the functionality to the data. 2.
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data. 
Silos 
(for a lack of a 
better name) 
Portable functions – 
move the functionality to the data. 2.
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data. 
Silos 
(for a lack of a 
better name) 
Portable functions – 
move the functionality to the data. 2. 
Spores
Function-Passing 
Two concepts: 
(illustrated) Model 
the 
1. Stationary, immutable data. Silos 
(for a lack of a 
better name) 
Portable functions – 
move the functionality to the data. 2. 
Spores
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send 
The handle to a Silo. 
(The workhorse.)
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send 
The handle to a Silo. 
def 
apply(s1: 
Spore, 
s2: 
Spore): 
SiloRef[T]
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send 
The handle to a Silo. 
def 
apply(s1: 
Spore, 
s2: 
Spore): 
SiloRef[T] 
Ta k e s t w o s p o r e s : 
LAZY! 
framework logic (combinator), e.g. map 
user/application-provided argument function 
Defers application of fn to silo, returns SiloRef 
with info for later materialization of silo.
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send 
The handle to a Silo. 
def 
apply(s1: 
Spore, 
s2: 
Spore): 
SiloRef[T] 
def 
send(): 
Future[T]
Function-Passing 
Model 
the 
(illustrated) 
Silo[T] 
T 
Silos. 
WHAT ARE THEY? 
SiloRef[T] 
def 
apply 
def 
send 
The handle to a Silo. 
def 
apply(s1: 
Spore, 
s2: 
Spore): 
SiloRef[T] 
Sends info for function application 
and silo materialization to remote node 
EAGER! 
def 
send(): 
Future[T] 
Asynchronous/nonblocking data transfer to 
local machine (via Future)
Function-Passing 
Model 
the 
Silo[T] 
(illustrated) 
SiloRef[T] 
T 
Machine 1 Machine 2
Function-Passing 
Model 
the 
Silo[T] 
(illustrated) 
SiloRef[T] 
λ 
T T⇒S 
Machine 1 Machine 2
Function-Passing 
Model 
the 
Silo[T] 
(illustrated) 
SiloRef[T] 
λ 
T 
) 
SiloRef[S] 
Machine 1 Machine 2
Function-Passing 
Model 
the 
Silo[T] 
(illustrated) 
SiloRef[T] 
λ 
T 
) 
SiloRef[S] 
Silo[S] ) 
S 
Machine 1 Machine 2
Function-Passing 
Silo 
Model 
the 
(illustrated)
Function-Passing 
Silo 
Model 
the 
Silo 
Silo 
Machine 1 
(illustrated)
Function-Passing 
Silo 
Model 
the 
Silo 
Silo 
Machine 1 
(illustrated) 
Silo 
Silo 
Silo 
Machine 2
Function-Passing 
Model 
the 
Two concepts: 
(illustrated) 
1. Stationary, immutable data. 
Silos 
(for a lack of a 
better name) 
Portable functions – 
move the functionality to the data. 2. 
Spores
What do spores look like? 
Basic usage: 
val 
s 
= 
spore 
{ 
val 
h 
= 
helper 
(x: 
Int) 
=> 
{ 
val 
result 
= 
x 
+ 
" 
" 
+ 
h.toString 
println("The 
result 
is: 
" 
+ 
result) 
} 
} 
a sequence of local value (val) declarations 
only (the “spore header”), and 1 
THE BODY OF A SPORE CONSISTS OF 2 PARTS 
2 a closure 
http://docs.scala-lang.org/sips/pending/spores.html
A Spore 
Guarantees... 
(vsclosures) 
1. All captured variables are declared in 
the spore header, or using capture 
2. The initializers of captured variables 
are executed once, upon creation of 
the spore 
3. References to captured variables do 
not change during the spore’s execution 
http://docs.scala-lang.org/sips/pending/spores.html
Spores& 
Closures 
Evaluation semantics: 
Remove the spore marker, and the code 
behaves as before 
spores & closures are related: 
You can write a full function literal and pass 
it to something that expects a spore. 
(Of course, only if the function literal 
satisfies the spore rules.) 
http://docs.scala-lang.org/sips/pending/spores.html
Function-Passing 
Model 
the 
(illustrated) 
Spores. 
Benefits: 
environment (captured variables) is 
declared explicitly, and fixed at spore creation time. 
can statically ensure that everything captured is 
serializable
Function-Passing 
Model 
the 
(illustrated) 
14 
Spores. 
Benefits: 
6SRUHV $ 7SH%DVHG )RXQGDWLRQ IRU ORVXUHV LQ WKH 
$JH RI RQFXUUHQF DQG 'LVWULEXWLRQ 
+HDWKHU 0LOOHU 3KLOLSS +DOOHU1  DQG 0DUWLQ 2GHUVN 
(3)/ DQG 7SHVDIH ,QF1 
environment (captured ’Š‹Ž‹’’ŜŠƒŽŽ‡”ɒ–›’‡•ƒˆ‡Ŝ…‘variables) 1 
DQG is 
declared ƇŠ‡ƒ–Š‡”Ŝ‹ŽŽ‡”ř ƒ”–‹Ŝ‘†‡”•›ƈɒ‡’ˆŽŜ…Š explicitly, and fixed at spore creation time. 
can statically ensure that everything captured is 
serializable 
$EVWUDFW )XQFWLRQDO SURJUDPPLQJ )3
LV UHJXODUO WRXWHG DV WKH ZD IRUZDUG 
IRU EULQJLQJ SDUDOOHO FRQFXUUHQW DQG GLVWULEXWHG SURJUDPPLQJ WR WKH PDLQVWUHDP 
7KH SRSXODULW RI WKH UDWLRQDOH EHKLQG WKLV YLHZSRLQW KDV HYHQ OHG WR D QXPEHU RI 
REMHFWRULHQWHG 22
SURJUDPPLQJ ODQJXDJHV RXWVLGH WKH 6PDOOWDON WUDGLWLRQ DGRSW 
LQJ IXQFWLRQDO IHDWXUHV VXFK DV ODPEGDV DQG WKHUHE IXQFWLRQ FORVXUHV +RZHYHU 
GHVSLWH WKLV HVWDEOLVKHG YLHZSRLQW RI )3 DV DQ HQDEOHU UHOLDEO GLVWULEXWLQJ IXQF 
WLRQ FORVXUHV RYHU D QHWZRUN RU XVLQJ WKHP LQ FRQFXUUHQW HQYLURQPHQWV QRQHWKH 
OHVV UHPDLQV D FKDOOHQJH DFURVV )3 DQG 22 ODQJXDJHV 7KLV SDSHU WDNHV D VWHS WR 
ZDUGV PRUH SULQFLSOHG GLVWULEXWHG DQG FRQFXUUHQW SURJUDPPLQJ E LQWURGXFLQJ D 
QHZ FORVXUHOLNH DEVWUDFWLRQ DQG WSH VVWHP FDOOHG VSRUHV WKDW FDQ JXDUDQWHH FOR 
VXUHV WR EH VHULDOL]DEOH WKUHDGVDIH RU HYHQ KDYH FXVWRP XVHUGHILQHG SURSHUWLHV 
UXFLDOO RXU VVWHP LV EDVHG RQ WKH SULQFLSOH RI HQFRGLQJ WSH LQIRUPDWLRQ FRU 
UHVSRQGLQJ WR FDSWXUHG YDULDEOHV LQ WKH WSH RI D VSRUH :H SURYH RXU WSH VVWHP 
VRXQG LPSOHPHQW RXU DSSURDFK IRU 6FDOD HYDOXDWH LWV SUDFWLFDOLW WKURXJK D VPDOO 
HPSLULFDO VWXG DQG VKRZ WKH SRZHU RI WKHVH JXDUDQWHHV WKURXJK D FDVH DQDOVLV 
RI UHDOZRUOG GLVWULEXWHG DQG FRQFXUUHQW IUDPHZRUNV WKDW WKLV VDIH IRXQGDWLRQ IRU 
FORVXUHV IDFLOLWDWHV 
.HZRUGV FORVXUHV IXQFWLRQV GLVWULEXWHG SURJUDPPLQJ FRQFXUUHQW SURJUDP 
PLQJ WSH VVWHPV 
ECOOP’ A SIP: 
http://docs.scala-lang.org/sips/pending/spores.html
Ok, 
EXAMPLE, 
PLEASE.
Function-Passing 
Model 
the 
(illustrated) 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
SiloRef[List[Int]]
Function-Passing 
Model 
the 
(illustrated) 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) (Spores) 
SiloRef[List[Int]]
Function-Passing 
Model 
the 
(illustrated) 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
SiloRef[List[Int]] 
.apply
Function-Passing 
Model 
the 
(illustrated) 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
SiloRef[List[Int]] SiloRef[List[Int]] 
.apply
Function-Passing 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
.apply 
Model 
the 
(illustrated) 
SiloRef[List[Int]] SiloRef[List[Int]] 
.apply
Function-Passing 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
map f 
.apply 
Model 
the 
(illustrated) 
SiloRef[List[Int]] SiloRef[List[Int]] 
.apply
Function-Passing 
Distributed List with operations map and reduce. 
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
Model 
SiloRef[List[Int]] 
map (_*2) 
the 
(illustrated) 
reduce (_+_) 
EXAMPLE: 
(This is what would be happening under the hood) 
.apply .apply
Function-Passing 
Distributed List with operations map and reduce. 
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
Model 
SiloRef[List[Int]] 
map (_*2) 
the 
(illustrated) 
reduce (_+_) 
EXAMPLE: 
(This is what would be happening under the hood) 
.apply .apply .send()
Function-Passing 
Model 
the 
(illustrated) 
EXAMPLE: 
Distributed List with operations map and reduce. 
(This is what would be happening under the hood) 
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_)
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_)
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1 
List[Int] 
Silo[List[Int]] 
Machine 2
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1 
List[Int] 
Silo[List[Int]] 
Machine 2
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1 
List[Int] 
Silo[List[Int]] 
Machine 2 
λ
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1 
List[Int] 
Silo[List[Int]] 
Machine 2 
Int 
Silo[Int] 
List[Int] 
Silo[List[Int]] 
List[Int] 
Silo[List[Int]]
SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] 
map f 
.apply 
SiloRef[List[Int]] 
.apply .send() 
map (_*2) 
reduce (_+_) 
Machine 1 
List[Int] 
Silo[List[Int]] 
Machine 2 
Int 
Silo[Int] 
List[Int] 
Silo[List[Int]] 
List[Int] 
Silo[List[Int]] 
Int
Ok, 
HOW DOES 
THISHELP 
WITH 
FAULT 
TOLERANCE?
Data in silos easily 
reconstructed: 
Silos and SiloRefs relate to each other by 
means of a persistent data structure 
The persistent data structure is based on 
the chain of operations to derive the data 
of each silo. 
Thus, traversing the silo data structures 
yields the complete lineage of a silo. 
Since the lineage is composed of spores, 
it’s serialized. This means it can be 
persisted or transferred to other machine.
in 
SUMMARY, 
Data (Silos) managed using persistent data 
structure. 
All operations, including operations provided by 
system builders, are spores – so, serializable! 
Taken together: 
A lot simpler to build mechanisms for fault tolerance!

More Related Content

What's hot

4. class diagrams using uml
4. class diagrams using uml4. class diagrams using uml
4. class diagrams using umlAPU
 
A&D - Object Oriented Analysis using UML
A&D - Object Oriented Analysis using UMLA&D - Object Oriented Analysis using UML
A&D - Object Oriented Analysis using UMLvinay arora
 
PATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design PatternsPATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design Patterns
Michael Heron
 
7. sequence and collaboration diagrams
7. sequence and collaboration diagrams7. sequence and collaboration diagrams
7. sequence and collaboration diagramsAPU
 
OOP design patterns
OOP design patternsOOP design patterns
OOP design patterns
Igor Talevski
 
Programming Without Coding Technology (PWCT) Features - Programming Paradigm
Programming Without Coding Technology (PWCT) Features - Programming ParadigmProgramming Without Coding Technology (PWCT) Features - Programming Paradigm
Programming Without Coding Technology (PWCT) Features - Programming Paradigm
Mahmoud Samir Fayed
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns Illustrated
Herman Peeren
 
Visual Basic User Interface -IV
Visual Basic User Interface -IVVisual Basic User Interface -IV
Visual Basic User Interface -IV
Sharbani Bhattacharya
 
01 objective-c session 1
01  objective-c session 101  objective-c session 1
01 objective-c session 1
Amr Elghadban (AmrAngry)
 
Java design patterns
Java design patternsJava design patterns
Java design patterns
Shawn Brito
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Anuja Arosha
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
Nishith Shukla
 
Sofwear deasign and need of design pattern
Sofwear deasign and need of design patternSofwear deasign and need of design pattern
Sofwear deasign and need of design patternchetankane
 
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in TokyoSummary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
CLOUDIAN KK
 
Chapter 13 introduction to classes
Chapter 13 introduction to classesChapter 13 introduction to classes
Chapter 13 introduction to classes
rsnyder3601
 
Catching co occurrence information using word2vec-inspired matrix factorization
Catching co occurrence information using word2vec-inspired matrix factorizationCatching co occurrence information using word2vec-inspired matrix factorization
Catching co occurrence information using word2vec-inspired matrix factorization
hyunsung lee
 
Deep Learning and TensorFlow
Deep Learning and TensorFlowDeep Learning and TensorFlow
Deep Learning and TensorFlow
Oswald Campesato
 

What's hot (20)

4. class diagrams using uml
4. class diagrams using uml4. class diagrams using uml
4. class diagrams using uml
 
Ch14
Ch14Ch14
Ch14
 
A&D - Object Oriented Analysis using UML
A&D - Object Oriented Analysis using UMLA&D - Object Oriented Analysis using UML
A&D - Object Oriented Analysis using UML
 
PATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design PatternsPATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design Patterns
 
Mca 504 dotnet_unit3
Mca 504 dotnet_unit3Mca 504 dotnet_unit3
Mca 504 dotnet_unit3
 
7. sequence and collaboration diagrams
7. sequence and collaboration diagrams7. sequence and collaboration diagrams
7. sequence and collaboration diagrams
 
OOP design patterns
OOP design patternsOOP design patterns
OOP design patterns
 
Programming Without Coding Technology (PWCT) Features - Programming Paradigm
Programming Without Coding Technology (PWCT) Features - Programming ParadigmProgramming Without Coding Technology (PWCT) Features - Programming Paradigm
Programming Without Coding Technology (PWCT) Features - Programming Paradigm
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns Illustrated
 
Visual Basic User Interface -IV
Visual Basic User Interface -IVVisual Basic User Interface -IV
Visual Basic User Interface -IV
 
01 objective-c session 1
01  objective-c session 101  objective-c session 1
01 objective-c session 1
 
Java design patterns
Java design patternsJava design patterns
Java design patterns
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Bridge Pattern
Bridge PatternBridge Pattern
Bridge Pattern
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 
Sofwear deasign and need of design pattern
Sofwear deasign and need of design patternSofwear deasign and need of design pattern
Sofwear deasign and need of design pattern
 
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in TokyoSummary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
Summary of "Amazon's Dynamo" for the 2nd nosql summer reading in Tokyo
 
Chapter 13 introduction to classes
Chapter 13 introduction to classesChapter 13 introduction to classes
Chapter 13 introduction to classes
 
Catching co occurrence information using word2vec-inspired matrix factorization
Catching co occurrence information using word2vec-inspired matrix factorizationCatching co occurrence information using word2vec-inspired matrix factorization
Catching co occurrence information using word2vec-inspired matrix factorization
 
Deep Learning and TensorFlow
Deep Learning and TensorFlowDeep Learning and TensorFlow
Deep Learning and TensorFlow
 

Viewers also liked

Максим Харченко. Erlang lincx
Максим Харченко. Erlang lincxМаксим Харченко. Erlang lincx
Максим Харченко. Erlang lincx
Alina Dolgikh
 
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
Alina Dolgikh
 
Eugene Burmako
Eugene BurmakoEugene Burmako
Eugene Burmako
Volha Banadyseva
 
F# Eye For The C# Guy - f(by) Minsk 2014
F# Eye For The C# Guy - f(by) Minsk 2014F# Eye For The C# Guy - f(by) Minsk 2014
F# Eye For The C# Guy - f(by) Minsk 2014
Phillip Trelford
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
Alina Dolgikh
 
Tame cloud complexity with F#-powered DSLs
Tame cloud complexity with F#-powered DSLsTame cloud complexity with F#-powered DSLs
Tame cloud complexity with F#-powered DSLs
Yan Cui
 
Мобильные приложения в экосистеме открытых данных (RIW 2013)
Мобильные приложения в экосистеме открытых данных (RIW 2013)Мобильные приложения в экосистеме открытых данных (RIW 2013)
Мобильные приложения в экосистеме открытых данных (RIW 2013)
Vitaly Vlasov
 
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...ADLABS
 
Nectarin Digital Digest №2
Nectarin Digital Digest №2Nectarin Digital Digest №2
Nectarin Digital Digest №2
Nectarin
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Ontico
 
TargetSummit Berlin - Splitmetrics Eugene Nevgen
TargetSummit Berlin - Splitmetrics Eugene Nevgen TargetSummit Berlin - Splitmetrics Eugene Nevgen
TargetSummit Berlin - Splitmetrics Eugene Nevgen
TargetSummit
 
Есть ли жизнь после релиза мобильного приложения?
Есть ли жизнь после релиза мобильного приложения?Есть ли жизнь после релиза мобильного приложения?
Есть ли жизнь после релиза мобильного приложения?
Alexander Khozya
 
Маркетинг: basics concepts. Оксана Князева
Маркетинг: basics concepts. Оксана КнязеваМаркетинг: basics concepts. Оксана Князева
Маркетинг: basics concepts. Оксана КнязеваVolha Banadyseva
 
Город как сервис: как проектировать новый опыт жизни
Город как сервис: как проектировать новый опыт жизниГород как сервис: как проектировать новый опыт жизни
Город как сервис: как проектировать новый опыт жизни
Yegor Korobeynikov
 
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
Ритейл на ладони (мобильные приложения в жизни ритейла) -  Журнал "Мое дело. ...Ритейл на ладони (мобильные приложения в жизни ритейла) -  Журнал "Мое дело. ...
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
Artem Andreev
 
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
Как провести A/B тестирование скриншотов и иконок для App Store и Google PlayКак провести A/B тестирование скриншотов и иконок для App Store и Google Play
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
Eugene Nevgen
 

Viewers also liked (20)

Максим Харченко. Erlang lincx
Максим Харченко. Erlang lincxМаксим Харченко. Erlang lincx
Максим Харченко. Erlang lincx
 
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
 
Eugene Burmako
Eugene BurmakoEugene Burmako
Eugene Burmako
 
F# Eye For The C# Guy - f(by) Minsk 2014
F# Eye For The C# Guy - f(by) Minsk 2014F# Eye For The C# Guy - f(by) Minsk 2014
F# Eye For The C# Guy - f(by) Minsk 2014
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Tame cloud complexity with F#-powered DSLs
Tame cloud complexity with F#-powered DSLsTame cloud complexity with F#-powered DSLs
Tame cloud complexity with F#-powered DSLs
 
Мобильные приложения в экосистеме открытых данных (RIW 2013)
Мобильные приложения в экосистеме открытых данных (RIW 2013)Мобильные приложения в экосистеме открытых данных (RIW 2013)
Мобильные приложения в экосистеме открытых данных (RIW 2013)
 
Otchet2008
Otchet2008Otchet2008
Otchet2008
 
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
 
Nectarin Digital Digest №2
Nectarin Digital Digest №2Nectarin Digital Digest №2
Nectarin Digital Digest №2
 
отчет проф мониторинг
отчет проф мониторинготчет проф мониторинг
отчет проф мониторинг
 
PandaDoc TNW
PandaDoc TNWPandaDoc TNW
PandaDoc TNW
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
 
TargetSummit Berlin - Splitmetrics Eugene Nevgen
TargetSummit Berlin - Splitmetrics Eugene Nevgen TargetSummit Berlin - Splitmetrics Eugene Nevgen
TargetSummit Berlin - Splitmetrics Eugene Nevgen
 
Мобильные рабочие места в корпоративном ландшафте - ЦКМ АйТи
Мобильные рабочие места в корпоративном ландшафте - ЦКМ АйТиМобильные рабочие места в корпоративном ландшафте - ЦКМ АйТи
Мобильные рабочие места в корпоративном ландшафте - ЦКМ АйТи
 
Есть ли жизнь после релиза мобильного приложения?
Есть ли жизнь после релиза мобильного приложения?Есть ли жизнь после релиза мобильного приложения?
Есть ли жизнь после релиза мобильного приложения?
 
Маркетинг: basics concepts. Оксана Князева
Маркетинг: basics concepts. Оксана КнязеваМаркетинг: basics concepts. Оксана Князева
Маркетинг: basics concepts. Оксана Князева
 
Город как сервис: как проектировать новый опыт жизни
Город как сервис: как проектировать новый опыт жизниГород как сервис: как проектировать новый опыт жизни
Город как сервис: как проектировать новый опыт жизни
 
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
Ритейл на ладони (мобильные приложения в жизни ритейла) -  Журнал "Мое дело. ...Ритейл на ладони (мобильные приложения в жизни ритейла) -  Журнал "Мое дело. ...
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
 
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
Как провести A/B тестирование скриншотов и иконок для App Store и Google PlayКак провести A/B тестирование скриншотов и иконок для App Store и Google Play
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
 

Similar to Heather Miller

INTRODUCTION TO JAVA
INTRODUCTION TO JAVAINTRODUCTION TO JAVA
INTRODUCTION TO JAVA
RAMALINGHAM KRISHNAMOORTHY
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
Angelo Corsaro
 
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Bill Buchan
 
Data and Computation Interoperability in Internet Services
Data and Computation Interoperability in Internet ServicesData and Computation Interoperability in Internet Services
Data and Computation Interoperability in Internet Services
Sergey Boldyrev
 
Microservices: moving parts around
Microservices: moving parts aroundMicroservices: moving parts around
Microservices: moving parts around
Chris Winters
 
Interview preparation for programming.pptx
Interview preparation for programming.pptxInterview preparation for programming.pptx
Interview preparation for programming.pptx
BilalHussainShah5
 
01. design pattern
01. design pattern01. design pattern
01. design pattern
MD Sayem Ahmed
 
Object Oriented Language
Object Oriented LanguageObject Oriented Language
Object Oriented Languagedheva B
 
Devoxx
DevoxxDevoxx
Hibernate
HibernateHibernate
MCA NOTES.pdf
MCA NOTES.pdfMCA NOTES.pdf
MCA NOTES.pdf
RAJASEKHARV10
 
OBJECT ORIENTED ROGRAMMING With Question And Answer Full
OBJECT ORIENTED ROGRAMMING With Question And Answer  FullOBJECT ORIENTED ROGRAMMING With Question And Answer  Full
OBJECT ORIENTED ROGRAMMING With Question And Answer Full
Manas Rai
 
Developing Actors in Azure with .net
Developing Actors in Azure with .netDeveloping Actors in Azure with .net
Developing Actors in Azure with .net
Marco Parenzan
 
The Big Picture - Integrating Buzzwords
The Big Picture - Integrating BuzzwordsThe Big Picture - Integrating Buzzwords
The Big Picture - Integrating Buzzwords
Alessandro Giorgetti
 
Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur University
Shubham Narkhede
 
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
Sakthi Durai
 

Similar to Heather Miller (20)

INTRODUCTION TO JAVA
INTRODUCTION TO JAVAINTRODUCTION TO JAVA
INTRODUCTION TO JAVA
 
Hibernate3 q&a
Hibernate3 q&aHibernate3 q&a
Hibernate3 q&a
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
 
Java chapter 3
Java   chapter 3Java   chapter 3
Java chapter 3
 
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
 
Data and Computation Interoperability in Internet Services
Data and Computation Interoperability in Internet ServicesData and Computation Interoperability in Internet Services
Data and Computation Interoperability in Internet Services
 
Microservices: moving parts around
Microservices: moving parts aroundMicroservices: moving parts around
Microservices: moving parts around
 
Interview preparation for programming.pptx
Interview preparation for programming.pptxInterview preparation for programming.pptx
Interview preparation for programming.pptx
 
01. design pattern
01. design pattern01. design pattern
01. design pattern
 
Mcs024
Mcs024Mcs024
Mcs024
 
Object Oriented Language
Object Oriented LanguageObject Oriented Language
Object Oriented Language
 
Devoxx
DevoxxDevoxx
Devoxx
 
Hibernate
HibernateHibernate
Hibernate
 
Java pdf
Java   pdfJava   pdf
Java pdf
 
MCA NOTES.pdf
MCA NOTES.pdfMCA NOTES.pdf
MCA NOTES.pdf
 
OBJECT ORIENTED ROGRAMMING With Question And Answer Full
OBJECT ORIENTED ROGRAMMING With Question And Answer  FullOBJECT ORIENTED ROGRAMMING With Question And Answer  Full
OBJECT ORIENTED ROGRAMMING With Question And Answer Full
 
Developing Actors in Azure with .net
Developing Actors in Azure with .netDeveloping Actors in Azure with .net
Developing Actors in Azure with .net
 
The Big Picture - Integrating Buzzwords
The Big Picture - Integrating BuzzwordsThe Big Picture - Integrating Buzzwords
The Big Picture - Integrating Buzzwords
 
Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur University
 
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
Java Progamming Paradigms, OOPS Concept, Introduction to Java, Structure of J...
 

More from Volha Banadyseva

Андрей Светлов. Aiohttp
Андрей Светлов. AiohttpАндрей Светлов. Aiohttp
Андрей Светлов. Aiohttp
Volha Banadyseva
 
Сергей Зефиров
Сергей ЗефировСергей Зефиров
Сергей Зефиров
Volha Banadyseva
 
Валерий Прытков, декан факультета КСиС, БГУИР
Валерий Прытков, декан факультета КСиС, БГУИРВалерий Прытков, декан факультета КСиС, БГУИР
Валерий Прытков, декан факультета КСиС, БГУИР
Volha Banadyseva
 
Елена Локтева, «Инфопарк»
Елена Локтева, «Инфопарк»Елена Локтева, «Инфопарк»
Елена Локтева, «Инфопарк»
Volha Banadyseva
 
Татьяна Милова, директор института непрерывного образования БГУ
Татьяна Милова, директор института непрерывного образования БГУТатьяна Милова, директор института непрерывного образования БГУ
Татьяна Милова, директор института непрерывного образования БГУ
Volha Banadyseva
 
Trillhaas Goetz. Innovations in Google and Global Digital Trends
Trillhaas Goetz. Innovations in Google and Global Digital TrendsTrillhaas Goetz. Innovations in Google and Global Digital Trends
Trillhaas Goetz. Innovations in Google and Global Digital Trends
Volha Banadyseva
 
Александр Чекан. 28 правДИвых слайдов о белорусах в интернете
Александр Чекан. 28 правДИвых слайдов о белорусах в интернетеАлександр Чекан. 28 правДИвых слайдов о белорусах в интернете
Александр Чекан. 28 правДИвых слайдов о белорусах в интернете
Volha Banadyseva
 
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в storeМастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
Volha Banadyseva
 
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App StoreБахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
Volha Banadyseva
 
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
Volha Banadyseva
 
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google PlayЕвгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
Volha Banadyseva
 
Евгений Козяк. Tips & Tricks мобильного прототипирования
Евгений Козяк. Tips & Tricks мобильного прототипированияЕвгений Козяк. Tips & Tricks мобильного прототипирования
Евгений Козяк. Tips & Tricks мобильного прототипирования
Volha Banadyseva
 
Егор Белый. Модели успешной монетизации мобильных приложений
Егор Белый. Модели успешной монетизации мобильных приложенийЕгор Белый. Модели успешной монетизации мобильных приложений
Егор Белый. Модели успешной монетизации мобильных приложений
Volha Banadyseva
 
Станислав Пацкевич. Инструменты аналитики для мобильных платформ
Станислав Пацкевич. Инструменты аналитики для мобильных платформСтанислав Пацкевич. Инструменты аналитики для мобильных платформ
Станислав Пацкевич. Инструменты аналитики для мобильных платформ
Volha Banadyseva
 
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
Volha Banadyseva
 
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
Volha Banadyseva
 
Юлия Ерина. Augmented Reality Games: становление и развитие
Юлия Ерина. Augmented Reality Games: становление и развитиеЮлия Ерина. Augmented Reality Games: становление и развитие
Юлия Ерина. Augmented Reality Games: становление и развитие
Volha Banadyseva
 
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позжеАлександр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
Volha Banadyseva
 
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
Volha Banadyseva
 
Кирилла Кравченко. Гейминдустрия: эволюция
Кирилла Кравченко. Гейминдустрия: эволюцияКирилла Кравченко. Гейминдустрия: эволюция
Кирилла Кравченко. Гейминдустрия: эволюция
Volha Banadyseva
 

More from Volha Banadyseva (20)

Андрей Светлов. Aiohttp
Андрей Светлов. AiohttpАндрей Светлов. Aiohttp
Андрей Светлов. Aiohttp
 
Сергей Зефиров
Сергей ЗефировСергей Зефиров
Сергей Зефиров
 
Валерий Прытков, декан факультета КСиС, БГУИР
Валерий Прытков, декан факультета КСиС, БГУИРВалерий Прытков, декан факультета КСиС, БГУИР
Валерий Прытков, декан факультета КСиС, БГУИР
 
Елена Локтева, «Инфопарк»
Елена Локтева, «Инфопарк»Елена Локтева, «Инфопарк»
Елена Локтева, «Инфопарк»
 
Татьяна Милова, директор института непрерывного образования БГУ
Татьяна Милова, директор института непрерывного образования БГУТатьяна Милова, директор института непрерывного образования БГУ
Татьяна Милова, директор института непрерывного образования БГУ
 
Trillhaas Goetz. Innovations in Google and Global Digital Trends
Trillhaas Goetz. Innovations in Google and Global Digital TrendsTrillhaas Goetz. Innovations in Google and Global Digital Trends
Trillhaas Goetz. Innovations in Google and Global Digital Trends
 
Александр Чекан. 28 правДИвых слайдов о белорусах в интернете
Александр Чекан. 28 правДИвых слайдов о белорусах в интернетеАлександр Чекан. 28 правДИвых слайдов о белорусах в интернете
Александр Чекан. 28 правДИвых слайдов о белорусах в интернете
 
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в storeМастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
Мастер-класс Ильи Красинского и Елены Столбовой. Жизнь до и после выхода в store
 
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App StoreБахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
Бахрам Исмаилов. Продвижение мобильного приложение - оптимизация в App Store
 
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
Евгений Пальчевский. Что можно узнать из отзывов пользователей в мобильных ма...
 
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google PlayЕвгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
Евгений Невгень. Оптимизация мета-данных приложения для App Store и Google Play
 
Евгений Козяк. Tips & Tricks мобильного прототипирования
Евгений Козяк. Tips & Tricks мобильного прототипированияЕвгений Козяк. Tips & Tricks мобильного прототипирования
Евгений Козяк. Tips & Tricks мобильного прототипирования
 
Егор Белый. Модели успешной монетизации мобильных приложений
Егор Белый. Модели успешной монетизации мобильных приложенийЕгор Белый. Модели успешной монетизации мобильных приложений
Егор Белый. Модели успешной монетизации мобильных приложений
 
Станислав Пацкевич. Инструменты аналитики для мобильных платформ
Станислав Пацкевич. Инструменты аналитики для мобильных платформСтанислав Пацкевич. Инструменты аналитики для мобильных платформ
Станислав Пацкевич. Инструменты аналитики для мобильных платформ
 
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
Артём Азевич. Эффективные подходы к разработке приложений. Как найти своего п...
 
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
Дина Сударева. Развитие игровой команды и ее самоорганизация. Роль менеджера ...
 
Юлия Ерина. Augmented Reality Games: становление и развитие
Юлия Ерина. Augmented Reality Games: становление и развитиеЮлия Ерина. Augmented Reality Games: становление и развитие
Юлия Ерина. Augmented Reality Games: становление и развитие
 
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позжеАлександр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
Александр Дзюба. Знать игрока: плейтест на стадии прототипа и позже
 
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
Светлана Половинкина. О чём говорит игрок: опросы как инструмент принятия биз...
 
Кирилла Кравченко. Гейминдустрия: эволюция
Кирилла Кравченко. Гейминдустрия: эволюцияКирилла Кравченко. Гейминдустрия: эволюция
Кирилла Кравченко. Гейминдустрия: эволюция
 

Recently uploaded

Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 

Recently uploaded (20)

Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 

Heather Miller

  • 1. Function-Passing Style Typed, Distributed Functional Programming Heather Miller @heathercmiller Philipp Haller @philippkhaller EPFL Typesafe
  • 2. …been working on Language support for distributed system builders. Serialization That happens mostly at compile time, so it’s performant. Type classes to allow users to serialize to different formats (binary, JSON, etc) 1.
  • 3. …been working on Language support for distributed system builders. Spores Portable (serializable) closures. Type constraints to restrict what they capture 2.
  • 4. In this talk… A programming model. Builds on the basis of serializable functions to provide a substrate that distributed systems can be built upon
  • 5. In this talk… A programming model. The result… the model greatly simplifies the design and implementation of mechanisms for: Fault-tolerance In-memory caching Debugging(i.e., pushing types into more layers of the stack) IN A CLEAN & FUNCTIONAL WAY. (STATELESS!)
  • 6. Note: Currently a research project. Thus, all aspects of it are under development + publication in the works. (Thanks, )
  • 8. FUNDAMENTAL IDEA: Inversion of the actor model. Can be thought of as a dual to actors.
  • 9. FUNDAMENTAL IDEA: Inversion of the actor model. Can be thought of as a dual to actors. A DUAL WHICH NICELY COMPLEMENTS ACTORS!
  • 11. Actors… Encapsulate state and behavior. Are stationary. Actors exchange data/commands through asynchronous messaging.
  • 12. Function-passing… Stateless. Built on persistent data structures. Keep the data stationary. Functions are exchanged through asynchronous messaging.
  • 13. Function-passing… Stateless. Built on persistent data structures. Keep the data stationary. Functions are exchanged through asynchronous messaging. Of note: This is a model for programming with data and not a new model of concurrent processes like actors. ! Instead, we provide a new means of working with distributed data in a functional way.
  • 14. A Note on Distributed Computing Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall Sun Microsystems Laboratories 2550 Garcia Avenue Mountain View, CA 94043 1 Introduction Much of the current work in distributed, object-oriented systems is based on the assumption that objects form a sin-gle ontological class. This class consists of all entities that can be fully described by the specification of the set of interfaces supported by the object and the semantics of the operations in those interfaces. The class includes objects that share a single address space, objects that are in sepa-rate address spaces on the same machine, and objects that are in separate address spaces on different machines (with, perhaps, different architectures). On the view that all 1.1 Terminology In what follows, we will talk about local and distributed computing. By local computing (local object invocation, etc.), we mean programs that are confined to a single address space. In contrast, we will use the term distributed computing (remote object invocation, etc.) to refer to pro-grams that make calls to other address spaces, possibly on another machine. In the case of distributed computing, nothing is known about the recipient of the call (other than that it supports a particular interface). For example, the client of such a distributed object does not know the hard-ware architecture on which the recipient of the call is run-ning,
  • 15. A Note on Distributed Computing Differences in latency, memory access, partial failure, and Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall concurrency make merging of the computational models of local and distributed computing Sun Microsystems both unwise Laboratories to attempt and unable to succeed. 2550 Garcia Avenue Mountain View, CA 94043 1 Introduction Much of the current work in distributed, object-oriented systems is based on the assumption that objects form a sin-gle ontological class. This class consists of all entities that can be fully described by the specification of the set of interfaces supported by the object and the semantics of the operations in those interfaces. The class includes objects that share a single address space, objects that are in sepa-rate address spaces on the same machine, and objects that are in separate address spaces on different machines (with, perhaps, different architectures). On the view that all 1.1 Terminology In what follows, we will talk about local and distributed computing. By local computing (local object invocation, etc.), we mean programs that are confined to a single address space. In contrast, we will use the term distributed computing (remote object invocation, etc.) to refer to pro-grams that make calls to other address spaces, possibly on another machine. In the case of distributed computing, nothing is known about the recipient of the call (other than that it supports a particular interface). For example, the client of such a distributed object does not know the hard-ware architecture on which the recipient of the call is run-ning, “ ”
  • 16. A Note on Distributed Computing Differences in latency, memory access, partial failure, and Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall concurrency make merging of the computational models of local and distributed computing Sun Microsystems both unwise Laboratories to attempt and unable to succeed. 2550 Garcia Avenue Mountain View, CA 94043 A better approach is to accept that there are irreconcilable differences between local and distributed computing, and to be conscious of those differences at all stages of the design and implementation of distributed applications. Rather than trying to merge local and remote objects, engineers need to be constantly reminded of the differences between the two, and know when it is appropriate to use each kind of object. 1 Introduction Much of the current work in distributed, object-oriented systems is based on the assumption that objects form a sin-gle ontological class. This class consists of all entities that can be fully described by the specification of the set of interfaces supported by the object and the semantics of the operations in those interfaces. The class includes objects that share a single address space, objects that are in sepa-rate address spaces on the same machine, and objects that are in separate address spaces on different machines (with, perhaps, different architectures). On the view that all 1.1 Terminology In what follows, we will talk about local and distributed computing. By local computing (local object invocation, etc.), we mean programs that are confined to a single address space. In contrast, we will use the term distributed computing (remote object invocation, etc.) to refer to pro-grams that make calls to other address spaces, possibly on another machine. In the case of distributed computing, nothing is known about the recipient of the call (other than that it supports a particular interface). For example, the client of such a distributed object does not know the hard-ware architecture on which the recipient of the call is run-ning, “ ” “ ”
  • 17. So, WHAT DOES IT LOOKLIKE?
  • 18. Function-Passing Model the (illustrated)
  • 19. Function-Passing Model the Two concepts: (illustrated)
  • 20. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data.
  • 21. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data. Portable functions – move the functionality to the data. 2.
  • 22. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data. Silos Portable functions – move the functionality to the data. 2.
  • 23. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data. Silos (for a lack of a better name) Portable functions – move the functionality to the data. 2.
  • 24. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data. Silos (for a lack of a better name) Portable functions – move the functionality to the data. 2. Spores
  • 25. Function-Passing Two concepts: (illustrated) Model the 1. Stationary, immutable data. Silos (for a lack of a better name) Portable functions – move the functionality to the data. 2. Spores
  • 26. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send
  • 27. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send The handle to a Silo. (The workhorse.)
  • 28. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send The handle to a Silo. def apply(s1: Spore, s2: Spore): SiloRef[T]
  • 29. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send The handle to a Silo. def apply(s1: Spore, s2: Spore): SiloRef[T] Ta k e s t w o s p o r e s : LAZY! framework logic (combinator), e.g. map user/application-provided argument function Defers application of fn to silo, returns SiloRef with info for later materialization of silo.
  • 30. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send The handle to a Silo. def apply(s1: Spore, s2: Spore): SiloRef[T] def send(): Future[T]
  • 31. Function-Passing Model the (illustrated) Silo[T] T Silos. WHAT ARE THEY? SiloRef[T] def apply def send The handle to a Silo. def apply(s1: Spore, s2: Spore): SiloRef[T] Sends info for function application and silo materialization to remote node EAGER! def send(): Future[T] Asynchronous/nonblocking data transfer to local machine (via Future)
  • 32. Function-Passing Model the Silo[T] (illustrated) SiloRef[T] T Machine 1 Machine 2
  • 33. Function-Passing Model the Silo[T] (illustrated) SiloRef[T] λ T T⇒S Machine 1 Machine 2
  • 34. Function-Passing Model the Silo[T] (illustrated) SiloRef[T] λ T ) SiloRef[S] Machine 1 Machine 2
  • 35. Function-Passing Model the Silo[T] (illustrated) SiloRef[T] λ T ) SiloRef[S] Silo[S] ) S Machine 1 Machine 2
  • 36. Function-Passing Silo Model the (illustrated)
  • 37. Function-Passing Silo Model the Silo Silo Machine 1 (illustrated)
  • 38. Function-Passing Silo Model the Silo Silo Machine 1 (illustrated) Silo Silo Silo Machine 2
  • 39. Function-Passing Model the Two concepts: (illustrated) 1. Stationary, immutable data. Silos (for a lack of a better name) Portable functions – move the functionality to the data. 2. Spores
  • 40. What do spores look like? Basic usage: val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } a sequence of local value (val) declarations only (the “spore header”), and 1 THE BODY OF A SPORE CONSISTS OF 2 PARTS 2 a closure http://docs.scala-lang.org/sips/pending/spores.html
  • 41. A Spore Guarantees... (vsclosures) 1. All captured variables are declared in the spore header, or using capture 2. The initializers of captured variables are executed once, upon creation of the spore 3. References to captured variables do not change during the spore’s execution http://docs.scala-lang.org/sips/pending/spores.html
  • 42. Spores& Closures Evaluation semantics: Remove the spore marker, and the code behaves as before spores & closures are related: You can write a full function literal and pass it to something that expects a spore. (Of course, only if the function literal satisfies the spore rules.) http://docs.scala-lang.org/sips/pending/spores.html
  • 43. Function-Passing Model the (illustrated) Spores. Benefits: environment (captured variables) is declared explicitly, and fixed at spore creation time. can statically ensure that everything captured is serializable
  • 44. Function-Passing Model the (illustrated) 14 Spores. Benefits: 6SRUHV $ 7SH%DVHG )RXQGDWLRQ IRU ORVXUHV LQ WKH $JH RI RQFXUUHQF DQG 'LVWULEXWLRQ +HDWKHU 0LOOHU 3KLOLSS +DOOHU1 DQG 0DUWLQ 2GHUVN (3)/ DQG 7SHVDIH ,QF1 environment (captured ’Š‹Ž‹’’ŜŠƒŽŽ‡”ɒ–›’‡•ƒˆ‡Ŝ…‘variables) 1 DQG is declared ƇŠ‡ƒ–Š‡”Ŝ‹ŽŽ‡”ř ƒ”–‹Ŝ‘†‡”•›ƈɒ‡’ˆŽŜ…Š explicitly, and fixed at spore creation time. can statically ensure that everything captured is serializable $EVWUDFW )XQFWLRQDO SURJUDPPLQJ )3
  • 45. LV UHJXODUO WRXWHG DV WKH ZD IRUZDUG IRU EULQJLQJ SDUDOOHO FRQFXUUHQW DQG GLVWULEXWHG SURJUDPPLQJ WR WKH PDLQVWUHDP 7KH SRSXODULW RI WKH UDWLRQDOH EHKLQG WKLV YLHZSRLQW KDV HYHQ OHG WR D QXPEHU RI REMHFWRULHQWHG 22
  • 46. SURJUDPPLQJ ODQJXDJHV RXWVLGH WKH 6PDOOWDON WUDGLWLRQ DGRSW LQJ IXQFWLRQDO IHDWXUHV VXFK DV ODPEGDV DQG WKHUHE IXQFWLRQ FORVXUHV +RZHYHU GHVSLWH WKLV HVWDEOLVKHG YLHZSRLQW RI )3 DV DQ HQDEOHU UHOLDEO GLVWULEXWLQJ IXQF WLRQ FORVXUHV RYHU D QHWZRUN RU XVLQJ WKHP LQ FRQFXUUHQW HQYLURQPHQWV QRQHWKH OHVV UHPDLQV D FKDOOHQJH DFURVV )3 DQG 22 ODQJXDJHV 7KLV SDSHU WDNHV D VWHS WR ZDUGV PRUH SULQFLSOHG GLVWULEXWHG DQG FRQFXUUHQW SURJUDPPLQJ E LQWURGXFLQJ D QHZ FORVXUHOLNH DEVWUDFWLRQ DQG WSH VVWHP FDOOHG VSRUHV WKDW FDQ JXDUDQWHH FOR VXUHV WR EH VHULDOL]DEOH WKUHDGVDIH RU HYHQ KDYH FXVWRP XVHUGHILQHG SURSHUWLHV UXFLDOO RXU VVWHP LV EDVHG RQ WKH SULQFLSOH RI HQFRGLQJ WSH LQIRUPDWLRQ FRU UHVSRQGLQJ WR FDSWXUHG YDULDEOHV LQ WKH WSH RI D VSRUH :H SURYH RXU WSH VVWHP VRXQG LPSOHPHQW RXU DSSURDFK IRU 6FDOD HYDOXDWH LWV SUDFWLFDOLW WKURXJK D VPDOO HPSLULFDO VWXG DQG VKRZ WKH SRZHU RI WKHVH JXDUDQWHHV WKURXJK D FDVH DQDOVLV RI UHDOZRUOG GLVWULEXWHG DQG FRQFXUUHQW IUDPHZRUNV WKDW WKLV VDIH IRXQGDWLRQ IRU FORVXUHV IDFLOLWDWHV .HZRUGV FORVXUHV IXQFWLRQV GLVWULEXWHG SURJUDPPLQJ FRQFXUUHQW SURJUDP PLQJ WSH VVWHPV ECOOP’ A SIP: http://docs.scala-lang.org/sips/pending/spores.html
  • 48. Function-Passing Model the (illustrated) EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) SiloRef[List[Int]]
  • 49. Function-Passing Model the (illustrated) EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) (Spores) SiloRef[List[Int]]
  • 50. Function-Passing Model the (illustrated) EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) SiloRef[List[Int]] .apply
  • 51. Function-Passing Model the (illustrated) EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) SiloRef[List[Int]] SiloRef[List[Int]] .apply
  • 52. Function-Passing EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) .apply Model the (illustrated) SiloRef[List[Int]] SiloRef[List[Int]] .apply
  • 53. Function-Passing EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) map f .apply Model the (illustrated) SiloRef[List[Int]] SiloRef[List[Int]] .apply
  • 54. Function-Passing Distributed List with operations map and reduce. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply Model SiloRef[List[Int]] map (_*2) the (illustrated) reduce (_+_) EXAMPLE: (This is what would be happening under the hood) .apply .apply
  • 55. Function-Passing Distributed List with operations map and reduce. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply Model SiloRef[List[Int]] map (_*2) the (illustrated) reduce (_+_) EXAMPLE: (This is what would be happening under the hood) .apply .apply .send()
  • 56. Function-Passing Model the (illustrated) EXAMPLE: Distributed List with operations map and reduce. (This is what would be happening under the hood) SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_)
  • 57. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_)
  • 58. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1
  • 59. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1 List[Int] Silo[List[Int]] Machine 2
  • 60. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1 List[Int] Silo[List[Int]] Machine 2
  • 61. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1 List[Int] Silo[List[Int]] Machine 2 λ
  • 62. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1 List[Int] Silo[List[Int]] Machine 2 Int Silo[Int] List[Int] Silo[List[Int]] List[Int] Silo[List[Int]]
  • 63. SiloRef[List[Int]] SiloRef[List[Int]] SiloRef[Int] map f .apply SiloRef[List[Int]] .apply .send() map (_*2) reduce (_+_) Machine 1 List[Int] Silo[List[Int]] Machine 2 Int Silo[Int] List[Int] Silo[List[Int]] List[Int] Silo[List[Int]] Int
  • 64. Ok, HOW DOES THISHELP WITH FAULT TOLERANCE?
  • 65. Data in silos easily reconstructed: Silos and SiloRefs relate to each other by means of a persistent data structure The persistent data structure is based on the chain of operations to derive the data of each silo. Thus, traversing the silo data structures yields the complete lineage of a silo. Since the lineage is composed of spores, it’s serialized. This means it can be persisted or transferred to other machine.
  • 66. in SUMMARY, Data (Silos) managed using persistent data structure. All operations, including operations provided by system builders, are spores – so, serializable! Taken together: A lot simpler to build mechanisms for fault tolerance!
  • 67. Can’t I just… Send spores within messages between actors/processes? Granted, that’s already quite powerful. :-) However, spores + silos additionally provides a lot of benefits that actors + spores alone do not provide out-of-the-box: Benefits: deferred evaluation (laziness) enables optimizations to reduce intermediate results. statelessness + lineages simplifies the implementation of mechanisms for fault tolerance for certain applications (think dist. collections)
  • 68. Looking for feedback, demanding use cases, contributors. Get involved! function-passing@googlegroups.com Thank you!