Dataflow Programming Languages
Dataflow programming languages are ones that focus on the state of the program and cause operations to occur according to any change in the state. Dataflow programming languages are inherently parallel, because the operations rely on inputs that when met will cause the operation to execute. This means unlike a normal program where one operation is followed by the next operation, in a dataflow program operations will execute as long as the inputs are met and thus there is no set order.
Often dataflow programming languages use a large hashtable where the keys are the data of the program and the values of the table are pointers to the operations of the program. This makes multicore programs easier to create in a dataflow programming language, since each core would only need the hashtable to work.
A common example of a dataflow programming language is a spread sheet program which has columns of data that are affected by other columns of data. Should the data in one column change, other data in the other columns will probably change with it. Although the spread sheet program is the most common example of a dataflow programming language, most of them tend to be graphical languages.
In a control flow language, you have a stream of instructions which operate on external data. Conditional execution, jumps and procedure calls change the instruction stream to be executed. This could be seen as instructions flowing through data (for example, instructions operate on registers which are loaded with data by instructions - the data is static unless the instruction stream moves it). A control flow "if" statement jumps to the correct branch in the instruction stream, but the data does not get moved.
In a dataflow language, you have a stream of data which is passed from instruction to instruction to be processed. Conditional execution, jumps and procedure calls route the data to different instructions. This could be seen as data flowing through otherwise static instructions like how electrical signals flow through circuits or water flows through pipes. A dataflow "if" statement would route the data to the correct branch.
Some examples of dataflow features and languages:
- Spreadsheets are essentially dataflow
- Unix pipes
- Futures and promises are dataflow or dataflow-like constructs found in many modern languages
- The messaging in the actor model is dataflow
- Some languages have dataflow features:
- Oz has dataflow variables
- Groovy has GPars
- Clojure has clojure.contrib.dataflow, Reagi and Javelin
Textual languages
- VHDL, Verilog and other hardware description languages are essentially dataflow
- Chuck
- Cunieform
- Lustre, used in defence, aerospace and power plant industries
- Ptolemy II
- Nyquist
Visual Languages
- LabVIEW (screenshot [source])
- Max/MSP (screenshot [source])
- Pure Data (screenshot [source])
- Reaktor (screenshot [source])
- SCADE (screenshot [source]), the graphical programming environment for Lustre
- SynthMaker (screenshot [source]) and FlowStone
- vvvv (screenshot [source])
- Expecco (screenshot [source])
- Shake (screenshot [source])
- [BLOK] (screenshot [source])
- Quartz Composer (screenshot [source])
- AudioMulch (screenshot [source])
Products which embed a visual dataflow language:
- Blender
- Voreen (screenshot)
- Unreal Engine's Kismet (screenshot)
- ANKHOR FlowSheet (screenshot)
- Dynamo for Autodesk Revit (screenshot)
- LiveBlox (screenshot)