On Thu, Apr 7, 2011 at 9:15 PM, Mark S. Miller <erig...@google.com> wrote:
> > > 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, >> > It's worse than a high bandwidth covert channel, it's a high bandwidth side channel: < https://mail.mozilla.org/pipermail/es-discuss/2010-September/011717.html>. > 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 > -- Cheers, --MarkM
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss