On Sunday, 22 April 2018 at 05:29:30 UTC, Mike Franklin wrote:
I'm not convinced. I did some no-runtime testing and
eventually found the implementation in druntime here
It seems to me that it's an odd thing to have what apparently
looks like a function call an intrinsic part of the language. (I
realise its probably needed to be compatible with c programs)
I appreciate that allocating arbitrarily large arrays on the
stack is probably not a good idea. (Can the availability of
sufficient stack space be calculated before making the call? )
That said I still think that having `scope` should just mean that
the lifetime of the variable is limited to the function and
cannot be returned as a dangling reference.
So like I said before it would be nice if you could have a `push`
keyword to explicitly state that you want to allocate on the
stack. Presumably, that is not a simple change (and is it a
commonly needed use case anyway)
--------
scope c = new C(); // allocate class c limit to local scope
scope a = new char[len]; // allocate array a limit to local scope
scope c = push C(); // allocate class c on stack
scope a = push char[len]; // allocate array a on stack
auto c = push C(); // Error can't allocate stack variable
to non local scope
auto a = push char[len]; // Error ditto
--------