[BACK]Return to ox_math.tex CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_math / documents

Diff for /OpenXM/src/ox_math/documents/ox_math.tex between version 1.2 and 1.7

version 1.2, 1999/11/02 06:12:00 version 1.7, 2002/04/17 01:09:23
Line 1 
Line 1 
 %#!platex  %#!platex
 %% $OpenXM$  %% $OpenXM: OpenXM/src/ox_math/documents/ox_math.tex,v 1.6 2000/01/20 15:18:31 ohara Exp $
   
 \documentclass{jarticle}  \documentclass{jarticle}
 \title{Mathematica の Open XM 化について  \title{Mathematica の Open XM 化について
 % \\ {\small --- Open Mathematica サーバの内部構成 ---}  % \\ {\small --- Open Mathematica サーバの内部構成 ---}
 }  }
 %\date{January 19, 1999}  %\date{January 19, 1999}
 \date{July 12, 1999}  %\date{July 12, 1999}
   \date{November 25, 1999}
 \author{小原功任}  \author{小原功任}
   
 \begin{document}  \begin{document}
 \maketitle  \maketitle
   
 \section{Open Mathematicaの構成}  \noindent
   {\bf
   注意 (2002.04.17):
   この文書は, 古いインタフェースをもとに記述してあるので,
   例はこのままでは動作しないので注意.
   math2ox.texi が最新のインタフェースのマニュアルである.
   一番の変更点は, {\tt OxStart} が pid (ox process id) を戻すようになり,
   {\tt OxParse} など多くの関数が, pid を引数として求めるようになったことで
   ある.
   たとえば, この文書の {\tt OxParse} を用いる例は, 次のように変更しないと
   いけない.}
   \begin{verbatim}
   Install["math2ox"]
   pid = OxStart["ox_sm1"]
   OxParse[pid,"(CMO_ZERO)"]
   OxPopCMO[pid]
   \end{verbatim}
   
   
   \section{我々が提供するもの}
   
   我々が提供するのは二つのプログラムとそのソースである。一つ目は
   {\tt ox\_math} プログラムであり、これは OpenXM サーバの一種である。二つ
   目は {\tt math2ox} であり、OpenXM クライアントである。
   
   
   \section{Open Mathematica サーバの構成}
   
 Open Mathmatica サーバはOpen XM クライアントおよびmathematica カーネルと  Open Mathmatica サーバはOpen XM クライアントおよびmathematica カーネルと
 通信する。Open Mathmatica サーバは起動直後にmathematica カーネルを起動し、  通信する。Open Mathmatica サーバは起動直後にmathematica カーネルを起動し、
 mathematica カーネルと協調して動作する。mathematica カーネルとは  mathematica カーネルと協調して動作する。mathematica カーネルとは
Line 47  CMO は 次のように変換されてから, MathLink を通して送ら
Line 74  CMO は 次のように変換されてから, MathLink を通して送ら
 \begin{enumerate}  \begin{enumerate}
 \item CMO\_INT32 は MLTKINT (多倍長整数型).  \item CMO\_INT32 は MLTKINT (多倍長整数型).
 \item CMO\_STRING は MLTKSTR (文字列型).  \item CMO\_STRING は MLTKSTR (文字列型).
   \item CMO\_LIST は MLTKFUNC (関数型).
 \item その他のタイプの CMO は ToExpression[文字列] として送る.  \item その他のタイプの CMO は ToExpression[文字列] として送る.
 \end{enumerate}  \end{enumerate}
   
Line 81  int main()
Line 109  int main()
 \]  \]
 という評価が行われ, 文字列データから整数が復元される.  という評価が行われ, 文字列データから整数が復元される.
   
 逆に, Mathematica から送られた整数データは,  逆に, Mathematica から送られた整数データは, マシン整数の範囲内であれば,
 マシン整数の範囲内であれば, int として  int として取得可能(MLGetInteger を使う)であるが, 受け取る前に int に収ま
 取得可能(MLGetInteger を使う)であるが,  るか否かを知ることはできない. int に収まらない場合、データが切り捨てられ
 受け取る前に int に収まるか否かを知ることはできない.  てしまうので注意が必要である.  また, 直接 CMO\_ZZ として取得することも不
 また, 直接 CMO\_ZZ として取得することも不可能である.  可能である.  (MathLink 上でどのような形式でデータ交換されているのかの情
 (MathLink 上でどのような形式でデータ交換されているのかの  報は手元にある資料からは得られなかった)
 情報は手元にある資料からは得られなかった)  
   
 しかしながら, たとえ Mathematica 側から整数データが送られていたとしても,  しかしながら, たとえ Mathematica 側から整数データが送られていたとしても,
 そのデータを文字列に変換して受け取ることは MathLink の機構上可能である.  そのデータを文字列に変換して受け取ることは MathLink の機構上可能である.
Line 110  int main()
Line 137  int main()
 }  }
 \end{verbatim}  \end{verbatim}
   
 つまり、Mathematica から整数データを文字列として受け取り、  つまり、Mathematica から整数データを文字列として受け取り、その文字列を
 その文字列を OX サーバ側で CMO\_ZZ に直している。  OX サーバ側で CMO\_ZZ に直している。
   
 基本的に MathLink では全てのデータを文字列で受け取るしか方法はない。どの  基本的に MathLink では全てのデータを文字列で受け取るしか方法はない。どの
 ような種類のデータであるかは受け取る前に知ることはできる。データの型は、  ような種類のデータであるかは受け取る前に知ることはできる。データの型は、
