asynchronous functional reactive processes › researcher › files › us-rabbah ›...
TRANSCRIPT
![Page 1: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/1.jpg)
Asynchronous Functional
Reactive Processes
Daniel Winograd-Cort Paul Hudak
Department of Computer Science
Yale University
IBM PL Day
Yorktown Heights, NY
Tuesday, November 18, 2014
![Page 2: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/2.jpg)
The Context:
Functional Reactive Programming
Programming with continuous values and streams of events.
Like drawing signal processing diagrams:
Previously used in: ◦ Yampa:
◦ Nettle:
◦ Euterpea:
robotics, vision, animation
networking
sound synthesis and audio processing
𝑦 ← 𝑠𝑖𝑔𝑓𝑢𝑛 −≺ 𝑥
equivalent arrow syntax in Haskell signal processing diagram
y x signal
function
![Page 3: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/3.jpg)
Fundamental Abstraction
Signal functions process infinitely fast,
infinitely often
◦ Within the signal function, there is no notion
of time.
◦ The data itself governs the passage of time.
Clear, commutative design
Synchronization as a given
![Page 4: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/4.jpg)
Standard Arrow Operators
arr f
f
first sf
sf
sf1 >>> sf2
sf1 sf2
sf1 ||| sf2
Left
Right
sf1
sf2
![Page 5: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/5.jpg)
Adding Effects
Typically, effects are sequenced by the
structure of the program
◦ Consider the following program:
When the program completes, x will be 4 and
we will have printed 3.
x := 3; print x; x := 4;
![Page 6: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/6.jpg)
Adding Effects
In FRP, the data controls the flow of time
rather than the program structure.
◦ It does not make sense to assign a variable in
more than one place.
What should the value of x be?
What value should be printed?
x :=
x :=
3
4
print read x
![Page 7: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/7.jpg)
Adding Effects
To make effects safe, we must limit how
we use effectful signal functions.
◦ If an effect is used, it can only be used in one
place.
We achieve this by tagging signal functions
at the type level with resource types and
restricting their composition.
![Page 8: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/8.jpg)
Resource Typed Arrow Operators
arr f
f
first sf
sf
sf1 >>> sf2
sf1 sf2
sf1 ||| sf2
Left
Right
sf1
sf2
∅ R R
R1 R2
R3
𝑅1 ∪ 𝑅2 = 𝑅3
𝑅1 ∩ 𝑅2 = ∅
R1
R2
R3
𝑅1 ∪ 𝑅2 = 𝑅3
![Page 9: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/9.jpg)
Asynchrony
In some cases, our synchronous
assumption is too strong.
Perhaps the processing rates of two
functions would be better off different.
◦ Memory reads running synchronously with
hard drive seeks
◦ A GUI that should be run at ~60 FPS along
with sound generation at 44.1 KHz
◦ Packet routing together with network map
updating
![Page 10: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/10.jpg)
Asynchrony
Packets are used to make new routing maps,
which are then used to route the packets
Making maps is slow, but routing must be
fast
What if we allow the relaxation that we do
not always need the newest map?
makeMap
routePacket
![Page 11: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/11.jpg)
Asynchrony
Let us allow multiple processes, each with
its own notion of time.
◦ Each will individually retain the fundamental
abstraction (“infinitely fast, infinitely often”).
◦ Each will still respect the others’ resources.
◦ However, they will no longer synchronize.
![Page 12: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/12.jpg)
Now we can make maps asynchronously.
But what are those dashed lines?
Asynchrony
routePacket
makeMap
![Page 13: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/13.jpg)
Inter-process Communication
We need a way to communicate data from one time stream to another.
Data needs to get time dilated – either stretched or compressed
Wormholes!
◦ Wormholes have a blackhole for writing to and a whitehole for reading from.
◦ Wormhole access is made safe with resource types.
◦ Wormholes automatically dilate their data.
![Page 14: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/14.jpg)
wormhole w b sf
sf b w
New Operators
R 𝑅′
𝑅′ = 𝑅 ∪ 𝑟𝑏, 𝑟𝑤
𝑟𝑤 𝑟𝑏
fork sf
sf
R R
![Page 15: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/15.jpg)
Maintaining Effect Safety
Are effects still safe in the presence of
asynchrony?
sf
Left
Right
sf
𝑅
𝑅
![Page 16: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/16.jpg)
Asynchronous Choice
Remember that the data controls time.
◦ When a signal function has no incoming data,
it must freeze.
◦ Likewise, if a fork has no incoming data, it
freezes its forked process.
fork sf
sf
![Page 17: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/17.jpg)
Asynchronous Choice
Remember that the data controls time.
◦ When a signal function has no incoming data,
it must freeze.
◦ Likewise, if a fork has no incoming data, it
freezes its forked process.
We achieve this while guaranteeing safety
with our fundamental abstraction of FRP
◦ Treat every moment in time as a transaction.
◦ Freezing only occurs between transactions.
![Page 18: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/18.jpg)
Parallelizing Signal Functions
Forking and wormholes allow us to create
asynchronous, concurrent behavior, but
what about parallel behavior?
◦ For instance, we may fork multiple processes
but then want to wait for their results before
continuing.
◦ “Waiting” is nonsensical in FRP
We can achieve the same idea with event
streams.
![Page 19: Asynchronous Functional Reactive Processes › researcher › files › us-rabbah › plday14-cort.pdfAsynchronous Functional Reactive Processes Daniel Winograd-Cort Paul Hudak Department](https://reader034.vdocuments.net/reader034/viewer/2022042400/5f0f67707e708231d443fde5/html5/thumbnails/19.jpg)
Thank you!
There is a prototype of this work
available at: github.com/dwincort/CFRP
I would be happy to take questions