ruby fuza 2016

28
–Nelson Pascoal “Reactive Programming Principles” make -> tasks -> flow http://www.kotive.com

Upload: nelson-pascoal

Post on 14-Apr-2017

265 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Ruby fuza 2016

–NelsonPascoal

“ReactiveProgrammingPrinciples”

make->tasks->flow

http://www.kotive.com

Page 2: Ruby fuza 2016
Page 3: Ruby fuza 2016

Isnotwhatthistalkisabout

Page 4: Ruby fuza 2016

Wikipedia:toogenericandtheoretical

Stackoverflow:canonical&notsuitableforbeginners

ReactiveManifesto:somethingyouwouldgivetomanagersorbusinesspeople

WhatisReactiveProgramming?

Page 5: Ruby fuza 2016

DilbertesqueDefinition

Incomputing,reactiveprogrammingisaprogrammingparadigmorientedarounddataflowsandthepropagationofchange.Thismeansthatitshouldbepossibletoexpressstaticordynamicdataflowswitheaseintheprogramminglanguagesused,andthattheunderlyingexecutionmodelwillautomaticallypropagatechangesthroughthedataflow.

Page 6: Ruby fuza 2016

DilbertesqueDefinition

Incomputing,reactiveprogrammingisaprogrammingparadigmorientedarounddataflowsandthepropagationofchange.Thismeansthatitshouldbepossibletoexpressstaticordynamicdataflowswitheaseintheprogramminglanguagesused,andthattheunderlyingexecutionmodelwillautomaticallypropagatechangesthroughthedataflow.

Page 7: Ruby fuza 2016

Reactiveprogrammingisprogrammingwithasynchronousdatastreams

(Nothingnew,eventbusesoryourtypicalclickeventsareeventstreams.)

Page 8: Ruby fuza 2016

Reactiveprogrammingisprogrammingwithasynchronousdatastreams

(Nothingnew,eventbusesoryourtypicalclickeventsareeventstreams.)

Abstractionsforhandlingconcurrentasynchronousprocessingwithinasystem

Page 9: Ruby fuza 2016
Page 10: Ruby fuza 2016
Page 11: Ruby fuza 2016

[8, 3, 1, 6, 4, 7, 10, 14, 13]

Page 12: Ruby fuza 2016

[8, 3, 1, 6, 4, 7, 10, 14, 13][8,[3,[1,[],[]],[6,[4,[],[]],[7,[],[]]]],[10,[14,[13,[],[]],

[]],[]]]

Page 13: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDriven

Non-blockingIO

Asynchronous

andBackPressure

Page 14: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIO

Asynchronous

andBackPressure

Page 15: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIO

Asynchronous

andBackPressure

Page 16: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIO

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 17: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIO

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 18: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIO

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 19: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIOhttps://github.com/libuv/libuv&http://tinyurl.com/mwhhx5l

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 20: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIOhttps://github.com/libuv/libuv&http://tinyurl.com/mwhhx5l

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 21: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIOhttps://github.com/libuv/libuv&http://tinyurl.com/mwhhx5l

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressure

Page 22: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIOhttps://github.com/libuv/libuv&http://tinyurl.com/mwhhx5l

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressurehttp://tinyurl.com/pbs5yq9

Page 23: Ruby fuza 2016

MainprinciplesofReactiveProgramming

MessageDrivenhttp://tinyurl.com/prr8j43

Non-blockingIOhttps://github.com/libuv/libuv&http://tinyurl.com/mwhhx5l

Asynchronoushttp://tinyurl.com/nqnakz6&http://tinyurl.com/pz869qe

andBackPressurehttp://tinyurl.com/pbs5yq9

Page 24: Ruby fuza 2016

ReactiveProgrammingraisesthelevelofabstractionofyourcodesoyoucan

focusontheinterdependenceofeventsthatdefinethebusinesslogic,ratherthanhavingtoconstantlyfiddlewithalargeamountofimplementationdetails.

http://tinyurl.com/mwhhx5l

Page 25: Ruby fuza 2016

Actormodelisreactive

• Messagedriven• Asynchronous• CanbeusedtoisolateblockingIO

(carefulwiththreading)• Correctmessagehandlingcangive

youbackpressure(verymanualthough)

Page 26: Ruby fuza 2016

Moreinlinewithhowtheworldworks

make->tasks->flow

Page 27: Ruby fuza 2016

Let'slookatanexample.

Acoffeeshopsimulator:)

Page 28: Ruby fuza 2016

THANKYOUhttps://github.com/foomip/coffeeshop-ruby

@foomip

http://www.kotive.com