[e-lang] multiway when-catch
Kevin Reid
kpreid at mac.com
Thu Nov 1 17:49:40 EDT 2007
On Oct 29, 2007, at 22:36, Rob Withers wrote:
>> Okay, this looks reasonable, though it's more mutable than is good
>> style. However, whenResolved is not a primitive operation on
>> references. Look at jsrc/org/erights/e/elib/ref/Ref.java for the
>> implementation of whenResolved.
>
> I see that, now that you point it out. I am sure there is a good
> reason for
> it. Is it because you want to limit the MirandaMethods defined, and
> __whenMoreResolved handles the behavior of what you want, so
> whenResolved
> and whenBroken are specified in terms of __whenMoreResolved? Or
> are there
> other reasons?
Design principle: Operations should be as simple and un-duplicative
as possible; having overlapping operations allows misbehaving
implementations to implement them differently.
Also, since there are many things which must be aware of the entire
Miranda protocol (forwarders, membranes, other-object-system
bindings, etc.) it is good to minimize the complexity each must
reimplement/understand.
Also, Ref.whenResolved has stronger guarantees than
__whenMoreResolved which derive exactly from that it is a separate
implementation. For examples, for any Ref.whenResolved(x, f),
1. f will not be invoked until x *really is* completely resolved
(as defined by Ref.isResolved), rather than when it is more-resolved
or pretending to be resolved.
2. f will be invoked at most once.
3. f will be passed a reference which is the same as x.
There are probably other reasons I haven't thought of (MarkM?).
--
Kevin Reid <http://homepage.mac.com/kpreid/>
More information about the e-lang
mailing list