DavidNolen_TheFunctionalFinalFrontier

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?