More radical ideas about gc and reference counting
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 30 18:04:07 PDT 2014
On Wed, 30 Apr 2014 16:21:33 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Walter and I have had a long chat in which we figured our current
> offering of abstractions could be improved. Here are some thoughts.
> There's a lot of work ahead of us on that and I wanted to make sure
> we're getting full community buy-in and backup.
>
> First off, we're considering eliminating destructor calls from within
> the GC entirely. It makes for a faster and better GC, but the real
> reason here is that destructors are philosophically bankrupt in a GC
> environment. I think there's no need to argue that in this community.
> The GC never guarantees calling destructors even today, so this decision
> would be just a point in the definition space (albeit an extreme one).
destructors are for cleaning up non-GC resources. File handles, malloc'd
memory, etc. I don't see why these need to be eliminated.
What about changing destructors so that they DON'T implicitly call member
struct dtors? I'd prefer that, since struct dtors executed on the heap I
agree are an issue. One can always call the dtor in the class dtor if
necessary. Right now, you have no choice.
> That means classes that need cleanup (either directly or by having
> fields that are structs with destructors) would need to garner that by
> other means, such as reference counting or manual. We're considering
> deprecating ~this() for classes in the future.
So essentially, any class with a dtor needs reference counting? How does
one clean up a cycle of them?
> Slices T[] of structs with destructors shall be silently lowered into
> RCSlice!T, defined inside object.d. That type would occupy THREE words,
> one of which being a pointer to a reference count. That type would
> redefine all slice primitives to update the reference count accordingly.
This is a possibility, but I think you would need to prove performance is
not severely affected.
> I foresee any number of theoretical and practical issues with this
> approach. Let's discuss some of them here.
I'd rather see a RC array type, which specifically supports reference
counting for opt-in support.
But we are getting WAY ahead of ourselves. A workable RC solution has to
be proven first. I'd feel much more comfortable making such a change with
a working, tested solution to look at.
-Steve
More information about the Digitalmars-d
mailing list