What I think about Lua after shipping a project with 60k lines of code
Lua in game development & scripting
- Many commenters use Lua for game logic (including large projects, Love2D games, fantasy consoles, engines, mods), trading systems, ad targeting, Redis scripts, Wireshark dissectors, neovim and other app scripting.
- Praised as extremely simple, small, and easy to embed; ideal as a DSL for domain experts and moddability.
- Some see it as “perfect for application scripting” but not their first choice for full core engines or very large, long‑lived systems.
Scripting vs compiled languages in games
- Linked video criticizing scripting languages in gamedev sparked debate.
- Arguments against scripting for core game logic: performance, error‑proneness with less experienced scripters, complex engine integration.
- Counterpoints: scripting is great for mods, E2E tests, iterative gameplay tweaks, and separating core engine (C/C++/Rust) from high‑level behavior.
- Several claim modern hot‑reload and fast compilers in compiled languages partially replace scripting’s iteration advantages.
Tables, typing, and language design
- “Everything is a table” is both admired and disliked:
- Pro: powerful, uniform data model, good for ASTs/DSLs, simple mental model.
- Con: no clear separation between arrays and maps;
#and “sequence” rules are non‑obvious; holes and nils are footguns.
- One‑based indexing and nil‑on-missing are frequent pain points; silent
nilon typos leads to late runtime failures. - Dynamic typing seen as liberating for prototypes but fragile for large codebases.
- Typed variants (Teal, Luau) and comment‑based annotations plus LSPs are discussed; some prefer gradual typing, others dislike transpile steps.
Performance, GC, and tooling
- Performance is “adequate” for scripting, but some in engines hit GC pauses and need careful tuning or native fallbacks.
- LuaJIT is cited as very fast but version‑locked.
- Tooling has improved (language servers, linters, IDE support), but some still find it weaker than mainstream languages.
Ecosystem, packaging, and alternatives
- Embeddability and trivial C build are major advantages over Python and others, especially on unusual platforms or kernels.
- LuaRocks works for some but is seen as messy or ignored by many; dependency management on Windows can be painful.
- Alternatives mentioned: Rust, C#, Go, Scheme‑like/Fennel on top of Lua, other new systems languages, but Lua remains valued for its niche of small, embeddable scripting.