There are four ways I can think of to use an object
resident in a foreign island (or object memory, or vat), in a
safe manner (no interrupting an object during a state change, and
no out-of-sync copies)
If the object is writable, you can:
1. PassByProxy: Get a proxy to the object, and send it messages
that execute in its local island, safely scheduled. E and
Croquet do this with FarRefs; Spoon does it with Others.
2. PassByReplica: Get a replica of the object. Messages sent to
it will be executed both locally and remotely. Croquet does
If the object is read-only, you can also:
3. PassBySerialization: Serialize the object into a stream of
instructions in a safe language, then read it in locally.
Since the copies are read only, they never get out-of-sync.
This is what any serializer does.
4. PassByCopy: If the islands are in the same format, one could
copy out the bytes, and resolve out-pointers at both ends.
This is what ImageSegments do. This would be much faster than
serialization, and can even be supported in hardware, by
doing a DMA between two memories in a distributed memory
computer (such as a Cell Broadband Engine)
5. PassByInstance: If the islands have access to shared memory,
one can use an object directly, executing messages for it
locally. Croquet does this for a few objects,
Which of these does Spoon use to copy objects between
memories/islands? I'm curious, especially in regard to
PassByCopy, since I'm working with the Cell BE in mind.
Spoon uses proxies by default, and serialization on demand. This
is all that's needed for its module system and other remote tools to
work, but one could certainly implement the other techniques, for