The default case -- an E object that doesn't state otherwise is PassByProxy. (However, a Java object using ELib is by default not remotely passable.) PassByProxy objects are shown as circles in our extended Granovetter notation. When passed between vats, the remote vat receives a remote reference to the original object.
When a PassByConstruction object is passed between vats, it causes an object to be constructed in the remote vat as its remote presence. PassByConstruction objects are shown as rectangles in our extended Granovetter notation.
These presences taken together are the PassByConstruction object as a whole, and the original object is simply the originating presence. A reference to a PassByConstruction object is always eventually a NEAR reference to such a local presence of the object. An available object is a PassByConstruction object whose presences can continue to give meaningful (if degraded) service when out of contact with other presences (including the originating presence).
This is the simplest form of PassByConstruction, specified by simply declaring the object to be PassByCopy. When passed, the object's contents are simply serialized at the sending end and unserialized at the receiving end. Each presence is an identical copy of all the others, and the presences operate autonomously of the other presences.
To be PassByCopy, an object must be immutable, selfless (use value-based equality, rather than having its own creation identity), and transparent (not encapsulate any of its state). Beyond these restrictions, the only additional semantics of declaring an object PassByCopy are that references to such an object is always eventually NEAR, and therefore at least its surface level use (fetching its state) is available. *** redundant?
To be written. In the meantime, see e-lang email messages
Unless stated otherwise, all text on this page which is either unattributed or by Mark S. Miller is hereby placed in the public domain.