In Lua all arrays are just dictionaries with integer keys, a[0] will work just fine. It’s just that all built-in functions will expect arrays that start with index 1.
That’s slightly misleading, I think. There are no arrays in Lua, every Lua data structure is a table (sometimes pretending to be something else) and you can have anything as a key as long as it’s not nil. There’s also no integers, Lua only has a single number type which is floating point. This is perfectly valid:
local tbl = {}
local f = function() error(":(") end
tbl[tbl] = tbl
tbl[f] = tbl
tbl["tbl"] = tbl
print(tbl)
-- table: 0x557a907f0f40
print(tbl[tbl], tbl[f], tbl["tbl"])
-- table: 0x557a907f0f40 table: 0x557a907f0f40 table: 0x557a907f0f40
for key,value in pairs(tbl) do
print(key, "=", value)
end
-- tbl = table: 0x557a907f0f40
-- function: 0x557a907edff0 = table: 0x557a907f0f40
-- table: 0x557a907f0f40 = table: 0x557a907f0f40
print(type(1), type(-0.5), type(math.pi), type(math.maxinteger))
-- number number number number
PHP did that same thing. It was a big problem when algorithmic complexity attacks were discovered. It took PHP years to integrate an effective solution that didn’t break everything.
Lua - Portuguese feminine noun for “moon”, coming from the Latin “luna”
Luna - Latin, feminine noun (coincidentally identical to the Italian noun, also feminine)
Writing Lua code that also interacts with C code that uses 0 indexing is an awful experience. Annoys me to this day even though haven’t used it for 2 years
Not in languages where you don’t manually handle memory, such as PHP, SQL, Python… Higher-level languages using 0-indexed arrays are letting the abstraction leak.
So what’s 0 do then? I’m okay with wacky indexes (I’ve used something with negative indexes for a end-index shorthand) but 0 has to mean something that’s actually useful. Using the index as the offset into the array seems to be the most useful way to index them.
GTFOH with that. 1-indexed arrays?! You monster.
(Mostly joking… Ok, somewhat joking :P )
Lua has entered the chat
Lua had been banned from the chat
In Lua all arrays are just dictionaries with integer keys, a[0] will work just fine. It’s just that all built-in functions will expect arrays that start with index 1.
Your argument isn’t making me any happier - it just fills me with more rage.
That’s slightly misleading, I think. There are no arrays in Lua, every Lua data structure is a table (sometimes pretending to be something else) and you can have anything as a key as long as it’s not nil. There’s also no integers, Lua only has a single number type which is floating point. This is perfectly valid:
PHP did that same thing. It was a big problem when algorithmic complexity attacks were discovered. It took PHP years to integrate an effective solution that didn’t break everything.
Fortran angrily starts typing…
Don’t do my boy Lua dirty like that >:(
I always felt that Lua was a girl
Lua - Portuguese feminine noun for “moon”, coming from the Latin “luna”
Luna - Latin, feminine noun (coincidentally identical to the Italian noun, also feminine)
Yup, Lua is a girl.
and MATLAB, Visual Basic (with
Option Base 1
), and SQL.Writing Lua code that also interacts with C code that uses 0 indexing is an awful experience. Annoys me to this day even though haven’t used it for 2 years
This is one of the few things that I really don’t like any Lua. It’s otherwise pretty decent and useful.
Visual Basic used to let you choose if you wanted to start arrays at 0 or 1. It was an app-wide setting, so that was fun.
I’ve not heard that name in a long time…
It’s how I got into programming, so I’ll always have a soft spot for it. Now it’s over 20 years later and I’m still coding.
Apple Basic (on an Apple IIe) was my first language that I recall.
Didn’t have a computer powerful enough for VB until later. It does have a special place in my nostalgia zone but has also led so many astray.
How is arrays starting at 1 still a controversial take. Arrays should start at 1 and offsets at 0.
I can’t believe an objectively true claim gets downvoted.
Arrays are address offsets.
Not in languages where you don’t manually handle memory, such as PHP, SQL, Python… Higher-level languages using 0-indexed arrays are letting the abstraction leak.
So what’s 0 do then? I’m okay with wacky indexes (I’ve used something with negative indexes for a end-index shorthand) but 0 has to mean something that’s actually useful. Using the index as the offset into the array seems to be the most useful way to index them.
I’d say the index is actually an offset is a reasoning for explaining why it should start at 1. If index was an index, I’d just start at 1.
I don’t think any one is better than the other, but history chose 0.
That you can choose it in VB is probably the worst option :D