Re: Attributes
"'Martin Eden' via lua-l" <[email protected]> Tue, 26 May 2026 19:46:27 +0200
| Newsgroups | gmane.comp.lang.lua.general |
|---|---|
| Message-ID | <[email protected]> |
On 2026-05-24 19:34, Pier wrote: > I absolutely love Lua for how easy it is to learn, how clean the > syntax is, and how extendable it is. However, I do have a few thoughts > on attributes which was in introduced in Lua 5.4 that I think deserve > a good discussion maybe. > > The concept itself is not bad and the syntax is a fair compromise. The > close attribute is amazing when working with systems where freeing > memory is important but easily overlooked or forgotten (i.e. closing > files). On the other hand, the const attribute is just... meh. I don't > see any reason to include it, because as far as I know it doesn't add > any performance and, importantly, it doesn't make tables immutable! > The SNAKE_CASE convention to me is more than enough to denote > constants. I hold onto the belief that developers are component enough > to not make stupid mistakes such as changing variables that aren't > supposed to be changed or changing variables in an unexpected way. > Even if that does happen, they are usually caught through pull-request > or during test. I don't know many teams that allow anyone to change > the codebase freely. > > I guess for const to be useful it would have to add some extra benefit > than just protection. I am no compiler designer, but if I had to come > up with something I would say constant tables could be immutable and > optimized internally since the keys would never change, or constant > variables being expanded. I'm sure there are many ways to go about it. > > In the end, I still love Lua lol. Maybe I'm missing some context or > something, so I'm always happy to continue the discussion on this topic. > -- > You received this message because you are subscribed to the Google > Groups "lua-l" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/lua-l/a7fc6ef3-698e-4857-8603-66a3474f1f0bn%40googlegroups.com > <https://groups.google.com/d/msgid/lua-l/a7fc6ef3-698e-4857-8603-66a3474f1f0bn%40googlegroups.com?utm_medium=email&utm_source=footer>. In the language plane Lua 5.4 added optional "attribute" element to variable declaration: stat ::= local attnamelist [‘=’ explist] attnamelist ::= Name attrib {‘,’ Name attrib} attrib ::= [‘<’ Name ‘>’] Lua 5.5 allowed attribute to precede variable name: attnamelist ::= [attrib] Name [attrib] {‘,’ Name [attrib]} What "Name" here is implementation details. Since 5.4 implementation-supported attributes are "const" and "close". How good is support for "const" attribute is again implementation detail. From my usage experience of "<const>" in my code: * "<const>" is always in "local <const>" More clutter but code is actually more verifiable: If you see "local <const>" it means that we're just captured value under convenient name. There would be no hanky-panky with that value in code. Cases when we have just "local" are rare as is signal to divert attention to code. * "<const>" breaks Lua 5.3 which is mainstream "pure Lua" for me If you're using Lua 5.3 library your new 5.5 code will break there. So I just reverted my development from v5.5 to v5.3. > The SNAKE_CASE convention to me is more than enough to denote constants. CAPPED_SNAKE_CASE is ugly abomination of ancient times! Well, it still makes sense if you're working with paper listings from text printer in 2026. > I don't see any reason to include it, because > [...] > it doesn't make tables immutable! "<const>" is declaration-time attribute. Making tables immutable since declaration is a big overshoot. Proposed "table.freeze()" suits a lot better. -- Martin -- You received this message because you are subscribed to the Google Groups "lua-l" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/lua-l/c5989611-728a-46ac-a598-457deffc2782%40disroot.org.