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.
Dataflow languages lend themselves to graphical programming paradigms much more readily than imperative approaches as well. e.g. This company's http://www.futurepointsystems.com/?page=products XEE product is a pretty slick dataflow XML ETL tool.
8 comments
[ 10.2 ms ] story [ 35.2 ms ] threadClojure uses streams and I imagine Haskell does too. This is a bit different though, I guess.
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.
IDEs have largely made this a solved problem anyway.