Does 'D' language supports 'C' like VLA?

via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 14 02:50:07 PDT 2015


On Tuesday, 14 April 2015 at 08:52:19 UTC, Jacob Carlborg wrote:
> On 2015-04-14 10:33, "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= 
> <ola.fosheim.grostad+dlang at gmail.com>" wrote:
>
>> No.
>
> "No" as in "alloca" doesn't work like that for default 
> arguments or a string mixin is still needed?

It does work like that, but I don't see a way to pass the length 
to the alloca() call. Unfortunately, we can't refer to other 
parameters. It that were possible, it would indeed work:

import core.stdc.stdlib : alloca;
T[] stackArray(T)(size_t len, T* p = cast(T*) alloca(len * 
T.sizeof)) {
         return p[0 .. len];
}

>
>> If alloca() ends up within a loop you are in a bad situation. 
>> Keep
>> in mind that alloca is released on function RETURN. Not at the 
>> scope
>> level. VLAs are released at scope level.
>
> Will the string mixin by Marc prevent that problem with loops?

No, that's an inherent problem with alloca(): there's no 
corresponding freea().


More information about the Digitalmars-d mailing list