16

I just came across the proposed Boost::Dataflow library. It seems like an interesting approach and I was wondering if there are other such alternative frameworks for C++, and if there are any related design patterns. I have not ruled out Boost::Dataflow, I am just looking into any available alternatives so I can understand the domain and my options better (or roll my own if necessary).

johny655
  • 25
  • 6
  • 1
    Note that this is a proposed library, not yet part of Boost. – Adam Mitz Sep 17 '08 at 00:46
  • C++-template based monads. The copied the concept from FP-based languages and even used Haskell-like notation. They seem to have avoided the name "monad" though. Anyone know if this is intentional? – André Caron Jun 30 '11 at 00:39
  • 1
    I know this is old but if you're still interested in this, flow-based programming is a really interesting relative to the dataflow paradigm, and regarding alternative C++ frameworks, I’ve developed one named “DSPatch” you may want to check out: http://flowbasedprogramming.com – Marcus Tomlinson Oct 17 '18 at 11:50

11 Answers11

5

Wikipedia

There are a couple of good articles in the Wikipedia about the theory of the dataflow programming:

These articles are written by various authors, so there are some overlaps, and some important stuff are missing, but it is a very good start point.

TinyOS

This is an open source operating system based on the dataflow principle. I have bad feelings about that: they don't even mention the term "dataflow". Altough, it is that, and maybe it's worth studying it.

anshul
  • 5,787
  • 4
  • 22
  • 29
ern0
  • 3,062
  • 23
  • 35
  • Thanks for editing! Now there is a promising book, which will be shipped in some months: http://dataflowbook.com/ The promo video is also a very good introduction to the topic. – ern0 Dec 26 '13 at 19:17
4

Look at Intel Threading Building Blocks, particullary its tbb::flow namespace.

Alexei Kaigorodov
  • 12,459
  • 1
  • 18
  • 36
4

You can also look at the two main open source robotics frameworks, ROS and Orocos. There is also Rock, but it is based on Orocos, so it is equivalent if you're just looking for a C++ component framework.

Andrew Wagner
  • 17,943
  • 18
  • 70
  • 92
3

There are some dataflow C++ libraries I have found:

  • cellspp - allows to use spreadsheet evaluation model.
  • DSPatch and Route11 - C++ dataflow frameworks. Allows to write programs in dataflow manner. Looks interesting.
Marcus Tomlinson
  • 55
  • 1
  • 1
  • 8
Alex D.
  • 31
  • 2
2

Just for the records, you can also consider gstreamermm, which is a C++ wrapper around gstreamer.

Fernando
  • 21
  • 1
2

if you want this design for image processing or visulization, you can find a good ressource in itk. And if you want a gui for this (data/work)flow you can use devide. My 2cents, Johan

Johan Moreau
  • 151
  • 2
1

Visual Studio Concurrency Runtime contains an asynchronous dataflow framework in C++.

An example of image processing dataflow: http://msdn.microsoft.com/en-us/library/ff398050.aspx

rwong
  • 5,866
  • 1
  • 20
  • 45
1

You might check my implementation of dataflow here: http://ambient.comp-phys.org

It supports MPI and threading and is based upon custom dataflow types (i.e. ambient::vector) that work through run-time object versioning system.

Alex Kosenkov
  • 135
  • 2
  • 5
0

Maybe Pure Data (pd) has a C++ API...

http://en.wikipedia.org/wiki/Pure_Data

Andrew Wagner
  • 17,943
  • 18
  • 70
  • 92
0

If your area is sound generation/processing, use http://www.synthedit.com/

It looks promising, I've found a good answers for a deep problem in the SDK docs (polyphony). Funny, but they don't mention the word dataflow.

ern0
  • 3,062
  • 23
  • 35
0

Dataflow programming is one of those things that's been lurking around for decades and never quite taken off... for software anyway; in the VHDL/Verilog world you find yourself naturally adopting the dataflow mindset much more readily. But in the software world... somehow it just never seems to scale beyond toy systems, perhaps because people insist on tying it together with visual programming (and I see boost dataflow also treads this path). Some people look to dataflow programming to solve the software crisis by making it more like HW design with pluggable components with interconnectable pins... but hang on, HW design is really hard too! (Interestingly, while in the HW world visual programming systems do exist, noone actually uses them to build anything big).

The most interesting, active modern example I'm aware of using dataflow principles is the PureData audio-visual programming environment.

timday
  • 23,811
  • 10
  • 77
  • 132
  • 2
    Dataflow programming has taken off quite successfully for National Instruments' Labview (http://www.ni.com/labview/). I'd hardly call Labview a "toy system". ;-P I'm surprised no one mentioned it. – Emile Cormier Jul 08 '11 at 16:58
  • I'd forgotten about LabView; thanks, yes it's a nice example. I see it's registered by TIOBE, although only somewhere in the unranked #51-100. I'm curious what the most complex systems which have been built with it are ? – timday Jul 08 '11 at 17:53
  • 1
    I know from experience that it's painful in Labview to program complex algorithmic behaviour. IMO, it's best used for problems that lend them themselves well to the dataflow paradigm. It's great for non-programmers (scientists, engineers) to quickly implement signal processing, visualization, and control for experiments, prototypes, and test benches. Unfortunately, the visual programming paradigm makes it difficult for many people to work in parallel using existing software version control tools. – Emile Cormier Jul 08 '11 at 18:37