WolfeReader 16 hours ago

The 1 indexes are only a difference from what you're used to. Lua was made by mathematicians, who of course wanted to address the first element as 1, the second element as 2, etc.

0-indexing makes sense in the context of C where the index operator is syntactic sugar for pointer arithmetic. In higher-level languages like C# and Python and others, it's pretty much just a leftover habit from C devs that we all got used to.

Global by default is a perpetual issue, agreed.

  • themafia 4 hours ago

    > The 1 indexes are only a difference from what you're used to

    The left handed scissors are only a difference from what you're used to.

    > Lua was made by mathematicians

    The default value is nil and using nil as an index on a table returns nil. Yet nil + number is not valid and results in a runtime error.

    > it's pretty much just a leftover habit from C devs

    It's reflective of the fact that these languages are either intended to work with C APIs or are implemented in C itself. This makes writing FFI and extensions _far_ easier than it would be otherwise.

  • gautamcgoel 7 hours ago

    You are correct that 1-based indexing is the norm among mathematicians, but none of the creators of Lua is a mathematician, AFAIK. You can read about the early history of Lua here:

    https://www.lua.org/history.html

  • DavidVoid 15 hours ago

    And a lot of the time it makes the syntax more compact than it would be with 0-indexing.

      for i=1,#arr do
        foo(arr[i])
      end
    
    I don't feel that strongly for or against either way of indexing though, they both have their pros and cons.
    • kqr 8 hours ago

      Perl is usually used with the first element being zero and the same loop would be

          for (0..$#arr) {
              foo(arr[$_])
          }
      
      Whatever you're feeling is not in starting at one.
badosu 10 hours ago

Lua is the scripting language of [Recoil]. I've been writing some fairly complex game code on it for a few years now, I lost a lot of prejudice over time on 1-indexing.

In fact, at least for this application I've come to enjoy its practicality!

Recoil: https://beyond-all-reason.github.io/RecoilEngine

pansa2 10 hours ago

Lua 5.5 will change the way global variables work: AFAICT you’ll be able to opt out of global-by-default

  • Rohansi 8 hours ago

    Too bad the Lua ecosystem is split between 5.4 and 5.1 due to LuaJIT.