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