=================================================================== RCS file: /home/cvs/OpenXM/doc/issac2000/openxm-stackmachines.tex,v retrieving revision 1.10 retrieving revision 1.14 diff -u -p -r1.10 -r1.14 --- OpenXM/doc/issac2000/openxm-stackmachines.tex 2000/01/16 06:02:41 1.10 +++ OpenXM/doc/issac2000/openxm-stackmachines.tex 2000/01/17 08:50:56 1.14 @@ -1,4 +1,4 @@ -% $OpenXM: OpenXM/doc/issac2000/openxm-stackmachines.tex,v 1.9 2000/01/15 12:18:42 takayama Exp $ +% $OpenXM: OpenXM/doc/issac2000/openxm-stackmachines.tex,v 1.13 2000/01/17 08:06:15 noro Exp $ \section{OpenXM Stack machines}\label{sec:ox-stackmachines} @@ -7,11 +7,10 @@ In OpenXM specification, all servers are stack machine When a server ox\_xyz gets an OX data message, it translates the data into a local object of ox\_xyz and pushes the object onto the stack. -According to the OpenMath specification, -the translation scheme +The translation scheme %% together with definitions of mathematical operations %% of the system ox\_xyz -is called the {\it PhraseBook} of ox\_xyz. +is called the {\it PhraseBook} of ox\_xyz (cf. OpenMath \cite{OpenMath}). For example, the Asir command {\tt ox\_push\_cmo(P,1)} (push integer $1$ onto the server $P$) sends an OX data message @@ -20,7 +19,7 @@ Here, {\tt OX\_DATA} stands for {\tt OX\_DATA} header and {\tt (CMO\_ZZ,1)} is a body standing for $1$ expressed by the CMO. -The server tranlates {\tt (CMO\_ZZ, 1)} to its internal object of +The server translates {\tt (CMO\_ZZ, 1)} to its internal object of the integer $1$ and pushes the object onto the stack. @@ -28,7 +27,7 @@ If the server gets an {\it OX command} message, then t executes the command. Any OX command message starts with the int32 tag OX\_COMMAND. The body is a stack machine operation code expressed by int32. -The codes are listed below. +The codes are listed below \cite{noro-takayama}. \begin{verbatim} #define SM_popSerializedLocalObject 258 #define SM_popCMO 262 @@ -72,7 +71,7 @@ For example, the following code factorizes $x^{100}-1$ \begin{verbatim} P = ox_launch(); ox_push_cmo(P,x^100-1); ox_push_cmo(P,ntoint32(1)); -ox_push_cmd(P,269); +ox_push_cmo(P,"fctr"); ox_push_cmd(P,269); Ans = ox_pop_cmo(P); \end{verbatim} @@ -82,19 +81,20 @@ instead of a result of the computation. The error object consists of the serial number of the OX message which caused the error, and an error message. \begin{verbatim} -[341] ox_rpc(0,"fctr",1.2*x)$ -[342] ox_pop_cmo(0); +[340] P = ox_launch()$ +[341] ox_rpc(P,"fctr",1.2*x)$ +[342] ox_pop_cmo(P); error([8,fctr : invalid argument]) \end{verbatim} OpenXM server won't send error messages to the client except when it receives a {\tt SM\_pop*} command. -OX stackmachines work in the asynchronous mode which is similar +OX stack machines work in the asynchronous mode which is similar to X servers. For servers of graphic and sound applications, it may be an advantageous feature. It is also possible to emulate RPC and a web server for MCP \cite{iamc} -on our asynchronous OX stackmachines. +on our asynchronous OX stack machines.