GETTABUP 0 0 -1 ; _ENV "print"

LOADK 1 -2 ; "Hello, Lua"

CALL 0 2 1

RETURN 0 1

I’ve been using Lua for multiple years now — I’ve used it as a cross platform scripting language, a scriptable game language, for building Linux applications, IRC bots, webservers, and everything else imaginable but I keep seeing one constant trend: People don’t like to use Lua.

Why don’t people like to use Lua? There are many reasons, some of which are explained in this article by Tim Mensch:

LuaJIT is in maintenance mode now, no major changes will be released. Lua has multiple versions, which have differences. JavaScript apparently has a better ecosystem. Lua Coroutines are no longer a monopoly. Type annotations are required, apparently.

Now, rhetorically, why are any of these a reason to leave Lua? A program that doesn’t want to release any major versions can be forked by anyone who wants to improve on it — plus, projects such as Ravi and LLVM-Lua are creating Lua compilers which are LLVM-optimized, so where is the issue? As for the second version, many languages have different versions that aren’t backwards compatible. Python has the difference between 2 and 3; JavaScript (which you’ll hear me complain about often) even has a transpiler to make the source code backwards compatible. As for the third item, JavaScript has a lot more packages, but that’s because JavaScript has a “feel” that requires a lot of software dependencies. For one software (Polymer, for example) tens of packages would need to be installed for just a few elements. Lua having a smaller amount of items to maintain has never been an issue because the software works and does what is needed.

I do not believe that the last two items listed on the list are issues in any way. Just because one software has a certain technology doesn’t mean that another software can’t have the technology and therefore make the first software worth any less. As for the last item, type annotations exist in formats such as Typed Lua and Ravi — the former being native Lua compilable and the latter being a special addition to the Lua 5.3 VM. TypeScript acts just as Typed Lua does, where Ravi actually performs faster due to the type connections performed on the C side. Neither of these points should be the determining factor of a language if both languages have these features.

I started off this article saying “Hello Lua”. I would like to introduce some things that makes Lua a language that I believe makes it unparalleled to other languages: