Reddit: why aren't people using D?

Don nospam at nospam.com
Fri Jul 24 01:40:53 PDT 2009


Michiel Helvensteijn wrote:
>>>>> * Operator overloading (no fine control over comparison operators,
>>>>  > fixed commutativity,
>>>>
>>>> This is deliberate. Operator overloading should be restricted to
>>>> implementing arithmetic like operations on objects, not completely
>>>> different things like what iostreams, Spirit and Boost::regex do.
>>> Arithmetic like operations like matrix multiplication (which is not
>>> commutative)?
>> I believe this is completely controllable with D.
> 
> Not if commutativity of the * operator is fixed. The documentation states
> that * is commutative, which in fact for integers it is. So if I overload *
> for matrices, for all the guarantees the docs give me, a D compiler might
> choose to swap the operands around (perhaps to get some memory alignment
> advantage), and the returned matrix would be incorrect.

That's not what the documentation means. * is only 'default 
commutative'. If a.opMul(b) is defined, by default you get b * a  == 
a*b. To prevent this behaviour, you just need to define a.opMul_r(b), or 
b.opMul(a).

(The documenation could be a bit clearer on this).



More information about the Digitalmars-d mailing list