Mark S. Miller (2013-11-11T21:51:53.000Z)
domenic at domenicdenicola.com (2013-11-17T17:57:06.591Z)
On Mon, Nov 11, 2013 at 1:09 PM, Jason Orendorff <jason.orendorff at gmail.com>wrote: > OK, but let's stick to use cases and examples outside your own research. - Much of the early Actors research - DEC SRC Network Objects - RMI - Original-E before I arrived at Electric Communities - Midori - Orleans - AmbientTalk - Cap'n Proto Much of the early Actors research did cyclic GC as well, but this early distribibuted GC work notably violated the general Actors assumption of mutual suspicion. Original-E is the only system I know to do full distributed cyclic GC among mutually suspicious machines http://www.erights.org/history/original-e/dgc/index.html. I specify "before I arrived at Electric Communities" because of your requested constraint, and because the secure distributed cyclic GC was already working then. Cap'n Proto is designed primarily for the local C++ bindings. It has the distributed acyclic GC logic I explain, but typically driven by local manual deallocation rather than local GC and finalization. I am not confident of the GC properties of Midori and Orleans. If someone knowledgeable of these systems would comment, that would be great. > > Why do you believe manual deallocation decisions will be easier in > > distributed systems than they are locally? > > I don't. That's why I cited several examples of systems that require > neither fine-grained manual deallocation nor distributed GC. I didn't say "fine-grained". Erlang requires manual deallocation of processes. Also, you did specify "untrusted". Distributed Erlang does not qualify, exactly because pid are forgeable. > Hmm. I don't really disagree with any of this, except the notion of > pids being strong references, and I think my point stands. What do you mean then by "strong reference"? If Erlang pids are not strong references, then I don't understand what you are saying. > Erlang has > no distributed GC, no weak references of the sort we're discussing, > and (I still claim) no strong cross-process references. Yet its users > don't seem to have any of the problems that acyclic distributed GC is > supposed to solve. How do they choose when to kill a process? > Perhaps, but they still need to cut off bad clients, and even honest > clients in this kind of system can inadvertently hog server resources > simply by not doing GC for a while (because, for example, there isn't > memory pressure *on the client*). In these cases I'm not sure how the > server can tell which clients to cut off. It seems like it would > require automation of the sort of memory tooling you characterized as > experimental earlier in this thread. That's fair. Driving distributed GC by observing local GC has exactly the problem you point out: As we give one vat more memory, reducing its memory pressure, it observes far fewer finalizations, increasing the memory pressure on its counter-party vats. Perhaps the reason this problem hasn't been too pressing in the past is that none of our vats had enough local memory to cause the problem. > Even if it all that works out, we're still left with an abundance of > widely used alternative designs, the high total cost of implementing > weak references, the nondeterminism they introduce, the security > consequences, and so on. What "abundance of widely used alternative designs" do you mean? Of distributed object systems and distributed GC protocols? Sure. I am not proposing to standardize any of these until they've obtained more usage in JS. Of weakref / post-mortem finalization ideas? I think the design space or the remaining controversies here are small compared to many of the other issues that TC39 has been able to converge on. And until we have that, we can't get started on the distributed GC cowpaths we need to move forward on full distributed objects for JS.