[e-lang] EProxyResolver and sameness-breaking

Kevin Reid kpreid at attglobal.net
Thu Mar 22 23:25:00 CDT 2007


Kevin Reid <kpreid at mac.com> wrote:

> On Mar 7, 2007, at 13:38, Kevin Reid wrote:
> 
> > In particular, could we entirely eliminate the EProxyResolver object
> > (other than possibly being an implementation detail), and have
> > instead makeProxy(handler, resolution) which directly returns a proxy?
> 
> A slightly modified version of this has now been implemented in E-on-CL.
> 
> The interface is now:
> 
> makeProxy(handler :settled,
>            resolutionSlot :vow[FinalSlot],
>            resolved :boolean)
> 
> 'resolved' specifies whether this is a remote promise or a far ref.
> 
> 'resolutionSlot' resolves to a slot containing the resolution, rather
> than the resolution itself, because it must be possible to specify a
> proxy becoming resolved to a local promise or another proxy.
> 
> When resolutionSlot resolves for a far ref, its value must be a  
> broken reference; the proxy then becomes a disconnected reference  
> maintaining its identity, but using the problem from the provided  
> broken reference.

I noticed a problem in this design: The identity of a Far ref must not
change, but with this specification, it does change if the
resolutionSlot promise gets resolved to another promise which is the
identity of another Far ref.

To fix this, I have redefined the identity of a Far ref to be not the
[handler, resolutionSlot], but rather [handler,
makeTraversalKey(resolutionSlot)]. This way, the ref's identity is still
completely derived from the proxy construction, but it is not subject to
promise resolution.

I have this implemented in E-on-CL, but only in a form too ugly to
publish; I will improve and commit it soon.

I am also working on implementing this proxy system in E-on-Java.

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>


More information about the e-lang mailing list