Returning variable-sized stack data

ryuukk_ ryuukk.dev at gmail.com
Mon Aug 12 17:42:11 UTC 2024


On Monday, 12 August 2024 at 10:37:21 UTC, Quirin Schroll wrote:
> On Wednesday, 17 July 2024 at 08:23:45 UTC, IchorDev wrote:
>> On Monday, 15 July 2024 at 17:20:57 UTC, monkyyy wrote:
>>> I think you should also preemptively handle runtime stack 
>>> allocated arrays inside the function
>>>
>>> ```d
>>> int[$] foo(size_t i){
>>>   int[i] output;
>>>   foreach(...){
>>>     ...
>>>   }
>>>   return output;
>>> }
>>> ```
>>
>> Oh yes, that would be fantastic!
>> It'd be lowered to something like this, right?
>> ```d
>> int[] output = (cast(int*)alloca(i * int.sizeof))[0..i];
>> ```
>
> Why not this:
> ```d
> scope xs = new int[](n);
> ```


`new` = GC heap allocation

So it doesn't make sense to read that line

A value is a value, no `new` keyword, please, besides, in my 
custom runtime, there is no `class`, no `new`, no `GC` and more 
importantly, no `TypeInfo`


> With the same guarantees of allocation elision as `scope xs = [ 
> 1, 2, 3 ];`?


D's biggest mistake was to make this GC allocated without 
requiring `new`

I hope this gets fixed with an Edition, because it is cringe


More information about the dip.ideas mailing list