Upload
rui-mascarenhas
View
220
Download
0
Embed Size (px)
Citation preview
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
1/60
Immutability, Interactivity
& JavaScript
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
2/60
Immutability, Interactivity
& JavaScript
(er ClojureScript)
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
3/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
4/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
5/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
6/60
Model-View-Controller
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
7/60
! rst formulated by Trygve Reenskaug
Adele Goldberg and others at Xerox
PARC in 1979
! long shadow, the basic concepts still
prevalent today.
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
8/60
! At a very abstract level MVC is a sound
separation of concerns
! Implementations leave much to be
desired
! Stateful objects everywhere
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
9/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
10/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
11/60
Mutable DOM
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
12/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
13/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
14/60
Functional Programming?
! Functional Reactive Programming
(FRP), still active area of research
! Rx, doesn't address rendering
! Communicating Sequential Processes
(CSP), a coordination language, doesn't
address rendering
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
15/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
16/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
17/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
18/60
Functional Programming and Data• immutable values, not mutable objects
• “change” returns a new value, leaving the old one unmodified
• they’re persistent
• they’re fast
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
19/60
Sim le exam le: Linked List
X
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
20/60
Sim le exam le: Linked List
XY
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
21/60
Sim le exam le: Linked List
X
Z
Y
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
22/60
Sim le exam le: Linked List
X
Z
Y
structural sharing
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
23/60
Sharing structure
• space efficiency
• computational efficiency – avoids copying
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
24/60
Phil Bagwell
• Array Mapped Trie
• Hash Array Mapped Trie
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
25/60
Bitmapped Vector Trie
•data lives in the leaves
• e.g. prefix tree used for string lookup
• bitwise trie
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
26/60
Persistent Vector
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
27/60
Persistent Vector
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
28/60
Persistent Vector
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
29/60
Persistent Vector
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
30/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
31/60
Persistent Vector
getindex
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
32/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
33/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
0b01101010
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
34/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
0b01101010
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
35/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
0b01101010
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
36/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
0b01101010
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
37/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
0b01101010
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
38/60
Persistent Vector
assoc
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
39/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
40/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
41/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
42/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
43/60
Persistent Vector
108 109 110 111104 105 106 107100 101 102 10396 97 98 99
104 105 foo 107
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
44/60
Persistent Vector
Length 4 internal vectors?
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
45/60
Persistent Vector32
From Bagwell, Rompf 2011
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
46/60
327
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
47/60
34,359,738,368
elements
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
48/60
Om
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
49/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
50/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
51/60
f(D1) = V1
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
52/60
diff (V0,V1) = CHANGES
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
53/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
54/60
demo
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
55/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
56/60
demo
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
57/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
58/60
Persistent Data Structures … ROCK
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
59/60
8/16/2019 DavidNolen_TheFunctionalFinalFrontier
60/60
Questions?