[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Obtaining references to a given object?
- From: Phill Djonov <phill@...>
- Date: Thu, 12 Sep 2013 11:53:54 -0700
While the GC "has" that information, it isn't stored explicitly, and
it would be incredibly inefficient to obtain it from the GC . What the
GC *does* explicitly have is a giant linked list of all collectable
objects. That includes every live object (which you're interested in
scanning), every dead object (which need to be filtered out so that
they're not unintentionally resurrected), strings (which can't hold
references), and a number of internal objects like function protos,
c-closures, closures and the backing storage for each of their
upvalues, userdata objects, and a few other things along those lines.
Chances are, scanning the GC list for references to a given object
would cost about the same as a full collection. I can't imagine
wanting to incur that cost just to send a simple notification.
On Thu, Sep 12, 2013 at 7:00 AM, Marc Lepage <mlepage@antimeta.com> wrote:
> Suppose I have tables referring to tables (by their field values), or
> functions referring to upvalues (by closure).
>
> Given a table, I can know what it refers to by iterating over its contents.
> And given a closure, I can use the debug facilities to find its upvalues. I
> can do both recursively to obtain all objects or upvalues referenced.
>
> Is it possible to go in the other direction? To find all references to a
> given value (say a table) in other tables or closures (as upvalues)?
>
> Wouldn't the garbage collector have this information? It's not exposed in
> any debug facilities, is it?
>
> I'm just pondering about the idea of one object being able to notify other
> objects that reference it, without having to keep a list of listeners that
> explicitly subscribed for notifications.
--
Phill Djonov
Programmer, Tools and Graphics