Idea #1 on integrating RC with GC

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Feb 5 10:26:38 PST 2014


On 2/5/14, 7:23 AM, Michel Fortin wrote:
> On 2014-02-04 23:51:35 +0000, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> said:
>
>> Consider we add a library slice type called RCSlice!T. It would have
>> the same primitives as T[] but would use reference counting through
>> and through. When the last reference count is gone, the buffer
>> underlying the slice is freed. The underlying allocator will be the GC
>> allocator.
>>
>> Now, what if someone doesn't care about the whole RC thing and aims at
>> convenience? There would be a method .toGC that just detaches the
>> slice and disables the reference counter (e.g. by setting it to
>> uint.max/2 or whatever).
>>
>> Then people who want reference counting say
>>
>> auto x = fun();
>>
>> and those who don't care say:
>>
>> auto x = fun().toGC();
>>
>>
>> Destroy.
>
> I don't think it makes much sense. ARC when used for D constructs should
> be treated an alternate GC algorithm, not a different kind of pointer.

Why? The RC object has a different layout, so it may as well have a 
different type.

Andrei


More information about the Digitalmars-d mailing list