On 03/14/2013 01:26 PM, Artur Skawina wrote:
On 03/14/13 12:42, deadalnix wrote:
On Thursday, 14 March 2013 at 11:04:44 UTC, Artur Skawina wrote:
On 03/13/13 21:16, Timon Gehr wrote:
Currently there might be unnecessary overhead for returning a result if it is 
not used. Since a property will usually hold on to the value, this can be a 
problem if a struct is expensive to copy. Hence the implementer may choose to 
not support multiple assignment for performance reasons (justified or, usually, 
unjustified). Hence generic code cannot rely on multiple assignment working, 
which is not nice.

Compiler optimization territory. The compiler can clone the function, create a 
copy that
doesn't return a result; callers that don't need one (and don't inline the 
callee) can
then use that clone. The case where a function always returns the argument 
(like property
setters will typically do) can also be handled more efficiently (yes; this can 
get a bit
more interesting, specially for non-pod types).

It can't when it come to copy contructor/destructor of structs if they aren't 
pure and trivials.

That's what I meant by "can get a bit more interesting, specially for non-pod 
types".
But it can be done, the "interesting" parts may involve other language changes. 
W/o
changes, /some/ (non-pod) cases can still be handled; it's just that I'm going 
for a
complete solution, not just allowing a small subset

What's an important case not considered?

and "fixing" the rest of the problem by banning useful constructs.

Which useful constructs?

My point is that designing the language around compiler limitations (which 
aren't
always even there) is wrong.

Why do you use D then? If only language expressiveness matters, D is not at the top.

Especially in situations like this one, where the
problematic case is rare, and will get less problematic eventually when the 
language
evolves. We're talking only about callers that actually use the results of 
setters -
optimizing for this case is fine, but defining the language specifically to 
avoid the
rare case, which will take a small perf hit (well, actually not improve, that 
cost
already exists), does not seem justified.


Didn't get any of this.

It's not too common that the perf hit _exists_, but if it does, the common case at the call site is that it is taken.

Reply via email to