Table of Contents
As already mentioned in the introduction, one of the main concepts in the Massiv is the distributed object model. Besides others, some of features of this model are:
RPC (Remote Procedure Call) enables calling of methods on objects that may be located on another node.
Object migration (and replication) - the migrating object must be serialized into a network packet/stream, sent over the network and then created and initialized from the packet.
Introspection enables to control some properties and some information (such as name of the class, name of its ancestor, list of properties, etc.) about object at run-time. You can not only view the information, but also modify some parts of it (value of some attributes, etc.) which might is useful for example for an application debugging.
Although C++ doesn't provide a mechanism to manage the meta-information about classes and objects (such as name or ancestors), they are crucial for implementation of the features mentioned above. For example, when calling a method via RPC, it is needed to serialize information such as its name, type, actual parameters values and others into a network stream (so-called marshalling) and to reconstruct the call on the destination node after transmitting the information over the network.
There are more ways of defining the meta-information additionally. The one the Massiv makes use of is the IDL (Interface Definition Language). Perhaps it might be better to call it ODL (Object Description Language), but for some historical reasons we decided to keep the original designation.
The main idea of the IDL is that the required information is provided in a special form, often separated from the class declaration/definition, either written into an another file or into the same file in a form of source code annotation.