Sorry to nit pick, but (for example) variables being global by default it's not exactly an epitome of elegance.
x = 5; // global
var x = 5; // local
Lua just replaces var with local: x = 5 -- global
local x = 5 -- local- local by default weakens what you can do with the scope;
- we want something by default because the language is used for things like configuration files.
The 2nd point means this must be valid:
param_1 = "foo"
param_2 = "bar"
I would personally be happy to sacrifice that feature and add an explicit "global" keyword but not everybody agrees, and it would break a lot of code.What we do instead is use two kinds of tools: static global detectors and strictures (like in Perl). Similar tools are integrated in IDEs as well.
With these tools, I have never had an issue with scoping in code I have written. But it takes a little time to get used to it.
For sure. That ship has probably sailed. And, like you said, linters alleviate a lot of that pain. But that's a separate question from, "is this a good language feature?"