[reactive] FRP, continuous time and concurrency

Daniel Bünzli daniel.buenzli at erratique.ch
Tue Jun 9 15:54:28 EDT 2009


I don't think the push/pull issue is relevant to the discussion about  
frp and the OO observer pattern. The push/pull issue is an (important)  
implementation detail of FRP.

Le 9 juin 09 à 19:09, Álvaro García Pérez a écrit :

> This has similarities to the OO Observer pattern (in fact, you can  
> implement it using the pattern) and is also supported in some new  
> scripting languages as JavaFX.

One thing the observer pattern doesn't give you is any guarantee on  
the order of updates: when the observed value changes it updates all  
the observers in no specified order. However if a value observes more  
than one value this may result in glitches (i.e. values you actually  
don't want to see).

For example suppose your value dependencies are as follows :

a = b + c
b = c + 1

i.e. a observes b and c, and b observes c and initially we have :

c = 0
b = 1
a = 1

If c updates from 0 to 2 any of the following two sequences of updates  
may be seen with the OO observer pattern :

c = 2; a = 3; b = 2; a = 4;
c = 2; b = 2; a = 4;

But usually you don't want to see the a = 3, it's a glitch. FRP  
systems update the graph of dependencies in topological order (i.e.  
they ensure before updating a value that each value it depends on has  
been updated) and you are guaranteed you'll only see the second  
sequence of updates.

FRP can be seen as a form of value observation in the sense that  
changes in a value get eventually propagated to other values that  
depend on it. But it is clearly not the same as the OO observer  
pattern as usually understood/implemented because of this ordering  
issue. FRP is more subtle and powerful in the management of the  
value's dependency graph.

Best,

Daniel


More information about the Reactive mailing list