Earlier quoted context omitted.
You have no idea what 90% of their users are using. A lot of them aren't using LLVM or GCC. I'm pretty sure Roblox and WoW, for example, aren't normally compiled with LLVM or GCC. Whether those two games account for 99% of Lua's users or 0.001% depends on how you count, but no matter how you count, you have no idea.
Roblox accounts for 0% of stock Lua users, they run Luau. And many uses of Lua you come up with will be using LuaJIT or pinned to an older, possibly forked, Lua release. I'm not agreeing with the comment you replied to, just nitpicking.
Compact representations for arrays in Lua [pdf]
11–20 of 22 posts
Re: Compact representations for arrays in Lua [pdf]
#12Jesus christ, 40% waste in arrays that can be solved by using `__attribute__((packed))`. Irresponsible of them of not advertising this as an option in luaconf.h
Re: Compact representations for arrays in Lua [pdf]
#13Jesus christ, 40% waste in arrays that can be solved by using `__attribute__((packed))`. Irresponsible of them of not advertising this as an option in luaconf.h
`__attribute__((packed))` wouldn't help here since the issue is about Lua's array/hash hybrid table design and memory allocation strategy, not C struct padding.
[1] "Hugo Gualandi reported that just adding the gcc attribute __attribute__((packed)) to the definition of the structure TValue reduces its size from 16 to 9 bytes, without any sensible difference in performance."
Re: Compact representations for arrays in Lua [pdf]
#14Earlier quoted context omitted.
Here's the rest of that paragraph for you: "However, this attribute is a gcc extension not present in ISO C. Moreover, even in gcc it is not guaranteed to work [3]. As portability is a hallmark of Lua, this almost magical solution is a no-go."
[flagged]
Re: Compact representations for arrays in Lua [pdf]
#15Re: Compact representations for arrays in Lua [pdf]
#16I 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?
Re: Compact representations for arrays in Lua [pdf]
#17I 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?
The Lua folks want a simple codebase, so they (knowingly) leave a lot of performance on the table in favor of simplicity.
Re: Compact representations for arrays in Lua [pdf]
#18I 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?
Another 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.
Re: Compact representations for arrays in Lua [pdf]
#19I 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?
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.
Re: Compact representations for arrays in Lua [pdf]
#20Earlier quoted context omitted.
`__attribute__((packed))` wouldn't help here since the issue is about Lua's array/hash hybrid table design and memory allocation strategy, not C struct padding.
But it did help in the other way, in my reading of the paper [1]. So the OP is asking why this is not even an option on supported environments, and I too think that this is indeed a good question to ask. [1] "Hugo Gualandi reported that just adding the gcc attribute __attribute__((packed)) to the definition of the structure TValue reduces its size from 16 to 9 bytes, without any sensible difference in performance."