Number of references to a Class Object
Steven Schveighoffer
schveiguy at yahoo.com
Mon Feb 14 06:07:29 PST 2011
On Sat, 12 Feb 2011 12:02:14 -0500, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> On Saturday 12 February 2011 08:45:03 d coder wrote:
>> > If you know roughly what to do and want to take a stab at producing a
>> > viable patch to fix the problem, then feel free. If it's solid, it may
>> > get in. I don't know. It doesn't hurt to try though (as long as you're
>> > prepared for the fact that it may not be accepted).
>>
>> Thanks for letting me know of the licensing issues. I do not think I
>> have the expertize required to fix this myself. So I hang my shoes
>> here and wait for somebody else to get stuck in a similar situation.
>
> It is a known issue, and it should probably be fixed at some point, but
> I don't
> think that it's a high priority. So, there's a decent chance that it
> will be
> dealt with, but I have no idea when.
>
> However, it's not generally an issue, because you shouldn't normally be
> keeping
> references around for stuff that isn't used anymore. The garbage
> collector is
> smart enough to deal with circular references and the like, so the
> biggest cases
> where you'd normally need weak references aren't actually a problem.
> You're
> trying to do something fairly abnormal here.
It's not a simple issue. The GC currently is too coarse with it's
pointer/no-pointer determination.
This would require a weak-ref to use double-dereferencing, and allocate a
pointer on the heap, a performance disaster.
For example, if weak-ref is just a simple size_t, cast to a pointer when
used, then this is still not a weak ref:
struct S
{
int *x;
weakref!int y;
}
because the whole struct is marked as containing pointers. Same goes for
anything allocated on the stack or TLS. I had to deal with this in one of
my most recent changes to the array append, since I needed to make the LRU
cache weak-ref.
I think in order for efficient generalized weak-ref to work properly, we
need precise scanning first.
-Steve
More information about the Digitalmars-d-learn
mailing list