auto ref is on the docket

Iain Buclaw via Digitalmars-d digitalmars-d at puremagic.com
Wed Jun 24 00:12:43 PDT 2015


On 22 Jun 2015 08:40, "Andrei Alexandrescu via Digitalmars-d" <
digitalmars-d at puremagic.com> wrote:
>
> On 6/21/15 11:31 PM, Andrei Alexandrescu wrote:
>>
>> On 6/21/15 10:25 PM, Walter Bright wrote:
>>>
>>> The idea is that fun(5) would be lowered to:
>>>
>>>     auto tmp = 5;
>>>     fun(tmp);
>>
>>
>> I don't think that lowering is recommended - it prolongs the lifetime of
>> the temporary through the end of the caller. But that may be actually a
>> good thing.
>
>
> On second thought - Walter's lowering, which makes the rvalue last more
than strictly necessary, may be the most flexible of all at the cost of
more resource consumption (for types that define destructors). -- Andrei
>

I think keeping the lifetime of objects strictly in the call expression is
the behaviour that will give least surprise.

int i = 42;
struct S { ~this() { i++; } }

// auto __autoreftmp = S();
foo(S());  // __autoreftmp
// __dtor(__autoreftmp);
assert(i == 43);

As for optimisations, I think it should be possible to assert that the
reference never escapes, and use more aggressive optimisations based on
that, something that is still not possible with 'scope ref' or 'in ref'
parameters ...

Iain.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20150624/89b62594/attachment.html>


More information about the Digitalmars-d mailing list