As can be easily seen, the design goals presented above require non-trivial extensions to the underlying run-time and/or language. For example, in order to ensure that objects can migrate transparently, the Core must be able to automatically serialize objects, create object instances, etc. Since objects can point to remote objects (due to the transparent migration the determination of what is local and remote would be volatile), the Core have to have a concept of general persistent pointers. Such pointers must be able to reliably reference any object managed by the distributed model, regardless if it is local or remote (local native pointers can not be used at all). The mapping to the C++ language has to be straightforward and error prone. The Core has to be able to dereference such pointers and detect potential errors (such as invalid references, etc.).
We did not want to implement a completely new language or modify an existing one too much, so we decided to implement all the needed extensions in pure C++. This results in fact that the model itself is tightly coupled with the C++ language and the new features are accessible through regular language constructs. Application objects that should be managed by the Core must be written (implemented) in a "standardized" way enforced by the model. The rest of the book describes this in detail.