Fair enough. I was being an ass. It was late and I was frustrated. A round of apologies on me.
When I said inefficient, I mean in terms of the programmer’s time/economy of code, not execution time. So further apologies if that was unclear.
And yes, I have actually used quite a number of scripting languages. Mainstage makes use of a custom javascript implementation, and while it’s not the most up to date ECMAScript, it’s very powerful, fast and convenient. The fact that it’s object oriented allows me to accomplish things much more efficiently.
Other examples: both Cinema 4D and Houdini make use of python as their scripting language. Again, object oriented, and very fast and easy. Python even has some very human readable syntax, which is convenient if you’re looking to implement something easy for musicians with varying levels of code experience (or even interest). The best part is your code reference can focus on your built-in data types, without the need to teach programming basics, or explain any unusual syntax. Users can look at any number of python references online, as opposed to trying to look up Pascal references that may or may not apply. The bounty of useful python info online is hard to overstate.
An example of an issue where a procedural language like this is cumbersome:
I’m making a script that activated and deactivates different groups of MidiInBlocks. How I’d like to achieve this would be to define InstrumentSet objects that have a method for bypassing or unbypassing all of their given MidiInBlocks. I could take this one step further and have the “turn on” method of any given InstrumentSet also call the “turn off” method of all other InstrumentSets. Then I can use one command to both activate one set, and deactivate all others. (As long as we’re talking wishlist, the best would be a file in which I could define some boilerplate I use frequently, so it’s available in all scripts. Mainstage has this too, though it was a bit of a hack.)
Currently instead I’m defining instrument set arrays and using “turn on” and “turn off” functions with for loops that unbypass or bypass all the instruments of a given instrument set, respectively. I could define another array of instrument set names that the “turn on” function could then loop through and call the “turn off” function on, though to check against the array of names I will have to also pass the instrument set name to the “turn on” function as a string in addition to the instrument set array itself. Unless there’s a function that returns the name of an array? That also requires me making an extra array and retyping all the instrument set names as strings.
And declaring variables outside a loop and then assigning them inside instead of just declaring and assigning them in a single line is less efficient economy of code. That’s two lines instead of one for every variable to which I might need to assign data that makes use of ‘i’.
Anyway, sorry again for being an ass. But I really do have a wealth of experience with different coding languages in different scripting contexts, and while I appreciate the intention of making GPScript beginner friendly and simple, I’m not a fan of the choice to use a procedural language, or anything that makes me use more code than necessary.