On Thu, Apr 7, 2011 at 9:11 PM, Mark S. Miller <erig...@google.com> wrote:

> Hi Mikeal,
>
> I do not yet understand your server example. Perhaps a bit of illustrative
> code would help?
>
> In any case, within memory-safe gc languages, there are several well
> motivated enhancements of the API of the collector. Several of these are
> fundamental, in that there is no way to emulate them in their absence.
> Ephemeron tables aka WeakMaps is one. Weak references <
> http://wiki.ecmascript.org/doku.php?id=strawman:weak_references> is
> another. Given just a normal GC, neither can be emulated. Either one by
> itself is inadequate to emulate the other. WeakMaps are weak references were
> written as separate strawmen because, once separated, they are cleanly
> different
>

Oops. "WeakMaps *and* weak references were ..."



> abstractions.
>
> * WeakMaps by themselves do not make GC observable. They simply provide a
> collection abstraction designed to make each value accessible based on the
> *conjunction* of access to a WeakMap and to a key. Because access requires
> this conjunction of prior access, strong reachability of the value should
> likewise be based on strong reachability of both the WeakMap and the key. No
> other existing or proposed construct (including weak references) enables one
> to arrange such conjunctive reachability relationships. Were WeakMaps
> enumerable, then access to the WeakMap by itself would be an adequate
> condition to access its keys and therefore its values.
>
> * Weak references, especially when coupled with post mortem notification,
> is all about observing and reacting to collection decisions. By fetching a
> strong reference from a weak reference, the "mutator" (i.e., the program
> rather than the collector) can cause a non-monotonic transition of a value
> from non-strongly-reachable to strongly-reachable, provided it performs this
> fetch before the collector notices this non-reachability and collects that
> value. To do a distributed object system such as <
> http://erights.org/elib/distrib/captp/> <
> http://code.google.com/p/caja-captp/>, we desperately need weak references
> and post mortem notification, in order to compose local collection into
> distributed acyclic collection. Because the ability to create weak
> references enables one to observe collection, and therefore enables one to
> read a high bandwidth covert channel, the ability to create weak references
> is a capability must not be given out lightly, and should be encapsulated by
> such distributed object systems (as it was in E). By contrast, the ability
> to create a WeakMap can be made generally available.
>
> * Local GC + WeakMaps + weak references with post mortem finalization are
> still not adequate to compose local collections into full distributed
> collection, including the collection of distributed cycles. <
> http://erights.org/history/original-e/dgc/> explains a full distributed GC
> system designed by Arturo Bejar and implemented within (the language now
> known as) Original-E. It relied on adding a new API to the JVM collector
> (back in Java 1.0.x days IIRC), to obtain reachability-change information
> that cannot otherwise be derived from the local collector. Were the
> standardization process infinitely malleable I would write up a strawman for
> this as well, but my sense is that this would be a bridge too far for a
> standards process.
>
> Could your server example be handled by weak references with post mortem
> notification? Though I don't yet understand it, that would be my guess. I do
> intend to propose weak references for the next round of ES standardization
> after ES-next.
>
>
> On Thu, Apr 7, 2011 at 7:13 PM, Mikeal Rogers <mikeal.rog...@gmail.com>wrote:
>
>> requests come in to a server, you want to stick them in a hash so that you
>> can query the server at any time for all the "current" queries.
>>
>> the problem is that, when using objects, you'll always leak. there are too
>> many reasons a request might "go away" and too many asynchronous "owners" of
>> that request to reliably remove it from the hash, especially in node.
>>
>> ephemeron tables looked like a good way to solve this, we can stick them
>> in the table and when nobody else has a reference to them they get
>> collected. at any point we can query the server for all existing
>> request/response objects.
>>
>> if we have no way to enumerate the map we can't do this.
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
>
> --
>     Cheers,
>     --MarkM
>



-- 
    Cheers,
    --MarkM
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to