[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Function calls [was: Lua and Neko comparison]
- From: John Belmonte <john@...>
- Date: Fri, 29 Sep 2006 07:19:03 -0400
> On Thu, Sep 28, 2006 at 10:34:00PM +0200, Mike Pall wrote:
>> local userops = {
>> PI = { arity = 0, op = math.pi }, -- arity 0 are constants
>> sin = { arity = 1, op = math.sin },
>> cos = { arity = 1, op = math.cos },
>> ["|"] = { arity = 2, op = bit.bor },
>> ["<<"] = { arity = 2, op = bit.lshift },
>> ["//"] = { arity = 2, op = function(a, b) return math.floor(a/b) end },
>> } -- These should of course better be light functions.
>>
>> loadstring([[
>> local a, b = ...
>>
>> print( PI * sin a + cos b )
>> print( (a << 11) | (b << 3) | 5 )
>> print( "Rici buys", 1.38 // 0.16, "apples." )
>
> Intuitively, I don't like this. I don't want to use a language where people
> are almost defining their own syntax inside the language. That takes
> the evils that operator overloading can cause in C++ (people using operators
> for things unrelated to their original cause, like overriding + for "set
> union"), and makes it an order of magnitude worse, allowing making whole
> new operators.
>
> That's not to say it couldn't be used well, just like operator overloading
> can be used well; it just seems to invite incredible abuse. Practical
> languages can't make it impossible to write bad code, of course--people
> will--but this seems at such a level that in order to read anyone else's
> code, I'm going to have to learn their own personal sub-language first.
>
> (I don't understand how a parser could support this, since the language
> is being defined by the language being compiled.)
Please understand that there are significant uses of Lua different than
your own, such as implementing domain-specific languages.
--John