The evolution of Lua, continued [pdf]

Lua’s character and role

  • Often compared to SQLite as a small, embeddable “glue” language; others think Tcl or DuckDB are closer analogies.
  • Praised as clean, minimal, fast, and easy to embed via a straightforward C API; widely used in games, LuaTeX, Nginx/OpenResty, and Roblox (via Luau).
  • 1-based indexing is seen as its biggest “against-the-grain” design choice; some like it, others find it jarring.

Config language & security

  • Many enjoy Lua as a configuration language: readable, with comments, variables, and conditionals.
  • Tension: people say configs shouldn’t be Turing-complete, yet often add template engines anyway.
  • Security concern: configs can be untrusted user interfaces; some propose a capabilities model or restricted subsets to block threads, network, or arbitrary eval.

LuaJIT and versioning

  • Users wish LuaJIT tracked newer Lua (5.3/5.4/5.5) but acknowledge many changes are tradeoffs (integers, bitwise ops, const locals).
  • LuaJIT intentionally stays at 5.1 + some 5.2 features; this risks a mild Python 2/3–style split.
  • Others argue version breaks are normal in Lua and it’s usually feasible to write code that runs across 5.1–5.4.

Language evolution and Lua 5.5

  • Broader discussion on why many major languages appeared in the early–mid 90s (GC becoming practical, web boom, package managers).
  • Lua 5.5 beta: key change is optional removal of “globals by default”, requiring explicit declarations.
  • Similar behavior has long been emulated using metatables, but only with runtime checks, not static enforcement.

Ecosystem, tooling, and teaching

  • Suggested resources: “Programming in Lua”, “Lua Gems”, and a public-domain book focused on text parsing with Lua 5.1-compatible code.
  • Frameworks and engines mentioned: LOVE2D, Defold, Pico-8, Redbean, TurboLua, Lapis for web apps, Luau (Roblox), Lunacy, and Fennel (Lisp-y Lua).
  • Complaints: weak package management and tooling compared to Python; large Lua codebases can feel “write-only” and hard to maintain.
  • Desire for better debugging (Lua DAP server) and more advanced Neovim/Lua plugin-creation tutorials.

Lua vs JavaScript in the browser

  • Some wish Lua had been the browser language, pointing to simpler semantics (e.g., self vs this, fewer coercion quirks, coroutines, tail-call optimization).
  • Counterargument: if adopted in 1995, the web would likely be stuck on something like Lua 2.x, unable to evolve freely.
  • Existing browser paths: Fengari (Lua-on-JS with DOM access), Pluto, and Nelua targeting WASM.