Mark S. Miller (2013-09-26T15:55:28.000Z)
domenic at domenicdenicola.com (2013-10-01T21:00:27.208Z)
I think we need to distinguish two senses of process when we ask this question: a) address space separation in the implementation b) concurrency b) would be a breaking semantic change, so I'm going to write that off here. Feel free to start a separate thread on public-script-coord if you like about whether this breaking change might be possible, but I'm skeptical. a) without b) might make use of OS processes in the implementation, since most OSes only provide separate address spaces to separate processes. But from a scheduling perspective, a group of address spaces can function as a single process by adopting the discipline that at most one is active at a time. A sync IPC makes the caller inactive and the callee active. It simulates exactly the locus of activity we have now in a single process single thread implementation. So the a) question in isolation really does reduce to the membrane question. Since no object references ever directly cross a membrane boundary implementing a realm boundary, the two sides of a membrane can be connected by only a bit channel with no loss of *observable* functionality. However, we'd lose the easy GC of cross compartment cycles we get right now by building in-address-space membranes using proxies and weakmaps. Cross-address-space GC is essentially the same problem as distributed GC, which is a big topic in itself.