I’ve been pointed at the Kronark YouTube channel which is only a few days old and purports to show how to build software using nodes. youtube.com/watch?v=qM2mtAPEmd4
Several things jump out at me: (1) nodes do NOT need to return a value (unlike functions, which must always return something ; does the need to return something lead to bloat???) (2) undefined behaviour is allowed (does over-defining of ALL behaviour lead to bloat???) (3) encapsulation and abstraction - 0D defines Container components which encapsulate and elide layers, 0D does this encapsulation at runtime ; Kronark compiles out encapsulation at compile time (AOT). I feel uneasy about this, when taken to the extreme. Maybe 0D should be described as“structured concurrency” (???) Whereas Kronark is just more-of-the-same linear composition (???) that works in a feed-forward, single-threaded manner. It will be interesting to see examples of concurrency and feedback in Kronark. (FTR, “feedback” is not the same as “recursion”).
Jimmy Miller they did the dang thing: youtube.com/watch?v=Tu_K2DPCteU
On the point of feedback, are you referring to things like "backpressure" where the flow of information across each wire is bidirectional? Or something else?
Ivan Reese not backpressure. Feedback is a loop from output back to input. Seen in EE op-amp designs, I've never seen it in software (other than when I use it). It ain't like recursion, since there is a "propagation delay" involved (FIFO queuing instead of LIFO callstack). Fig.1 and Fig. 2, of this note that I think I posted some time ago, shows feedback with the possibility of intervening messages (i.e. not naturally recursion). programmingsimplicity.substack.com/publish/post/147186037?back=%2Fpublish%2Fposts . I would be happy to explain further, if I can think of what to say about it...
📝 2024-07-30-Diagram Compiler Status
This project creates a working “Larson scanner” (seen on the T.V.
Maybe restating the obvious...
Look at pin 9 of Decode. It goes to 2 places.
In a function-based programming language, you have to pick an order, say first to the red box then to the J input of the Reverser box.
Or v.v.
In a message-based system, though, you don’t have to pick an order. You plunk an event onto the red box’s queue and you plunk an event onto the Reverser’s input queue. They (red box and Reverser box) get around to processing their input events some time in the future.
Feedback is more of the same, plunking events into input queues, but not guaranteeing when they will be processed, only that the events will be processed in order of arrival. (Recursion guarantees the opposite - a recursive call gets to jump to the head of the queue).
This is a subtle difference, but, makes a huge difference in design mentality. Kinda like a butterfly in Japan affecting the weather in North America.
Yeah, it always frustrated me that you can't naively create feedback loops in Max/MSP. The irony! But I understand the tradeoffs.
Ivan Reese I've never used Max/MSP. Why can't you create feedback loops? What are the tradeoffs?
Paul Tarvydas Roughly, logic nodes trigger evaluation immediately when they receive input on their primary (leftmost) port. So you can have a feedback loop that goes to a non-primary port, but not a loop that goes to a primary port (because that's just an infinite loop). Audio nodes behave a little differently, and there are some means for creating feedback (let setting up delay taps). I remember it all being a bit confusing, and less expressive than I wanted.