opEquals(const ref yadaYada)

lws invalid at email.com
Mon Dec 14 08:44:18 PST 2009


On 2009-12-14 07:01:47 -0800, dsimcha <dsimcha at yahoo.com> said:

> == Quote from lws (invalid at email.com)'s article
>> I don't know if I believe this is necesarrily bad.  It's revealing some
>> bad coding on your part.
>> You shouldn't be doing opEquals with an rvalue of a class.   Make
>> getFoo return a reference.
>> ref Foo getFoo() {} fixes the problem and avoids value-copying for no
>> reason to an rvalue that's going to get garbage collected.
> 
> 1.  This was in DFL's code, not stuff I wrote.
> 2.  It was a small struct that was cheap to copy, not a class.
> 3.  At any rate, the inconsistency with builtins is inexcusable.

1.  Well, stuff like this is good warning to whomever about the code.   
Since D is a imperative language, it should at least give you a warning 
when you're doing something really inefficient that has a boilerplate 
way of accomplishing it that is much faster.

2.  That's odd.  structs DO have stack scope in D.  Right?   It 
shouldn't even warn in that case.  IMHO.

3.  For classes, it is consistent with the whole point of the new const 
stuff and the GC, and the fact that they are heap objects by 
definition.   Classes have always been treated "differently."   And I 
think it's good.    Walter has enabled a lot of expressiveness with the 
syntax in D when compared to C++, and it allows nice warnings when 
you're doing things you probably shouldn't.

Unfortunately, this isn't an error....   Maybe for some reason you 
REALLY want to be copying around structs and classes.




More information about the Digitalmars-d mailing list