[phobos] phobos commit, revision 1930

Sean Kelly sean at invisibleduck.org
Thu Aug 26 16:11:56 PDT 2010


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<dsimcha at gmail.com>
>>> To: Discuss the phobos library for D<phobos at puremagic.com>
>>> 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
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos



More information about the phobos mailing list