<i>Have you found this to be the case at all? Is it more difficult to avoid bugs when writing in Lua?</i><p>Good questions.<p><i>- variable name typos (undeclared vars are nil),</i><p>There&#x27;s a linter to catch undeclared variables. <a href="https:&#x2F;&#x2F;github.com&#x2F;mpeterv&#x2F;luacheck" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;mpeterv&#x2F;luacheck</a> There&#x27;s also some runtime checking techniques you can use. <a href="http:&#x2F;&#x2F;www.lua.org&#x2F;pil&#x2F;14.2.html" rel="nofollow">http:&#x2F;&#x2F;www.lua.org&#x2F;pil&#x2F;14.2.html</a><p><i>- accidentally confusing array-style tables and hash-style tables (or vice versa),</i><p>I&#x27;ve had that happen about as often as confusing Python dictionaries returned by different types of functions. (Which is - not often enough for me to remember the last time that happened)<p><i>- tables with &quot;holes&quot; (nils) in them,</i><p>When I&#x27;m building a vector and I want holes, I use false to fill the holes.<p><i>- multiple assignment with wrong number of vals or vars (mismatch silently ignored),</i><p>For me, when I&#x27;m thinking about multiple assignment to function returns, it does mean having to read documentation for a library function more carefully than if I was reading the same for another language. If it&#x27;s as simple as &quot;local a,  b,  c = 1, 2, 3&quot;, then it&#x27;s no issue.<p><i>- variables are global by default.</i><p>If I&#x27;m using linting, when I can&#x27;t have global variables implicitly, then it&#x27;s like C or Java where I must declared all my variables and by default they are local to the scope.<p>Otherwise it&#x27;s just like javascript where it&#x27;s best practice to always declare variables using &quot;var&quot;.