[E-Lang] Progress & Non-Progress Report

Tyler Close tclose@oilspace.com
Mon, 14 May 2001 18:13:27 +0100


At 09:00 AM 5/14/01 -0700, Mark S. Miller wrote:
>At 05:31 AM Monday 5/14/01, Tyler Close wrote:
> >How do you tell the difference between the unresolved fork of a far
> >reference and the resolved fork of far reference?
>
>I'm not sure what level this question is at.  In the semantics?  In the
>implementation?  In the protocol?

All of the above. I just wanted people to think through the differences and 
hopefully come to the conclusion of the next sentence... that these 
differences can be hidden.

> >If these two types of
> >reference can be made indistinguishable to the E programmer, then there is
> >no need for any of this fuss.
>
>Agreed!  It all hinges on that "if".
>
>
> >This is the approach that Droplets takes.
>
>Great!  Let's see if Droplets' solution translates to E.
>
>
> >For the specific example that you raised, using a far reference as a key in
> >a pass-by-copy hashtable, the only requirement is to ensure that the forked
> >far reference supports EQ semantics from birth, rather than just from
> >resolution (as normal references do).
>
>Do I take it from this statement that normal references in Droplets, as in
>E, only support sameness from resolution?

The as yet unreleased Droplets 2.0 implements a reference semantics that I 
believe obeys E's defined semantics, modulo the ERiaSR issue.

>  And that therefore they only have
>a sameness-relevant swiss number starting from resolution?  What then of the
>fork of an Unresolved reference?  If this is also Unresolved, then it seems
>we have similar stances on when a fork is Resolved vs Unresolved.

In the current implementation, the fork of any reference is a resolved far 
reference. The only exception to this is a resolved reference to a 
pass-by-copy object. The fork of a resolved reference to a pass-by-copy 
object is a copy of that pass-by-copy object.


> >In Droplets, this is accomplished by
> >using the swiss-number for all EQ operations (actually, the whole URI gets
> >used). The forked far reference's swiss-number remains constant for its
> >entire lifecycle.
>
>But which swiss number?  Is it one associated with the forking, or is it the
>swiss number of the reference they were forked from?

The forked one of course. Using the original swiss number would pretty much 
defeat the purpose of forking.

>  If the former, then
>forking gives them a different sameness identity,  This makes hashtables
>containing them arrive as different hashtables.

The forked reference is not "==" to the original reference. The two 
references are on different timelines and so cannot be "==". A hashtable 
containing such a reference would indeed arrive as a different hashtable. 
It's likely that there is a difference in "==" between Droplets and E here. 
What are the issues here?


>I'll wait for clarifications of the above issues before proceeding further.

There is one problem on my TODO list for the reference implementation. The 
problem is that the fork of an unresolved promise for a pass-by-copy object 
is a resolved far reference to that pass-by-copy object. This forked 
reference never gets collapsed to a local copy of the target pass-by-copy 
object. I've been mulling different ways of solving this, but haven't found 
one that I really like, so I've been procrastinating. My favorite contender 
is to have the receiving Vat do another "yourself/0" on the forked reference.

Tyler