Hacker News new | past | comments | ask | show | jobs | submit login
Lucid programming language (wikipedia.org)
33 points by stefano on Oct 25, 2009 | hide | past | favorite | 8 comments

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.

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?

Yes. That is what I mean.

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.

     sum = first(input) fby sum + next(input);
     n = 1 fby n + 1;
     running_avg = sum / n;
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.

That's generally the way recursion works too. Do you have similar issues with it?

IDEs have largely made this a solved problem anyway.

Yes. Though I guess you could always wrap it up.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact