As I was working with microBlocks (of John Maloney), I came to realize that list handling performance was very different if one declares a list and ADDs N elements to it, versus declares a list with N elements and then REPLACES these elements with the proper values. The REPLACE always worked magnitudes faster.
I tested the same logic in SNAP and saw that there was a totally reverse time difference between the two approaches.
ADD of 100 list elements took consistently LESS than 3ms to process.
REPLACE of 100 elements took consistently 4-13ms to process.
Here are the two code blocks compared:
Any reason for the opposite behaviour and why SNAP is so much better at handling element ADDs ?
Just curious !
PS: When I tried the REPLACE within a FOR i 1 TO 100 loop, it also went down to 1-3ms.
Jens had a good suggestion:
It's a little kludgy, but we don't have the value-index-list feature for FOR EACH.
Cool. I'll put that method in my tools list.
One last related question:
Is it any faster to process a list element via a variable where "variable = item n of list" versus directly using "item n of list", if "item n of list" is repeated many times in a loop ?
Since the first method is a bit faster with calculations, I was wondering if the same logic applies to lists ?
I'm afraid the answer is "it depends." If you are doing functional programming, with lots of IN FRONT OF to construct lists, then ITEM n OF for large n is slow. (Other things are fast; it's a tradeoff.) If you're doing imperative programming, with lots of ADD value TO list, then ITEM OF is constant time and it shouldn't make much difference either way.