dmd 1.057 and 2.041 release

Steven Schveighoffer schveiguy at yahoo.com
Tue Mar 9 07:23:07 PST 2010


On Tue, 09 Mar 2010 10:10:10 -0500, biozic <biozic at free.fr> wrote:

> Steven Schveighoffer Wrote:
>
>>   * shrinkToFit(T[] arr): This one is a bit tricky and technically  
>> unsafe.
>> It reduces the size of the "allocated" length to fit the length of the
>> array.  The allocated length is the length that the runtime assumes is
>> being used of the memory block.  This is what aids in preventing  
>> stomping,
>> so use with care.  You can achieve stomping if you use shrinkToFit on a
>> slice, but still have references to the trimmed data.  Example:
>>
>> string s = "12345".idup;
>> string slice = s[0..2];
>> slice.shrinkToFit(); // tells the runtime that you will no longer use  
>> any data beyond the slice
>> slice ~= "00"; // appends in place, overwriting immutable data  
>> referenced
>
> Actually, slice.capacity *increases* from 0 to s.capacity when calling  
> shrinkToFit, doesn't it? So "stomp" or "prepare_for_stomping" could be a  
> better name.

Yes, it is technically like that.  shrinkToFit really looks weird as a  
property of the slice you are shrinking to because it really is operating  
on the array data itself (which has no concrete type or reference).

I don't like anything that talks about stomping, because we are not trying  
to say this is a stomping operation.  I want to focus more on the fact  
that you are declaring the data after the slice as being no longer used.

It's definitely a harder function to name...

-Steve


More information about the Digitalmars-d-announce mailing list