It's super fast and fund, but I find it even worse than js.
It's super fast and fund, but I find it even worse than js.
The weird amount of hype for Lua is probably due to the great projects in spite of it, like LOVE and Pico8, and the fact that Lua never makes it very far past weekend hobby state for most people so there's never any real counterbalancing force of people fed up with it.
Last project that needed game engine like things I picked Kotlin with libGDX/KDX. Reasonably quick builds, reasonably strong typing, performs well enough and x-platform enough.
I would probably never write a standalone game in pure Lua because that’s not what it is intended for, it’s strength is easy embedding in a host application that does the heavy lifting, low-level stuff and provides the new primitives and functions for the application-specific parts of the code that runs in Lua. Other languages may be better in terms of language feature and tooling but none of these come close to the easy of use for embedded scripting.
I've written a few commercial games in lua (corona, and others), and it must be me, but my code becomes a nightmare to maintain at a certain point.
Good tooling helps with the explorability so JS is manageable because you can runtime inspect what the heck is going on. The Chrome debugger is excellent for example. Most Lua game engines provide basically zero debugging beyond runtime errors and console output. Which makes exploring tedious.
Then learning a platform and the ins and outs of a language is much quicker in a statically typed language. Not only because the editor is much more empowered so you can explore the codebase statically but with a compilation step you also get a quicker feedback cycle for a lot of common errors. I found JS extremely tedious dealing with runtime errors with typos. TS basically makes that impossible.
I think that's why PICO-8 feels like a sweet spot for Lua because the platform is so small it's quick and easy to learn. And the code size restriction stop you from making anything complex enough to benefit too much from static typing. I still hate runtime errors for silly mistakes that would have been trivially caught.