Boost logo

Boost :

Subject: Re: [boost] [review] Dataflow Library
From: Hervé Brönnimann (hervebronnimann_at_[hidden])
Date: 2008-09-04 23:24:52


Stjepan: I'm just curious, because my wife uses such a dataflow
program for interactive music performance.

The program is called MAX and is distributed by a company named
Cyclic74 (http://www.cycling74.com/products/max5). Some of the
components are MIDI inputs or outputs, and the signal can consist of
a scalar or or more evolved entities like a soundwave, etc. It has
MSP (audio signal processing) and Jitter (video processing) modules.
It's been in use for more than 20 yrs, allows graphical interface
programming, generation of C code, and separate compilation.

One of the worse quirks when flowing the data (in a push mode, I
guess) is that components are processed in (get this) geometric
order, from left to right (breaking ties with top to bottom, I
think). I guess it's important to know what the order i, when you
allow feedback loops (cycles). But the left-to-right has been a
never-ending source of bugs, in my wife's experience :-)

Which prompts me to ask:
- can you create push networks with cycles?
- in the presence of cycles, how is the signal flowing to the data
sinks?
- in the absence of cycles, do you process the components in
topological sorting order? or is the evaluation order arbitrary?
Surely I could deduce that from your docs if I had read carefully the
interface of the components, but why not discuss it up front? I'm
lacking a general high-level view of what I can and can't do with
this library.

A nice feature of Max/MSP though, is that you can create a "patch"
which recursively acts as an atomic component, and can be compiled
separately, so you can create libraries of patches some of which are
opaque to enforce intellectual property (not that I approve,
but...). Is there an abstract base class for component? This would
enable one conceivably to distribute one's own components as DLLs
(i.e., not source).

MAX was originally conceived by Miller Puckette, who went on to
rewrite it in Tcl/Tk as PureData (http://en.wikipedia.org/wiki/
Pure_Data). It still has connection to Midi, but is more geared
toward data manipulation.

These are the ones I'm more familiar with. I just found the
WikiPedia page on my own (http://en.wikipedia.org/wiki/
Dataflow_programming) and *then* (only then) noticed the link in your
description (second section of Introduction page documentation).
It's way too discrete imho. Bring it out, write a short paragraph
about some known examples, fire up the imagination, something. As it
is, it's a really steep curve in the introduction (which is an
introduction to your library, but not to the topic).

Beyond that, I've just started browsing, but I was a bit put off by
the steepness of the documentation and the use of operator
overloading. It would really benefit from a gentler introduction
that is not based on the existing library but on the general idea of
dataflow programming. It gets more concrete in the examples, but
that's too late, I've already been hopelessly confused by that point :)

Cheers,

--
Hervé Brönnimann
hervebronnimann_at_[hidden]

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk