In UC++ at present, each active object has a single queue of incoming messages, from all sources. These are processed in strict order, with no specification of the source. Indeed, there is no way to access the source of a message from inside the method. This compares with message passing, such as PVM, where messages from a particular source can be pulled out of the queue, and channel communication where each channel set up has its own queue. For some tasks this lack of multiple queues seems to be a problem.
How can we implement channel-based programming in UC++ without losing our object model, with remote method invocation? The futures feature allows some of this, as it matches up the incoming message with the outgoing message. The problem with this is that compared to channels there is an extra message for each value exchanged: the message asking for it.
If we use a future function to send a value and also get a new value back, then we have the problem that this has then put a sequencing on the two messages: the one can't be sent back until the first has been sent and received.
Click here for more information on UCL-CS.