Dataflow Languages Are Not New
I frequently receive emails from people who insist that COSA is nothing but a dataflow programming model and that I am just reinventing the wheel. Dataflow is not new. I have been attracted to visual dataflow languages (e.g., LabView, Prograph, etc...) for many years. I remember thinking that the graphical representation, the powerful reuse mechanism and the flow-through style combined beautifully to create a much more intuitive and easy way to develop computer applications. People have been using dataflow languages for over twenty five years. The problem is that, if the dataflow model was the panacea that would cure all that ails the software industry, it somehow failed to gain widespread acceptance. I mean, shouldn't we all be using dataflow for everything by now? The reason is obvious; something is missing. Dataflow languages tend to be rather high-level and are not as flexible as some of the more conventional languages. Adding a new, non-composite object into a dataflow language is not easy for the average user and usually requires the use of a compiled language such as C or Java.
COSA Is Not Dataflow
Let me come right out and say it: COSA is not a dataflow programming model. COSA is a signal-based, synchronous, reactive software model in the tradition of reactive languages like Esterel, Lustre, Signal, etc... There are certainly similarities between COSA components and dataflow objects in that COSA components can be made to pass queued messages (data) to one another in a unidirectional (input/output) and asynchronous manner but that's about it. COSA is much more flexible than this. Here are a few differences:
- Above all, COSA is synchronous at its fundamental level (the operation or instruction level). As far as I know, this is not true of dataflow languages. Heck, I don't think it's true of other reactive languages either.
- Whereas dataflow languages are algorithmic internally, COSA's elementary cells are entirely signal-based.
- COSA solves the data and event dependency problem.
- COSA uses fine-grained parallelism.
- COSA is temporally deterministic, that is to say, the execution order (concurrent or sequential) of operations in a COSA program is guaranteed. As a result, COSA programs are extremely reliable.
In conclusion, let me say that COSA is more like VHDL or Verilog, neither of which fall into the category of dataflow languages. A COSA program is comparable to a logic circuit or pulsed neural network. So please, stop telling me that COSA is a dataflow language. It is not.