17. events are recurrent
or non-recurrent, not backing
any specific value.
They can be similar to signals,
but can also lead to
dynamic flow modification,
configuration propagation etc.
18. flow is
a dynamic graph of logic,
with routing rules based
on value dependencies
19. transport is
an infrastructural detail.
Transports implement flows in
a specific environment, be it a single
machine or a distributed system
20. logic defines what happens
when a value changes,
be it normal
or exceptional behaviour
22. disclaimer
!
no real code examples here,
as they don’t contribute to the communication of
concepts, but instead tend to end up in
discussions about syntax and programming
language theory.
!
Also, real code on slides, you know..
24. there is no value re-assignment in Erlang.
Values changing
over time can be
“encapsulated” in the
process (actor) loop
25. signals can be modelled in Erlang
as messages sent to actor groups
with
every holding actor’s loop run
26. events can be modelled as
messages sent to relevant actors or
whole groups. Some events are
already provided by the runtime
27. flow can be modelled as hierarchy of
actors and their groups, with the ability to
dynamically change it,
add new actors or even modify
their code at runtime
28. transport is what the runtime already
offers out-of-the-box: message
delivery to local actors or remote ones,
with location transparency
29. logic can be implemented as
pattern-matched functions,
called as actors’ callbacks on
arriving messages
30. Erlang doesn’t implement (F)RP
abstractions as first-class citizens,
but it offers more general
abstractions to model these
39. more example foundations exist,
implementing the
concepts partially or fully,
adopting them as far as possible
for a particular platform.
!
Rx*, Reactor, Akka, Bacon.js +++
43. signals are notifications sent to a
component’s downstream whenever
it has computed a value based on
its upstream. Signal is an indication
of new / modified value availability
45. flow is a topology of
components, connected
through streams
46. transport is inner-process, inter-process
and distributed communication through
embedded or external messaging
middleware
47. logic are reusable, theoretically
sequentially combinable components
that implement minimal pieces such
as statistics, filters, aggregates,
parts of continuous queries etc.