8 comments

[ 10.2 ms ] story [ 35.2 ms ] thread
Kicking off the discussion because I'd like to know what people think:

Clojure uses streams and I imagine Haskell does too. This is a bit different though, I guess.

With streams in Haskel, did you mean lazy lists? Or is there something else, I've missed so far?
I implemented a dataflow language a few years ago, for data binding scenarios in a web application.

In a record-oriented data entry and validation heavy application domain, finance sector, insurance policy records, that kind of thing, an imperative approach to updating the user view gets messy pretty quickly. Using a dataflow approach, the client could receive minimal incremental updates from the server in response to events the client sent to the server, such as filling in a field or selecting a value from a drop-down. Because the structure of the UI was declarative, forms could be both pre-populated on download and incrementally updated (with AJAX) using the same set of definitions, rather than ad-hoc cooperation between either end.

Dataflow is trivially parallelizable in so far as it's not difficult to find things to parallelize; selecting an appropriately sized unit of work is somewhat trickier though.

  running_avg
  where 
     sum = first(input) fby sum + next(input);
     n = 1 fby n + 1;
     running_avg = sum / n;
  end;
So if you change the name of the function, you have to change it everywhere inside its body? I'm not sure if I like that.
Yes. Though I guess you could always wrap it up.
That's generally the way recursion works too. Do you have similar issues with it?

IDEs have largely made this a solved problem anyway.