[phobos] custom BlkAttr flags
Sean Kelly
sean at invisibleduck.org
Wed Jul 14 08:44:20 PDT 2010
But in both cases, TypeInfo could be supplied (either at the point of allocation or set later). A bit would be more efficient however. Regarding how this would all work, I was thinking of redefining calloc as:
void* calloc(TypeInfo ti, size_t count);
So the TypeInfo would replace the 'size' argument from C. This makes calloc a lot more useful than just "malloc with bzero" as it is now.
On Jul 14, 2010, at 3:26 AM, Steve Schveighoffer wrote:
> I added the fix for the comma, sorry for that. All the other places had an
> ALL_BITS enum member, so the NO_MOVE line that I copied and changed had a
> comma. I thought I compiled before I checked in, but I guess I did not.
>
> Regarding the bit being flipped, yes I want the default meaning to be "no
> append" because anyone can allocate memory via GC.malloc for any purpose, and
> GC.malloc does not initialize the "allocated length" field inside the block, so
> it is not appendable. It does not mean you cannot append to the block, it just
> means the first append will reallocate into an appendable block.
>
> Regarding using the typeinfo, that doesn't work. Arrays can easily be created
> out of blocks that weren't allocated via the array creation routines. Think of
> void[], and GC.malloc above.
>
> -Steve
>
>
>
>
> ----- Original Message ----
>> From: Sean Kelly <sean at invisibleduck.org>
>> To: Discuss the phobos library for D <phobos at puremagic.com>
>> Sent: Wed, July 14, 2010 12:25:09 AM
>> Subject: Re: [phobos] custom BlkAttr flags
>>
>> On Jul 13, 2010, at 8:09 AM, Steve Schveighoffer wrote:
>>>
>>> What I propose to fix this is to allocate one of the block attribute flags
>> to
>>
>>> designate that a block is appendable. The odd part about it, is that the
>> GC is
>>
>>> not aware of appending, so it is somewhat of a "user-defined" flag.
>>>
>>> My question is, how should we declare the flag? I currently only defined it
>> in
>>
>>> lifetime.d, outside the gc, but I'm thinking it should be defined in the GC
>> as
>>
>>> well. Also, should I allocate the next bit, or one of the higher order
>> bits?
>>>
>>> I'm going to check in my code that defines it in lifetime.d only, and
>> depending
>>
>>> on the responses to this, I'll add it to the GC definition too.
>>
>> Your checkin doesn't compile. I added the requisite comma for now to fix
>> this. That aside, assuming this design were to be kept I think the meaning of
>> the bit has to be flipped. The bit defaults to unset, so that should be the
>> default meaning. You really don't want all blocks to be appendable by default,
>> do you? More generally, if we start holding TypeInfo references in the GC then
>> we should be able to determine appendabiility based on whether the TypeInfo is
>> an array type. This may not make the next release, but I'd like to address it
>> once I've polished std.concurrency a bit more.
>> _______________________________________________
>> 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