Arrays, garbage collection

bearophile via Digitalmars-d digitalmars-d at puremagic.com
Fri Jan 30 01:07:41 PST 2015


deadalnix:

>  - added optimization to promote them on heap. Thing like 
> int[2] = [1, 2] can trivially avoid GC allocation.

See my usage examples (think of the examples as not having the 
"s" suffix):

void main() {
     // Some imports here.
     foo([[1, 2]s, [3, 4]]s);
     auto t1 = tuple([1, 2]s, "red");
     auto aa1 = ["key": [1, 2]s];
     auto pairs = 10.iota.map!(i => [i, i + 10]s);
}

A smart system can promote only the first one to value array. The 
compiler has to leave the other cases to the judgement of the 
programmer.


>  - added some support for ownership/lifetime. This will allow 
> the compiler to promote even more on heap.

This is what I too have said in my original post. For those 
features to work well you need first a good static management of 
memory ownership.


> If don't expect the new syntax to be that useful if these point 
> are addressed. If I'm turn out to be wrong, we can reconsider 
> at that point.

I can show code similar to the examples above where the []s 
syntax is useful.

And using a function as Andrei suggests is not a good idea:

foo(staticArray(staticArray(1, 2), staticArray(3, 4)));

I don't think lot of people is going to write code like that.

And if you are about to suggest this:

alias S = staticArray;

Well, do you like to see aliases in your code?

Bye,
bearophile


More information about the Digitalmars-d mailing list