Visual Dataflow Implemented in Lisp [pdf]
web.onetel.com
web.onetel.com
- Home: http://web.onetel.com/~hibou/fmj/FMJ.html
- Tutorial: http://web.onetel.com/~hibou/fmj/tutorials/TOC.html
After all that, I'll sort out the .303 release. This will allow free (as in beer) non-commercial use.
Also, I think there's a typo on this page because the images doesn't seem to match the equation (or I'm not understanding the mapping between code and graphics): http://web.onetel.com/~hibou/fmj/tutorials/Functions.html
Anyone who has used Shake or Nuke knows that working with essentially a domain specific interface is an enormous benefit.
I think there is a lot of value in learning from compositing systems as well as Houdini when writing software - namely being able to freeze data in place and iterate on one data transformation at a time.
And the virtual + freeze is also very present in audio production software. All this things that are close to memoization, laziness are present there.
Text-based languages have a different problem: indicating which parts of your code can be run in concurrently. They evolved to run on single processors, with flow of control specified by the programmer. The result is that programmers of those languages tend to think sequentially. Adding support for SIMD parallelismmight be straightforward, but MIMD parallelism is more problematic. With dataflow programs, you don't have to specify what can run in parallel.
You also get homoiconicity for free: programs are directed graphs, the most general data structure. No parsing or optimization is necessary. Algorithms are reduced to their most basic form (actions and communication), not shoe-horned onto a von-Neumann computer architecture. This does, however, require the dataflow programmer to think in a different way.
The typo has been fixed. Thanks for pointing it out.