Argumnentation against external function operator overloading is unconvincing
Timon Gehr via Digitalmars-d
digitalmars-d at puremagic.com
Fri Sep 23 16:03:31 PDT 2016
On 23.09.2016 12:44, Stefan Koch wrote:
> On Friday, 23 September 2016 at 08:50:56 UTC, Timon Gehr wrote:
>>
>> FQN disables UFCS. Nothing specific to operators here.
>>
>> There is no reason why there should be any difference between a + b
>> and a.opBinary!"+"(b). In fact, 2.opBinary!"+"(3) should work too.
>
> Currently this is tricky to implement in the compiler.
This can easily be implemented in the parser and in object.d without
even changing semantic. This is not the best implementation strategy,
but it demonstrates that implementation can be simple. I'm curious to
know what strategy you have in mind, and why it would be tricky.
BTW: One case for why built-in types should have member call syntax for
operators are all the places in e.g. Phobos where code special-cases
built-in types in order to be able to use opCmp directly for three-way
comparison on user-defined types.
> And it widens the scope for name-conflicts immensely!
> ...
Operator overloading makes sense for a small minority of types and D has
plenty of mechanisms to deal with name conflicts: overload sets,
template constraints, private aliases, FQNs.
> I do not see a case where UFCS overloaded operators are worth the
> trouble they introduce.
IMHO it's a trivial surface language feature allowing convenient syntax
for a restricted set of user types. The current limitations are slightly
confusing (because a.opBinary!"+"(b) is somehow not the same as
a.opBinary!"+"(b)), and also annoying when you run into them. This is
not the first time this is discussed.
More information about the Digitalmars-d
mailing list