See: http://scratch.mit.edu/discuss/topic/60388/ The list get function indiscriminately casts to String, which causes interesting performance hits for projects relying heavily on numbers in lists. Store/Get is slower as manual string cast occasionally, but not by as much as it should be. It forces a cast to string on store by joining a number with the empty string, so that the read will be faster. The interpreter overhead is what pushes it over the boundaries. String access shows performance with no casts.
If you try to perform an arithmetic operation on a list item stored as a number, it first converts the number to a String upon retrieval. It then converts the string back to a number, wasting a lot of processing time! It's due to this weird behaviour that it is actually faster to store variables as type string in the list for arithmetic operations. To fix this, the list getter should be changed to return type *, so that the cast to string or number can be handled the usual way.