Line 125  Mathematica から受け取ったデータは基本的に CMO\_STRING
Line 152  Mathematica から受け取ったデータは基本的に CMO\_STRING
 まだ、実装していないが、多項式(CMO\_???\_PORINOMIAL)の扱いが難しい。  まだ、実装していないが、多項式(CMO\_???\_PORINOMIAL)の扱いが難しい。
   
 \section{個々のスタックマシン命令の実装}  \section{個々のスタックマシン命令の実装}
 現在、実装しているのは  
   現在、実装されているのは
 SM\_popCMO, SM\_popString, SM\_pops, SM\_executeFunction,  SM\_popCMO, SM\_popString, SM\_pops, SM\_executeFunction,
 SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMathcap(受け取るだけ  SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMathcap(受け取るだけ
 で何もしない)である。  で何もしない)である。
   
 \section{Mathematica を OX のクライアントに}  \section{Mathematica を OX のクライアントに}
   
   OpenXM クライアントは Mathematica の外部プログラム({\tt math2ox}) の形で
   実現されている。すなわち、Mathematica と math2ox の間は MathLink プロト
   コルで、math2ox と OpenXM サーバの間は OpenXM プロトコルで通信し、
   math2ox が適切に情報を変換しながらやりとりする。その意味で wrapper の一
   種であるとも言える。
   
   利用するには、最初に
 \begin{verbatim}  \begin{verbatim}
 In[1]:= Install["math2ox"]  In[1]:= Install["math2ox"]
 \end{verbatim}  \end{verbatim}
 とすると、外部プログラムをロードし、  として、math2ox をロードしなければならない。
   Mathematica に新たに定義されるコマンドは、
   {\tt OxStart[s\_String], OxStartInsecure[s\_String, p\_Integer, q\_Integer],
   OxExecuteString[s\_String], OxParse[s\_String], OxGet[],
   OxPopCMO[], OxPopString[], OxClose[], OxReset[]}
   の9つである。
   
   math2ox をロードしたら、
 \begin{verbatim}  \begin{verbatim}
 In[2] := OxStart["ox_sm1"]  In[2] := OxStart["ox_sm1"]
 \end{verbatim}  \end{verbatim}
 によって OpenXM サーバに接続する。接続先は ox\_sm1 である。  によって OpenXM サーバに接続する。この場合の接続先は ox\_sm1 である。
   もちろん
   \begin{verbatim}
   In[2] := OxStartInsecure["water.s.kanazawa-u.ac.jp", 1300, 1400]
   \end{verbatim}
   のようにして、insecure モードで接続してもよい。ただしこの場合は、
   あらかじめ {\tt Run[]} 等で、OpenXM サーバを起動しておかなければならない。
   
 接続が成功したら適当にデータを送ってみよう。  接続が成功したらデータを送ってみよう。
 利用できるコマンドは  
 {\tt OxStart[s\_String], OxExecute[s\_String], OxPopString[], OxClose[], OxReset[]}  
 の五つである。計算が終わったら、  
 \begin{verbatim}  \begin{verbatim}
 In[3] := OxClose[]  In[3] := OxParse["(CMO_LIST, (CMO_STRING, "hello world"), (CMO_ZERO))"]
 \end{verbatim}  \end{verbatim}
   のように CMO expression を指定することによって、
   任意の CMO を送信できる。
   正しくない CMO の場合には、何も送信されない。
   また、CMO ではなく、
   \begin{verbatim}
   In[4] := OxParse["(OX_COMMAND, (SM_popCMO))"]
   \end{verbatim}
   などとして、OX メッセージの形で記述することもできる。
   注意しなければならないのは、SM コマンドの場合、OX スタックマシンから
   OX メッセージが送られてくる場合があるが、OxParse[] を用いた場合、
   このメッセージは自動的には受信しない(現在の仕様では)。したがって明示的に
   受信する必要がある。そのためには
   \begin{verbatim}
   In[5] := OxGet[]
   \end{verbatim}
   とするだけでよい。返ってくるオブジェクトは CMO に対応するものである。
   \begin{verbatim}
   In[6] := OxPopCMO[]
   \end{verbatim}
   を用いる場合にはもちろん {\tt OxGet[]} を呼び出す必要はない。
   
   計算を実行するには {\tt OxExecute[]}
   (SM\_executeStringByLocalParser) か、適切な OX メッセージを送信すること。
   
   計算が終わったら、
   \begin{verbatim}
   In[7] := OxClose[]
   \end{verbatim}
 とすると、接続が終了する。  とすると、接続が終了する。
   
 \appendix  \appendix
Line 177  typedef unsigned long int mp_limb_t;  
Line 249  typedef unsigned long int mp_limb_t;  
 \begin{thebibliography}{99}  \begin{thebibliography}{99}
 \bibitem{Openxxx-1998}  \bibitem{Openxxx-1998}
 野呂正行, 高山信毅.  野呂正行, 高山信毅.
 {Open xxx の設計と実装, xxx = asir,kan}, 1998/10/11  {Open XM の設計と実装 --- Open message eXchange protocol for Mathematics},
   1999/11/22
 \bibitem{Ohara-Takayama-Noro-1999}  \bibitem{Ohara-Takayama-Noro-1999}
 小原功任, 高山信毅, 野呂正行.  小原功任, 高山信毅, 野呂正行.
 {Open asir 入門}.  {Open asir 入門}, 1999, 数式処理, Vol 7, No 2, 2--17. (ISBN4-87243-086-7, SEG 出版, Tokyo).
 \bibitem{Wolfram-1992}  \bibitem{Wolfram-1992}
 ウルフラム.  ウルフラム.
 {Mathematica (日本語版)},  {Mathematica (日本語版)},

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.7

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>