rvalue references

Marco Leise Marco.Leise at gmx.de
Tue Feb 25 17:30:41 PST 2014


Am Wed, 24 Apr 2013 13:41:05 +1000
schrieb Manu <turkeyman at gmail.com>:

> >
> >
> > On 24 April 2013 11:02, Diggory <diggsey at googlemail.com> wrote:
> >
> >> On Wednesday, 24 April 2013 at 00:54:12 UTC, kenji hara wrote:
> >>
> >>> 2013/4/24 Manu <turkeyman at gmail.com>
> >>>
> >>>  "The r-value being passed is assigned to a stack allocated temporary,
> >>>> which has a lifetime that is identical to any other local variable, ie,
> >>>> the
> >>>> lifetime of the function in which it appears."
> >>>> There, I defined it.
> >>>>
> >>>>
> >>> Good definition. If add more,
> >>> "getting address of "scope" parameter would be disallowed, at least in
> >>> @safe code, because it would be regarded as the escape of stack allocated
> >>> temporary."
> >>>
> >>> Kenji Hara
> >>>
> >>
> >> Why does the temporary need to exist any longer than the current
> >> statement? (the current lifetime of temporaries are the statement or
> >> expression). Surely any longer is just wasting stack space.
> >
> >
> scope ref a(scope ref int x) { return x; }
> void b(scope ref int x);
> 
> b(a(10));
> 
> The temp produced from '10' needs to last longer than a(), because it can
> be returned to b(). Ie, the temp needs the life of any normal local
> declared within that scope.
> 
> Does D attempt to recycle stack
> space from previous short-lived locals within a single function?

That's a backend optimization, not something the
language needs to be built for specifically.

-- 
Marco



More information about the Digitalmars-d mailing list