Go to the first, previous, next, last section, table of contents.

## OpenXM

On Asir distributed computations are done under OpenXM (Open message eXchange protocol for Mathematics), which is a protocol for exchanging mainly mathematical objects between processes. See `http://www.math.sci.kobe-u.ac.jp/OpenXM/` for the details of OpenXM. In OpenXM a distributed computation is done as follows:

1. A client requests something to a server.
2. The server does works according to the request.
3. The client requests to send data to the server.
4. The server sends the data to the client and the client gets the data.

The server is a stack machine. That is data objects sent by the client are pushed to the stack of the server. If the server gets a command, then the data are popped form the stack and they are used as arguments of a function call.

In OpenXM, the result of a computation done in the server is simply pushed to the stack and the data is not written to the communication stream without requests from the client.

OpenXM protocol consists of two components: CMO (Common Mathematical Object format) which determines a common format of data representations and SM (StackMachine command) which specifies actions on servers. These are wrapped as OX expressions to indicate the sort of data when they are sent.

To execute a distributed computation by OpenXM, one has to invoke OpenXM servers and to establish communications between the client and the servers. `ox_launch()`, `ox_launch_nox()`, `ox_launch_generic()` are preprared for such purposes. Furthermore the following functions are available.

``ox_push_cmo()``
  It requests a server to push an object to the stack of a server.
``ox_pop_cmo()``
  It request a server to pop an object from the stack of a server.
``ox_cmo_rpc()``
  It requests to execute a function on a server. The result is pushed to the stack of the server.
``ox_execute_string()``
  It requests a server to parse and execute a string by the parser and the evaluater of the server. The result is pushed to the stack of the server.
``ox_push_cmd()``
  It requests a server to execute a command.
``ox_get()``
  It gets an object from a data stream.

Go to the first, previous, next, last section, table of contents.