[E-Lang] New Page: Partially Ordered Message Delivery

Mark S. Miller markm@caplet.com
Fri, 02 Mar 2001 12:20:21 -0800


Wow, lot's of messages today!  I'll respond to what I see as key anchor 
points.  If you feel there's a point I need to respond to that I haven't 
(whether yours or not), please email me privately to bring my attention to 
it.  But gimme a day to catch up first.  Thanks.


At 12:19 AM Friday 3/2/01, Dean Tribble wrote:
>>Since you now agree with two party full-order, could you restate your
>>proposed non-fail-stop semantics of message delivery in this context?  I
>>think the two issues are crucially tied together.
>
>Note that it is not quite two-party full-order:  if I make a second reference within the *same* party, are messages to each unordered with respect to each other[?]

"two-party" is an imprecise phrase, but I believe the concept described on 
that page, and used by Tyler & I in this discussion, does correctly 
correspond to the full-order part of Joule's semantics.  The answer to your 
question according to all is "no".  The issue is never "who?", but "what 
reference?".


>:-)  Forking the Acceptor (which is not Joule semantics, but is isomorphic with it, I believe) can be thought of as an operation on an Acceptor.  All messages to the forked Acceptor are *after* all messages sent on the original Acceptor before the fork, but are  *unordered* with respect to all messages sent on the original Acceptor after the fork.  Thus, the fork is the creation of a branch in the partial order.

This is E's current semantics as well.  As mentioned before, this is not an 
argument for E's current semantics rather than Tyler's proposal, but it 
gives us stable reference points in the discussion.


>Of course in Joule, many more things result in a fork than in E.  E works hard to ensure no forks within a single Vat.

I believe this statement confuses semantics with implementation.  In E's 
semantics, eventual-send forks all argument references (the top level of 
PassByProxy references, after copying all PassByCopy objects).  E's current 
implementation works hard to implement this semantics without having to do 
any actual copying or forking, but the E language programmer can't tell, and 
should not count on this.


        Cheers,
        --MarkM