Idea #1 on integrating RC with GC
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Feb 5 10:10:57 PST 2014
On 2/5/14, 4:39 AM, Manu wrote:
> On 5 February 2014 09:51, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org <mailto:SeeWebsiteForEmail at erdani.org>>
> wrote:
>
> 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.
>
>
> This doesn't excite me at all.
> What about all other types of allocations? I don't want to mangle my
> types.
How do you mean that?
> What about closures?
This is "#1" and it only addresses slices.
> What about allocations from phobos?
Phobos would get added support for RC slices.
> What
> about allocations from 3rd party libs that I have no control over?
Outside the charter of this discussion.
> I don't like that it requires additional specification, and special
> treatment to have it detach to the GC.
But you didn't like that GC is implicit. Which way do you want it?
> There's nothing transparent about that.
I don't think we can attain 100% transparency.
> Another library solution like
> RefCounted doesn't address the problem.
>
> Counter question; why approach it this way?
> Is there a reason that it needs to be of one kind or the other?
This is technically possible today.
Andrei
More information about the Digitalmars-d
mailing list