It would break everything, but I'd remove the top-level function keyword
entirely, with the side effects. 2 more keystrokes for `=` in free
functions, plus 4 for `self` in methods.
It's really not so bad. It's more visible. You need to write ``x = function
(self, ...)`` in some places no matter what. It would become more clear
that function declarations in lua are just assignments. It's also less to
parse, and one less thing for new users to trip on. I did attempt the
nonsensical ``x:y = function (...)`` when I was first learning! When I
write lua now, I prefer to write ``x.y = function (self, ...)`` for
everything that uses a self, because I want to be very clear whether its a
free function or a method (prefer free functions!). I don't know if it
would warrant removing the `x:y(args)` call syntax, I'm okay with a
shorthand if the behavior is consistent, and the ``self`` is just repeated
text which was passed anonymously to begin with. Speaking of, the
``x:y{key: value, ...}`` call is a delicious and useful shorthand for named
method args.
I'm also reasonably sure that you could convert any valid lua program using
the top-level function keyword into a valid one with the other syntax.
Correct me if I'm wrong on that, edge cases are always fun.
On Thu, Sep 6, 2018 at 12:35 PM Tom Sutcliffe <***@me.com> wrote:
> > On 31 Jul 2018, at 11:16 pm, Dibyendu Majumdar <***@majumdar.org.uk>
> wrote:
> >
> > Are there features in Lua that could be removed to create a simpler
> language?
>
> Interesting question.
>
> > On 1 Aug 2018, at 8:03 am, Axel Kittenberger <***@gmail.com> wrote:
> >
> > dibyendu> Are there features in Lua that could be removed to create a
> simpler language?
> >
> > - the .. operator and with it implicit string/number coercions.
> > - goto, the only sensible applications IMO can be replaced with better:
> continue and a more sophisticated try/except/throw scheme than pcall.
> >
> > As a rule of thumb I'd say, if it's a feature that's not found in most
> other programming languages in similar areas and it's controversial, it was
> probably not that good of an idea. However, if it's a feature that
> distinguishes Lua from other programming languages and there is a wider
> consensus about it, it probably was one of the better ideas (for example
> the : operator vs. JS 'this' shenanigans, or metatables in general etc.).
>
> I think that's a good summary.
>
> I haven't personally found a use for gotos in Lua, but I'm sure they are
> useful when translating code from another language which has them (or in
> machine-generated code), so I don't really object to them as they never get
> in my way. I just don't use them.
>
> The only thing that I'd really get rid of is the implicit string/number
> conversions. Those you *do* unavoidably hit just by using numbers and
> strings and occasionally not realising there's a wrong type somewhere. I'd
> much prefer less magic and more "you've done something wrong here" errors.
> Javascript's handling of type coercions is insane, C++ is pretty close,
> basically implicit type conversions are almost always a slippery slope of
> unpleasantness. lua_tolstring being able to mutate the underlying value and
> mess up lua_next (amongst other things) is one of those gotchas that just
> shouldn't exist, and is (imo) one of the few genuine missteps in the Lua C
> API. KISS is the only way to go here which keeps your sanity intact.
>
> I think I've pretty much used every other aspect of Lua in a significant
> way, by which I mean there's a real-world project relying on it.
> coroutines, debug, utf8, userdata, most metamethods, bitwise operators,
> ability to build for severely resource-constrained platforms with a
> compiler that doesn't even support floating point, I've used them all.
> Maybe weak tables? I don't think I've yet relied on them although I've come
> close a few times, so I don't think I'd be happy if they weren't an option.
> string.reverse I admit I've never ever used, although the 'cost' to the
> language of having it is so minimal I don't really care, and it's
> interesting to see that some people have found a use for it. Lua's string
> pattern matching you can prise from my cold, dead hands given how much
> simpler and smaller it is to regex (while being still pretty powerful) and
> how it's actually built in (yes std C++, I'm looking at you).
>
> Lua is pretty much the definition of everything I really need in a
> language, and nothing that I don't. Which is one of the reasons I like it
> :-)
>
> Cheers,
>
> Tom
>
>
>