▲ | marhee 10 hours ago | |
I wonder, in reality, if a Lua program uses large (consecutive) arrays, its values will likely have the same type? At the very least it is a common use-case: large arrays of only strings, numbers etc. Wouldn’t it make sense to (also) optimize just for this case with a flag and a single type tag. Simple and it optimizes memory use for 98% of use cases? | ||
▲ | ufo 2 hours ago | parent | next [-] | |
The main catch is that if the optimization guesses wrong and a different type is inserted into the table afterwards, then it would incurr an O(n) operation to transfer all the data to a deoptimized table. Abother caveat is that Lua can have more than one internal representation for the same type, and those have different type tag variants. For instance: strings can be represented internally as either short or long strings; Functions can be Lua closures, C closures, or perhaps even an object with a __call metamethod; Objects can be either tables or userdata. | ||
▲ | tedunangst 9 hours ago | parent | prev | next [-] | |
This seems likely to create some inexplicable performance elbows where you have 1000 strings, but there's one code path that replaces one with a number, and now the whole array needs to be copied. Tracking that down won't be fun. | ||
▲ | Jyaif 7 hours ago | parent | prev [-] | |
It makes a lot of sense, and but then you have two code paths for tables. The Lua folks want a simple codebase, so they (knowingly) leave a lot of performance on the table in favor of simplicity. |