Number of references to a Class Object

Stanislav Blinov blinov at loniir.ru
Mon Feb 14 06:34:04 PST 2011


12.02.2011 18:44, d coder пишет:
>> Also tango (for D 1.0) implements it.
>> Link:
>> http://www.dsource.org/projects/tango/docs/current/tango.core.WeakRef.html
>>
>> Might be worth a look if you are going to implement it for D 2.0.
>>
> I looked at the D1 implementation. It depends on GC methods
> weakPointerCreate and weakPointerDestroy. These functions are
> implemented in D1 GC as extern C functions.
>
> It seems most of this code should be directly portable to D2, it would
> certainly require changes in the DMD2 source code. I have never worked
> at that level and have used D2 only for past couple of months. While I
> can give that a blind try,  it would be useful only if it gets
> excepted in DMD2.
>
> What do you guys suggest?
>
I remember reading a discussion about weak references some time ago. You 
*could* implement them using functions rt_attachDisposeEvent and 
rt_detachDisposeEvent, which are extern(C) and declared in object.d 
(actually, object_.d of dmd's druntime source), and AFAIR Tango uses 
something similar.

Normally, a (hypothetical) WeakRef would nullify the non-GC-scanned 
reference in a dispose handler. But there is an issue with this, as 
dispose handlers are run *after* the GC resumes all threads, which means 
that it is still possible that a WeakRef implementation would supply the 
client code a presumably valid reference just before some thread 
deletes/clears it - a straight way to AV/segfault. Of course, this is no 
problem for single-threaded applications, but then again, weak 
references are not that useful in such apps as their usefulness 
manifests almost entirely in concurrent code.


More information about the Digitalmars-d-learn mailing list