--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsubscri...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsubscri...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
I believe that when you can compose systems from components and substitute components at will, then "state" is moot - no one needs to care what happens inside a component (since any component can be replaced by a like component, regardless of implementation).
I agree, "inside" is the key word - in FBP, side effects are minimized because every process has its own working storage - even when there are multiple occurrences of the same component in a single network. The only other place where data is stored is in Information Packets, which have a single, unique "owner" at any one point in time, or are in transit, when no process can affect them.
(In the interests of full disclosure, FBP does support "named globals", but these should only used in very specific situations, and very carefully - and they are completely trackable!)
On Fri, Sep 15, 2017 at 9:26 AM, Paul Morrison <jpau...@gmail.com> wrote:I agree, "inside" is the key word - in FBP, side effects are minimized because every process has its own working storage - even when there are multiple occurrences of the same component in a single network. The only other place where data is stored is in Information Packets, which have a single, unique "owner" at any one point in time, or are in transit, when no process can affect them.Some components have to be stateful, of course, like "sort all packets" (in a system without an explicit end-of-stream packet, this would be "sort all packets between a left bracket and a right bracket), which inherently must keep all the packets being sorted in private state before it can emit any of them.
(In the interests of full disclosure, FBP does support "named globals", but these should only used in very specific situations, and very carefully - and they are completely trackable!)Can you say more about this? It would be simple to have a key-value component that allows you to send lookup and update packets to it.
Quite true! However, without brackets, even without explicit end of stream packets (as in my GitHub implementations), Sort just has to receive all its input IPs, sort them, and then output the result.
Currently FBP allows references to any object to be stored in a "global" hashmap (getGlobal and putGlobal), but I am thinking that maybe we should only allow IPs to be stored - this might be more in keeping with FBP philosophy! What do people think?
Hi Paul,I think the common pattern for collation is Map-Reduce: https://en.m.wikipedia.org/wiki/MapReduceGoogle was built on this pattern, until they switched to DataFlow: https://www.quora.com/Why-did-Google-stop-using-MapReduce-and-start-encouraging-Cloud-Dataflow
I think state is essential, and trying to get rid of it is the problem with FP. The world is stateful. This is why FP works so well for abstract problems but makes solving real life problems so difficult.
The big problem with OOP was that it makes it easy to build systems with objects that correlate with reality within a single session, but not when those objects need to persist over time.It's great for building UIs where everything happens in a single session. As long as the object model can remain in memory it all is fine. Once the computer is turned off, things get complicated.
That's why OOP has been so dependant upon RDBMS despite the object-relational impedance mismatch: https://en.m.wikipedia.org/wiki/Object-relational_impedance_mismatch
For me one of FBPs biggest strengths is the ability to 'time stretch' processes.
Time is an essential property of reality. Entities in our world except exist over time, and their state changes.FBP processes can be executed over the time scales of real world processes. Weeks, months and years. Not just the minutes and hours of a single session.
Regards,Ged
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
Everything in its proper scope is what we should be striving for.
2. In my dataflow system I've used a third type of port: property
(other two are consumer and producer). It can act as consumer (in my
implementation, I needed to add setter consumer for each property, but
the result is the same), so other components can set its value by
sending a message.
- pro: it's more FPBish than a global storage
- pro: component's storage variables are visible
- con: if several components share the same value, all of them
contains it, redundant storage
- con: a single variable invokes lot of wiring, makes the graph big
- con: no automatic sync-value-to-all-components, must be drawn every time
--
ern0
dataflow evangelist
I seem to be having trouble explaining why chopping a program up into separate asynchronous processes makes maintenance so much easier.
--
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
pt
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
There is one thing that FBP has that FP doesn't - concurrency. Order of operations cannot matter in FBP.
On Mon, Sep 25, 2017 at 3:02 PM, Paul Tarvydas <paulta...@gmail.com> wrote:
There is one thing that FBP has that FP doesn't - concurrency. Order of operations cannot matter in FBP.
It can't matter in FP either. There is no explicit concurrency, but the whole thing is implicitly concurrent.
So, does concurrency inoculate sequential code with FP-ness?
As in...is the same asc = G(F(a),F(b))?
... The trick is to be able to encode multiple-output boxes in this style, something like this:
let (a, b) = F(c, d).
Sam
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
Hi Sam,"So FBP is equivalent to FBP with immutable state, and we can reason about FBP programs more easily."I'm guessing that one of the FBPs should be FP...?!
I also suspect that the FBP unique ownership rule makes mutability more palatable...?Bert, I would think you will want to weigh in...
Imagine poking pixels to a pixmap one by one, it is simply ludicrous to try to do this in functional programming where the pixmap cannot be modified unless you copy it. Yeah, they try to make it more efficient with trees and other data structures, which could be good in some cases, but actually for the simple case we need to allow the thing to be modified, and take a copy only if the unmodified pixmap is still needed for something. Count references, it's not hard. So you can have semantically functional programming with efficient mutable state also.
[...]
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsubscri...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
Hi Ged,
I have to ask: turtles as in the chocolates (Turtles) or the animal?
I guess they are both soft on the inside and crunchy on the outside - if that is the metaphor you had in mind...?!
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
For an FP function to do something equivalent, it needs to use something like a monad.So you could potentially say that FBP components are roughly analogous to FP functions with monads.YMMV, but personally I prefer to wrap my head around the concept of FBP components rather than the concept of FP monads.
Monads have also been explained with a physical metaphor as assembly lines, where a conveyor belt transports data between functional units that transform it one step at a time
Purely functional programs can use monads to structure procedures that include sequenced operations like those found in structured programming
IO
as an action that
takes as its argument the current state of the world, and will return a
new world where the state has been changed according to the function's
return value." - sounds like a global run riot!f::Int -> Maybe Int f 0 = Nothing f x = Just x
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.