The Lucid programming language
en.wikipedia.org
en.wikipedia.org
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.
Clojure uses streams and I imagine Haskell does too. This is a bit different though, I guess.
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.IDEs have largely made this a solved problem anyway.