4 ms·
Max and Pd are interesting languages. Quoting the original designer, Miller Puckette [0]: "The design of Max breaks many of the rules of computer science ortho
by tayistay 7y ago
Max and Pd are interesting languages. Quoting the original designer, Miller Puckette [0]:
"The design of Max breaks many of the rules of computer science orthodoxy, sometimes for reasons of practicality and sometimes of style."
Audio and control signals are both represented in the same canvas, but with substantially different semantics. Audio signals are roughly what you might expect if you are familiar with analog audio processing: plug one box into the next, and data is constantly flowing. The control signals are actually messages (think MIDI), and can have some counterintuitive semantics. For example: if a single message is sent to two different objects, then those two objects send a message to a third (diamond shape), the third object will be executed twice, despite all of this happening in the same logical time-step. Execution order also depends on the position of the objects in the canvas, IIRC.
The semantics are at least partially historical, because when Max was originally developed, real-time DSP wasn't available.
[0]: http://msp.ucsd.edu/Publications/dartmouth-reprint.dir/ http://msp.ucsd.edu/Publications/dartmouth-reprint.dir/
- jancsika 7y ago> For example: if a single message is sent to two different objects, then those two objects send a message to a third (diamond shape), the third object will be executed twice, despite all of this happening in the same logical time-step. That's not an accurate description of the language's semantics. For example-- is the third object a unary or binary operator? Also-- for a unary object in a proper flow-based language, what happens if that third object is a unary operator like `sin`? I think the language/frontend cannot let you make the connection because it doesn't make any sense (or you'd end up implicitly overwriting one of the values/vectors). In a Max control chain you do get two outputs from two incoming connections to a unary operator. But then perhaps the programmer wanted to collect those two values into a two-item list and trigger that further down the chain. If they practiced "Fresco-based write protection" as they were trained, the diagram is encoded as spaghetti and we can never know for sure. :)
- qmmmur 7y agoI mean, this kind of comment really only comes from someone who has never used the language in any kind of depth. Whether or not the object triggers twice depends on type of object as you pointed out, ordering of inputs forgetting whether or not two executions is perhaps intended.
- tayistay 7y agoSorry, I should have specified that the third object is a unary operator (was thinking just print). The point is that it can execute something twice, and that differs from a proper flow-based language. The main point is that the semantics are, shall we say, interesting.