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 this
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.
Hi Matthew--
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 further applications.
thanks,
-C
-- Craig Latta improvisational musical informaticist www.netjam.org Smalltalkers do: [:it | All with: Class, (And love: it)]
spoon@lists.squeakfoundation.org