Can we fix reverse operator overloading (opSub_r et. al.)?

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Fri Jul 10 01:04:59 PDT 2009


Don wrote:
> Andrei Alexandrescu wrote:
>> Walter Bright wrote:
>>> Andrei Alexandrescu wrote:
>>>> This also reminds me that the entire operator overloading feature 
>>>> must be thrown away and redesigned.
>>>
>>> :-(
>>
>> It's run its course like an old BMW. We need to do new things, and 
>> bolting them on what we have won't work.
>>
>> Andrei
> 
> Indeed, I even think that the concept of operator overloading is wrong.
> In C++, operator overloading was just for syntax sugar. That's wrong: 
> pretty much everything that you want overloaded operators for, is 
> performance-critical. And that implies you need to deal on the level of 
> complete expressions, not individual operations.


That is true. There is, for instance, a good reason why the basic BLAS 
matrix multiplication routine calculates

   a A B + b C		(a,b: scalars; A,B,C: matrices)

instead of just AB.

Would/could one could gain something, performance-wise, by having such 
"expression overloading" as a built-in feature of the language itself, 
rather than as a library?

BLADE has already shown that it is possible to do stuff like this in a 
library, but I think it goes without saying that if it was built into 
the language the syntax could be made considerably nicer. Compare:

   auto m = MatrixOp!("a*A*B + b*C")(aVal, bVal, aMtrx, bMtrx, cMtrx);

   auto m = a*A*B + b*C;

If D could do this, I think it would become the next FORTRAN. :)

-Lars



More information about the Digitalmars-d mailing list