If T[new] is the container for T[], then what is the container for T[U]?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Apr 25 16:09:38 PDT 2009


Michel Fortin wrote:
> On 2009-04-25 18:04:32 -0400, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> said:
> 
>> Again, slices could be conflated with arrays mainly because the gc 
>> took care of the litter left after rebinding slices. If you want to 
>> offer the option to do without a gc, then arrays and slices (= ranges) 
>> must be separate entities. Then you hold on to the arrays and pass 
>> slices around. When you destroy the arrays, the slices originating 
>> from them become invalid (which can be checked or not).
>>
>> With hashes it's even more interesting. We need two types: the hash 
>> and the hash range that crawls over that hash. Right now they are 
>> conflated into one V[K]. If we want to define a range crawling over a 
>> hash (and consequently do away with opApply) we'd need the range to 
>> store a little stack of breadcrumbs so the range knows how to iterate. 
>> So definitely there must be two entities. Traditionally we've been 
>> using V[K] both as a range and as a container, but the usage so far 
>> was closer to a range (I think without being sure). So one issue is to 
>> find a good type literal to express "type for which the corresponding 
>> range is V[K]".
> 
> You say there must be two entities. But the two entities already exist, 
> only the container is stored by reference. T[] is a reference to a 
> portion of a fixed-size array (static array or heap array).

Yah, and the question is where is the entire array.

> T[U] is a 
> reference to an associative array.

Yah, and the question is where is the range that the associative array 
uses for iteration.

> If you could call "new" and "delete" 
> on these two types to delete the referenced container, or if the 
> container were reference-counted, you wouldn't need a garbage collector. 
> It's pretty much the same as for classes in fact.

It might be wise to make those types values, not references.


Andrei



More information about the Digitalmars-d mailing list