Idea #1 on integrating RC with GC

Michel Fortin michel.fortin at michelf.ca
Wed Feb 5 07:23:58 PST 2014


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.

There's another possible use for ARC which is to manage 
reference-counted external objects not allocated by the D GC that are 
using reference counting (such as COM objects, or Objective-C objects). 
This could justify a different kind of pointer. But that's a separate 
issue from the GC algorithm used for D constructs.

-- 
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca



More information about the Digitalmars-d mailing list