The overall system layout follows the client/server paradigm. The polymake script is the server and
all the C++ programs (which either compute a specific property or define a construction) are the clients. A
client can issue queries to the server much like the user does via the command line interface. Moreover, a client
can also store data into a polymake file.
Since the requests from a client are processed exactly the same way as the user's requests from the command line, the client program doesn't need to take care of how the properties of interest are created. Creating new properties via the server instead of writing them directly to the file has also its advantages, since the server applies various consistency checks and for some properties it converts the data to normalized representation.
The communication mechanism is built into the Poly class.
Each Poly object is bound to at most one data file, and, therefore, to at most one polytope.
The class Poly is derived from std::iostream. Therefore, all formatting input/output
operators, status check functions, and other standard methods are available. Most container classes from the
Polymake Template Library also define specialized constructors retrieving the data from
a Poly object.
The communication between the client program and the polymake server is transaction-based. This means that all
changes the client makes to the polyhedral object are considered temporary until they are committed by the
client. Usually a transaction lasts the whole lifetime of the Poly object, but can be broken into
several steps by explicit calls to corresponding functions.