Am Wed, 24 Apr 2013 13:41:05 +1000 schrieb Manu <[email protected]>:
> > > > > > On 24 April 2013 11:02, Diggory <[email protected]> wrote: > > > >> On Wednesday, 24 April 2013 at 00:54:12 UTC, kenji hara wrote: > >> > >>> 2013/4/24 Manu <[email protected]> > >>> > >>> "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
