i am also kidding about being offended. (though truly, that 'east coast/west coast ’ thing has got to stop. it was marketing bullshit from the beginning.)
but see, i also never said anything like “pd is no good because it lacks xyz, miller really screwed up there.”
i said something like, “huh, it actually would be handy to have a more powerful ‘score’ feature right there in the environment, and it would be easy to add. i’m glad i read this forum because it helped me to realize this.”
and look, puredata does have score features and data, of course. it has tables and
qlist and all kinds of stuff. it’s hard to make cool reactive systems without some concept of state, initial values, so on. it could just use a couple other things. (in my opinion, obviously.)
and the considerations are totally pragmatic. couple weeks back i had a performance where i fired up SC (in emacs, natch), and PD (cause i had some interesting new sounds there), and had them talking so that i could manipulate PD timings in a flexible and efficient way.
i don’t want “livecoding” in PD, i just want some object that takes a script file as an argument and produces (generative/whatever) sequences. it should also accept messages like
load foo, whatever. (maybe it has other messages for other arbitrary manipulations.) then i can edit the script with an editor instead of clicking around, and i can still run my piece by launching a single process instead of the high-wire act of running multiple JACK clients in linux on stage.
i can’t imagine any of this is very controversial.
hm, good point about GC and timing. what i’ve done with lua is write the timer system in C, using posix
clock_monotonic. this gives maximally precise callbacks. each C callback passes an event back to the main thread that is running lua and then lua gets its own callback. lua can set/unset or manipulate timer parameters. if lua gets hung up with GC, it might make a single callback finish too slowly but it won’t cause drift.
a limitation is that changes to delta-time from within a lua callback won’t take effect until the current sleep has completed (timer has already gone to sleep when lua gets its event.)
i’ve no idea if that makes sense!
i’m gonna keep thinking about this (not too hard)
i’m also gonna try Purr Data.