[E-Lang] Progress & Non-Progress Report

Mark S. Miller markm@caplet.com
Tue, 15 May 2001 11:15:24 -0700


I've now added a brief mention of the Droplets approach 
http://www.erights.org/elib/distrib/captp/WormholeOp.html#new-identity to 
the list of "Plausible Engineering Solutions" to this issue.

At 01:50 AM Tuesday 5/15/01, Tyler Close wrote:
>At 12:20 PM 5/14/01 -0700, Mark S. Miller wrote:
>>[...]  In E, Resolved arguments as they are sent
>>are "==" to the arguments as they arrive. [...].
>
>Before getting into the how, I'd like to know more about the why. The forked 
>reference and the original reference will never be in the same Vat together 
>(if they were, we wouldn't be forking), so why must the received argument be 
>"==" to the sent argument?

Primarily for uniformity between the inter-vat and intra-vat cases.  As 
we've previously agreed, we wish to have as much of the semantics as 
reasonably possible be stated in a vat-independent manner.  The vat 
independent semantics should not impose undue overhead on the intra-vat 
case.  E's current semantics (both before this issue was noticed, and in the 
currently proposed refinement that takes account of this issue) allows the 
intra-vat implementation of reference forking to need no work at all.  Given 
other properties of the current E implementation (FIFO delivery order), for 
an argument of an intra-vat send, the argument itself is a perfectly good 
representation of a fork of the argument.  Were this not the case, then 
intra-vat sent PassByCopy objects containing forked references would have to 
actually get copied rather than shared.

When speaking specifically of inter-vat forking, as you point out, the 
original and the fork can never be in the same vat.  Therefore, the "==" 
question cannot directly arise, since the "==" operation is performed in 
some vat, and its arguments must be references local to that vat.  However, 
we can specify instead that equivalence classes map one to one, so if x == 
y, then pass<A,B>(x) == pass<A,B>(y).  Where "pass<A,B>(x)" is a notation I 
just made up for the result of passing x as an argument in a message 
eventually sent from VatA to VatB.

More later...


        Cheers,
        --MarkM