
Maciej Sobczak wrote:
no cross-language support
That's bad, in my opinion. This excludes most of the useful applications of RMI in distributed systems,
As already mentioned, there are already libraries (or I should say, platforms, as they come with misc tools such as interface language compilers) that do just that. Having cross-language support requires external interfacing language and use of a subset of native-language features. Here, the goal is to support virtually any C++ type, including user types, (say, compatible with Boost Serialization) to be marshallable without having to map it to some common "wire" type.
How do you plan to solve the problem of double (and any other type for that matter) having implementation-defined size (and even representation)?
If we were to use Boost Serialization, the problem of type sizes and endianess would imply use of text serialization, at the cost of performance. Unless of course BSL extends its archiving support for XDR-like format.
Apart from that, how do you plan to encode *names* of messages, if in the code they exist only as compile-time names of types? The server has to somehow map incoming message to one of the registered operations. How?
Each operation is part of an interface type, and has a unique id (enum) within that interface. The id sent over the wire which is then used on the server side to dispatch the operation to the bound functor. The client and server sides are assumed to share the same interface def. Cheers, Slawomir