Fantastic. My largest BASICally scripts work fine with 2.0.7 I was able to create a live performance setup using BASICally with Meander diatonic harmony and melody octal radix CV control. I will have to give some thought to posting it here soon. It is a variation of the several ~Misha inspired patches that other have done here.
I like your idea of passing data between modules. One version of the above I did like that, but very simplistically. I believe that this will open up some new ideas for patching and control. II think I qualify as an “uber-nerd”
Also, thanks for the log functions. I will have to try out the unclamped ports.
Oh, just to note, if you are using blocks, I’ve added this to the docs:
NB: Remember that all variables, including the loop variables in FOR-NEXT
loops, are in the same variable space. If you are using blocks
which might be running at the same time, make sure you use different loop
variables in different blocks. Not doing so leads to VERY confusing behavior
when running.
I was convinced there was some terrifically subtle bug in the compilation until I realized I was looping over “i” in multiple blocks. There’s some good reasons most languages don’t have global variables!
Hi @StochasticTelegraphnext, I’d need a bit of confirmation …
I read that in general “all variables start with the value 0.0 when first read”. But I’ve just realized that if STYLE is set to “start on trigger, don’t loop” variables aren’t reset to 0.0 on trigger receipt. It is like this by design, isn’t it?
I like this behavior very much actually! I just would like to make sure that it is not a mistake (and so I can build on this).
For example here OUT1 would return 0, 1, 2, 3, and then 4 in this order on receiving triggers. (Instead of 1,1,1,1, and then 1.)
And there’s a perhaps unwelcome surprise in your shorter for-loop version, in that a NEXT has a implied WAIT 0 in it, meaning that the for-loop version would only update, say, out1, every six samples, whereas the flat version will update every sample. Depending on desired outcome, that might be an issue.
I put in the implied WAIT 0 into loops because I didn’t want to make it too easy to stall or stutter Rack by naively taking a long time while iterating over a For loop. But it’s non-obvious at times.
If you mean a true functional language, like a Haskell, Erlang, Scheme, or LISP, mmmm, that would certainly be a different module, and, I would currently expect, one with a far smaller potential audience. But I’d be curious what an example or two of that would look like, in your imagining.
If you instead mean being able to define and then call functions, that seems a lot more tractable, and I’ve certainly encountered the desire for that myself. I don’t relish the thought of trying to explain and document variable name spaces and countless other issues functions could introduce, but functions sure would be nice sometimes…
Yeah - I’ve never understood why that has not been ported to V2. A lot can be done with docB Formula One and BASICally, but VCV Prototype had some nice features that I miss. In particular was the ability to format and display multi-line text.