It already does.  I've just realized that the current length implementation can 
have some weird side-effects at times though:

    writeln(GC.sizeOf((new byte[2046]).ptr));
    writeln(GC.sizeOf((new byte[2047]).ptr));

prints:

    2048
    0

Because the length of large arrays is located at the beginning of the memory 
block, and this is placed by the runtime (I believe), the GC assumes that large 
arrays are all interior slices.

Also:

    auto x = new byte[100];
    writeln(x.capacity);
    x = x[1 .. $];
    writeln(x.capacity);

prints:

    127
    126

Shouldn't the second capacity be 0, since it's a slice?

On Aug 26, 2010, at 10:18 AM, Andrei Alexandrescu wrote:

> Walter, Sean, could we arrange such that capacity of static arrays yields 
> zero?
> 
> Andrei
> 
> On 8/26/10 10:16 PDT, Steve Schveighoffer wrote:
>> The constructor uses arr.capacity to determine how much it can append.
>> 
>> assumeSafeAppend will ensure that arr.capacity is as large as possible, so 
>> yes,
>> calling before creating the Appender will maximize the capacity, regardless 
>> of
>> whether it will stomp or not.
>> 
>> One thing that Appender will do, which is bad, but I'm not sure we need to 
>> care,
>> it can be given a string literal, and then try to write over the string 
>> literal
>> like this:
>> 
>> auto app = appender("hello");
>> // app.put('c'); // this would be ok
>> app.clear();
>> app.put('c'); // segfault on Linux
>> 
>> I'm not sure how to get around this.  I thought of checking the heap to see 
>> if
>> it owns the pointer, but then you disallow useful things like using a
>> stack-allocated buffer.  I think this case may be uncommon enough to not 
>> care.
>> 
>> -Steve
>> 
>>> 
>>> From: David Simcha<[email protected]>
>>> To: Discuss the phobos library for D<[email protected]>
>>> Sent: Thu, August 26, 2010 1:10:31 PM
>>> Subject: Re: [phobos] phobos commit, revision 1930
>>> 
>>> Nice work.  One small question/possible feature request, though:  Will 
>>> calling
>>> assumeSafeAppend() on an array before constructing an Appender using it 
>>> prevent
>> 
>>> it from being reallocated on the first append?  If not, can Appender have 
>>> some
>>> kind of assumeSafeAppend workaround in it?
>> 
>> 
>> 
>> _______________________________________________
>> phobos mailing list
>> [email protected]
>> http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> [email protected]
> http://lists.puremagic.com/mailman/listinfo/phobos

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to