<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
   <TITLE>Grant Matcher History</TITLE>
   <META NAME="Author" CONTENT="Mark S. Miller">
   <META NAME="GENERATOR" CONTENT="Mozilla/3.0Gold (Win95; I) [Netscape]">
</HEAD>
<BODY BACKGROUND="wood.gif">

<H1 ALIGN=CENTER>A Somewhat Personal History </H1>

<H1 ALIGN=CENTER>of the <I>Grant Matcher</I> Puzzle</H1>

<P>Up to <A HREF="grant-matcher.html">The Grant Matcher</A></P>

<P>
<HR WIDTH="100%">Ages ago, motivated by implementation issues, Lisp introduced
one of the most puzzling constructs in all of computer science, the <I>EQ</I>
operation. Implementationally, it simply meant <I>Are these two values
the same pointer (or memory address)?</I> Seemingly innocent at the time,
when computer scientists later wished to give languages semantics--to say
what the constructs <I>meant </I>independent of implementation--this construct
proved surprisingly elusive. For Lisp, an adequate meaning was eventually
pinned down, but then along came dynamic object systems. The first object
system was Simula-67, but for us the story begins in 1972 with independent
inventions of three dynamic object systems--Smalltalk, <A HREF="http://biobio.cs.uiuc.edu/Papers/Semantics.html">Actors</A>,
and <A HREF="http://cap-lore.com/CapTheory/OperatingSystems.html">KeyKOS</A>.
The latter two being foundational models of both object computation and
capability computation. </P>

<P><A HREF="http://biobio.cs.uiuc.edu/Papers/Semantics.html">Actor semantics</A>,
from Carl Hewitt and his group at MIT, is a foundational theory of computation
(in the sense that Turing or Von Neumann Machines are). It is a pure theory
of object computation and a pure theory of capability computation. In Actor
semantics, a reference to an actor enables one to send messages to the
actor, and the meaning of the reference is <I>only</I> the behavior one
can cause in response to messages. If two references are behaviorally identical,
they are indistinguishable. Since behavior is only solicited in response
to messages, a reference to a <I>transparent forwarder</I> should seem
identical to a direct reference. A transparent forwarder is simply an object
that forwards all messages it receives to another object.</P>

<P>As a result of this transparency, many concurrent programming abstractions
were first invented in Actor languages. In less pure form, many have made
it into more familiar languages. <A HREF="http://lcs.www.media.mit.edu/people/lieber/Lieberary/AI/PIKRL/PIKRL.html">Futures
and Lazy Evaluation</A> work perfectly in this context, in which the intermediate
object embodying the computation could seem identical to the non-yet computed
result. The intermediate object simply forwards all messages whether accumulated
in while the computation is in progress or arriving afterwards. Extreme
in this regard is the <A HREF="http://www.agorics.com/joule.html">Joule
Channel</A>. Combining the power of Actors with support for the patterns
explored by <A HREF="http://www.c-lab.de/~mary/pj.html">Concurrent Logic
Languages</A>, and <A HREF="http://sunsite.ust.hk/dblp/db/conf/cp/index.html">Concurrent
Constraint Languages</A>, Joule Channels require that transparent forwarders
be fully transparent.</P>

<P>Whereas Actors came out of a symbolic-computation A.I. tradition, with
it's emphasis on extreme flexibility, <A HREF="http://cap-lore.com/CapTheory/OperatingSystems.html">KeyKOS</A>
is an operating system, most infuenced by Hydra and Algol '68, whose emphasis
was extreme flexibility <I>within </I>the constraints of extreme security.
(Not coincidentally, both were heavily influenced by the Lambda Calculus,
but that's another story.) The Joule design effort sought to reconcile
these traditions and build a single system with the best of both worlds.
</P>

<P>The primary designers of Joule are E. Dean Tribble, Norm Hardy, and
myself (with significant contributions by Pavel Curtis and Chip Morningstar).
Dean and I came from the Actor / Concurrent Logic Programming tradition,
and were among the founders of the Vulcan Project at Xerox PARC. Norm Hardy
was the chief architect of KeyKOS. Despite the difference in goals and
starting points, the philosophy of computation arrived at by the two groups
was amazingly similar. Indeed, Norm, Dean, and I saw eye to eye on almost
everything. Many of the lessons we learned from Norm seemed to not only
help us &quot;think KeyKOS&quot; better, but also to &quot;think Actors&quot;
better than any lessons available from that tradition.</P>

<P>The one persistent source of disagreement was the question of <I>EQ</I>.
Actors didn't have EQ, and Joule's ambitions of flexibility demanded that
Joule not have it either. KeyKOS&nbsp;does have EQ (called <A HREF="http://www.webcom.com/agorics/KeyKos/Gnosis/43.html#(compare-keys)-returns-in-c">DISCRIM</A>),
and is implicitly or explicitly the basis for several of its impressive
security patterns, such as the Factory. Early on, Dean showed how the Factory
could be done without EQ. Several years of argument ensued, were Norm would
propose problems he thought required an EQ primitive, and Dean would then
show how to solve the problem in Joule without any such primitive. I participated
on both sides, with a preference for no EQ if it wasn't crucial.</P>

<P>Then, while writing the Escrow Exchange Agent as part of the <A HREF="http://www.sun.com/960201/cover/webmart.html">WebMart
</A>system of capability-secure distributed electronic commerce (a collaboration
between Agorics and Sun Labs), I ran into a problem that seemed to be insoluble
without an EQ primitive. Fortunately for the project, the distributed capability
system we had built (orginally known as Corbamite, later attached to Tcl
and renamed Tclio), did provide for distributed EQ. However, the problem
became another challenge in the controversy. Norm boiled the logic of the
problem down to the <A HREF="grant-matcher.html">Grant Matcher Puzzle</A>.
</P>

<P>Surprisingly, once we understood one clear example of the problem, we
realized that instances of this problem were common. Deciding how to deal
with this issue has repeatedly had a big effect on the system we are building
at <A HREF="http://www.communities.com/">Electric Comunities</A>. We make
EQ available, but in the partially-transparency preserving <A HREF="join.html">join</A>
construct. It preserves most of the practical benefit of Joule Channels
though it still sacrifices full transparency.</P>

<P>The controversy remains, but the cost of foregoing EQ is finally understood,
and seen to be a fundamental cost. The controversy over the cost of having
EQ vs the cost of not having EQ remains. For this cake, having and eating
are now known to be mutually exclusive.</P>

</BODY>
</HTML>
