The Return of Stream I/O @andrestaltz Cycle.js.org A functional and - - PowerPoint PPT Presentation
The Return of Stream I/O @andrestaltz Cycle.js.org A functional and - - PowerPoint PPT Presentation
The Return of Stream I/O @andrestaltz Cycle.js.org A functional and reactive JavaScript framework for cleaner code Haskell A pure functional programming language Haskell A pure functional programming language Logic Effects Haskell A
Cycle.js.org
A functional and reactive JavaScript framework for cleaner code
Haskell
A pure functional programming language
Haskell
A pure functional programming language Logic Effects
Haskell
A pure functional programming language Logic Effects
Logic Effects Monadic I/O Stream I/O Continuation I/O
Logic Effects Monadic I/O Stream I/O Continuation I/O
Logic Effects Monadic I/O
Program Compiler, binary
Logic Effects Stream I/O
Program binary Operating System
Program binary Operating System
Requests "Write" msgs
Program binary Operating System
Requests Responses "Write" msgs "Read" msgs
Program binary Operating System
Requests Responses "Write" msgs "Read" msgs
Reactive system versus Transformational system
"A transformational system repeatedly waits for all its inputs to arrive, carries out some processing, and outputs the results when the processing is done."
(1998)
(start) Inputs Processing Output (done)
Examples: Compiler UNIX commands
"A reactive system continuously interacts with its environment, using inputs and outputs that are either continuous in time or discrete. The inputs and outputs are often asynchronous, meaning that they may arrive or change values unpredictably at any point in time."
Input Processing Output
Examples: Real-time systems User interfaces Websites Servers
1990
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Haskell Stream I/O
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript Monadic I/O good for transformational programs 👎
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Haskell Monadic I/O
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Multimedia
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Period of confusion
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Period of confusion
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Shared-memory concurrency
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Shared-memory concurrency
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Early JavaScript apps
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Early JavaScript apps
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Asynchronous Continuous interaction
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Asynchronous Continuous interaction
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
Java JavaScript
Message passing concurrency
Program binary Operating System Requests Responses
Stream I/O
Message passing Lazy lists Blocking
Program binary Operating System Requests Responses
"Stream I/O"
Message passing Lazy lists Streams Blocking Asynchronous
Program binary Operating System Requests Responses
Message passing Streams Asynchronous
Cycle.js
Stream of DOM events Stream of actions Stream of state Stream of reducers Stream of markup to the DOM
👎 Asynchronous message passing 👎 User interfaces or any reactive system 👎 Separation of concerns 👏 Handling question-and-answer I/O
Cycle.js
Elm
Elm program Elm runtime
Task Result "Do this and then that and tell me the result"
Monadic I/O
Task: Monadic I/O Msg and Cmd: "Stream I/O"
Elm
Transformational subprogram with Monadic I/O Reactive program with "Stream I/O"
Elm
Store Components
State Action
Flux
Message passing + purely functional = "Stream I/O"?
1990
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC
C
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC Java JavaScript Ruby C#
C
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC Java JavaScript Ruby C#
C
Reactive programs Transformational programs
2000 2010
1990
Pascal FORTRAN BASIC Java JavaScript Ruby C#
C
Reactive programs Transformational programs
2000 2010
Elm Elixir Clojure Dart
1990
Pascal FORTRAN BASIC Java JavaScript Ruby C#
C
Reactive programs Transformational programs
2000 2010
Elm Elixir Clojure Dart