[dmd-beta] rvalue references
Jason House
jason.james.house at gmail.com
Mon Apr 16 11:57:08 PDT 2012
On Apr 16, 2012, at 2:43 PM, "Jonathan M Davis" <jmdavisProg at gmx.com> wrote:
> On Monday, April 16, 2012 11:31:19 Sean Kelly wrote:
>> On Apr 16, 2012, at 6:32 AM, Steve Schveighoffer wrote:
>>> Regardless of the solution, I think we need to designate two different
>>> situations:
>>>
>>> 1. I want to pass this by reference because it's more efficient
>>> 2. I want to pass this by reference because I want to change it
>>
>> Ideally, no one should ever specify "ref" simply for efficiency. The
>> programmer should choose semantics for logical reasons, and leave
>> optimization up to the compiler. That may still not be practical however.
>
> In many cases, the compiler can't know when a copy is actually required. If
> there's a way for the programmer to indicate that they don't care whether a
> copy is made or not, letting the compiler decide, then that solves the problem
> (which was the idea behind auto ref). Without that though, the compiler will
> have to assume that a copy has to be made in cases where it doesn't. And
> actually, since without auto ref, there's no way to overload a function such
> that the compiler chooses ref or non-ref based on what it thinks is the most
> efficient, I don't see how the compiler could elide copies except in cases where
> inlining eliminates the function call entirely. We need a way for the
> programmer to be able to tell the compiler that they don't care whether the
> argument is passed by ref or not. Barring that, making it possible for const
> ref (and possibly ref) to take rvalues is probably the best that we can do.
I believe "const scope" arguments would fall into the category of not caring if a copy was made or not.
More information about the dmd-beta
mailing list