>> 
>> The root cause, of course, is that the VLAs require new stack allocations 
>> each time, and the stack is only deallocated as one lump when the frame ends.
> 
> That is true of alloca(), but not of VLAs.  VLAs are freed when they go out 
> of scope.
> 

Learned something today.

Anyway, if the goal is stack allocation, I would prefer that we explored other 
ways to achieve it before jumping to a new array-type. I’m not really a fan of 
a future where [3; Double] is one type and (Double, Double, Double) is 
something else, and Array<Double> is yet another thing.

>From what I’ve read so far, the problem with stack-allocating some Array that 
>you can pass to another function and which otherwise does not escape, is that 
>the function may make an escaping reference (e.g. assigning it to an ivar or 
>global, or capturing it in a closure).

How about if the compiler treated every Array it receives in a function as 
being potentially stack-allocated. The first time you capture it, it will check 
and copy to the heap if necessary. All subsequent escapes (including passing to 
other functions) use the Array known to be allocated on the heap, avoiding 
further checking or copying within the function.

The same goes for Dictionary, and really any arbitrary value-type with COW 
storage. The memory that those types allocate is part of the value, so it would 
be cool if we could treat it like that.

- Karl
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to