1. "Lua 1.0 was developed as a data-description language for Petrobras, the Brazillian oil company. It’s hard to be any more “industrial” than that. PL theoretical features were added gradually as the language evolved — prototypish objects in 2.0, anonymous functions in 3.1, proper lexical scoping and coroutines in 5.0… At this point, Lua is (like JavaScript) a nice fusion of Scheme and Self. But unlike Scheme or Self, it’s never been a “research language” — the focus all along has been on providing a practical, embeddable language engine (a la Tcl). Highly recommended is the authors’ HOPL paper, An Evolution of Lua. Incidentally, one of the reasons (IMHO) that Lua is such an elegant language today is that it has discarded an awful lot of cruft along the way. With each major version, a number of features were thrown out to make way for the “new way of doing things”. This was possible because Lua is typically embedded (so if new Lua breaks your code, just don’t upgrade it for that app), but also (again, IMHO) because Lua isn’t mainstream, and the smaller userbase is more tolerant of breaking changes. Conversely, JavaScript is the mess it is today because it went big so early, and has to support all of the mistakes made in the early days. Also incidentally, one of the defining of features of Lua (all along) that hasn’t been mentioned in this thread is extensible semantics. In Lua, reading from or writing to a table can mean anything you want it to mean. So, lots of fancy features (inheritance, laziness, autocreation of subtables, functions with private state, memoizing, currying) can be implemented by the user in just a few lines, instead of having to be built into the language core."
    Bret Victor

    (Source: lambda-the-ultimate.org)

    1. nek posted this