[e-lang] E Distributed Programming Clarification
Kevin Reid
kpreid at mac.com
Wed Sep 17 18:30:54 CDT 2008
On Sep 17, 2008, at 17:27, Jimmy Wylie Jr. wrote:
> What does the addExit method do and how is it relevant accomplishing
> persistency in distributed programming?
An exit, in persistence, is a place where the object graph is cut, and
rejoined later, to something equivalent to the previous thing.
Suppose we have a mutable object of some sort:
def listOfInterestingThings := [].diverge()
Consider what happens if we serialize some object referring to this
object; let's just use a list (but this is equally applicable to any
serializable object whatsoever)
[1, 2, 3, listOfInterestingThings]
If we just serialize this list, then its serialized representation
will be
"[1, 2, 3, [<current contents>].diverge()]"
and when we unserialize it later, it will have its own copy of
listOfInterestingThings as of when it was serialized -- not shared
with anything else.
If, instead, we add an exit for listOfInterestingThings, then the
serialized form is
"[1, 2, 3, listOfInterestingThings]"
which, upon unserialization, will be reconnected with the presumably
already-existing mutable list.
Another major case is external authorities. For example, <file>, the
access to the local filesystem, is an exit: when you serialize a file
object, what you get is an instruction to reconstruct it from <file>
and the pathname.
(I believe the chatReceiver is similar to the first two cases, but I
haven't looked at the code.)
Thirdly, we have object makers: for example, whenever you serialize a
list, or a map, the serialized form contains a mention of
makeConstList or makeConstMap; these are exits.
In general, exits are used for things that can't or shouldn't be
serialized, but rather replaced with "equivalent" things from the next
incarnation of the vat.
--
Kevin Reid <http://homepage.mac.com/kpreid/>
More information about the e-lang
mailing list