Squeak
  links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
SqueakElibVM
Last updated at 4:55 pm UTC on 29 November 2007
This research framework provides a multithreaded vm for a secure, distributed object implementation. Messaging is asynchronous with eventual sending and an eventual message send will return a "promise", which will resolve itself into the result once it is computed. Messages to objects in other threads, called Vats, will be eventual, preventing deadlock.

Here is the Chat Client release. You can see in the plan what has been done (or skipped). This zip contains the sources, the image/changes and a Windows VM (other platforms will have to build their own. If you do, send it to me and I'll post it.). It is ready to be dropped into a directory of your choosing, unzipped and run.

Instructions for the EChat Client


Installation
After unzipping the zip file, run the image with the supplied VM.

Configure
The tricky part is setting up the networking code so that others can connect to you. Every image is a server, in this peer to peer system. If your machine is behind a router, then you will need to specify the external ip address to your router, and make your machine the DMZ. I don't currently support host names, but that is next on the list.

To configure your network settings, there is a #squeakelib page in the Preferences Browser. Go there and there are three settings.

Running EChat
At the top of the window, there is a button which says: 'SqueakElib Chat Launcher'. Click this button. It will prompt you for a nickname. Then the launcher window will open. There are two List panes. The top one is for other users. The bottom pane is for multiway chats. In the top pane you will see a list of the other users signed on. You can right click and select 'open chat' to start chatting with the other user. In the bottom pane, you can create a multiway chat and start chatting. Or you can select an existing multiway chat and join it and start chatting.



The Plan


Phase 1, Done Get all msg sends to be interceptable by the SqueakElib promise framework. This includes things that have been macro transformed by the Compiler, like #ifTrue:, #ifNil:, #whileTrue:, and so on.

Phase 2 Done Reintegrate CapTP

Phase 3 Extend the SqueakElib system


Phase 4 Integrate with Exupery.

Phase 5 is to allow all primitives and bytecode methods to have a promise as an argument. The plan is to stop short the primitive call and send the excapsulated primitive call to the promise(s) as part of a whenMoreResolved call. When the promise resolves, the primitive call will be made. QoS can be satisfied by joining the promise with a timer, such that if the promise does not resolve in xxx milliseconds, it will become broken and the primitive call will "fail".

Phase 6 Integrate SqueakElib with the Multi-threaded VM. In this model, references to objects in other Vats will be VatRefs (a form of a FarRef) and msgs will be serialized to the other Vat (reassigned the VatID in the same shared ObjectMemory, or copied to a different but co-located ObjectMemory).