%% $OpenXM: OpenXM/doc/OpenXM-specs/project.tex,v 1.5 2020/03/14 01:21:56 takayama Exp $
//&jp \section{現在検討中の機能}
//&eg \section{Projects in work in progress}

//&jp \subsection{ OX DATA with Length の構造 }
//&eg \subsection{ OX DATA with Length }

/*&jp
Digital signature 付の {\tt OX\_DATA} は
ヘッダ {\tt OX\_DATA\_WITH\_LENGTH }で, はじまり, CMO がきて,
それから, 終りのマークおよびデジタル署名がくる.
この形のデータを {\it secured OX DATA} と呼ぶ.
*/
/*&eg
{\tt OX\_DATA\_WITH\_LENGTH } is the OX tag for 
OX data message with a digital signature.
It is followed by the serial number, CMO, an end mark and a digital signature.
This type of OX data message is called {\it secured OX DATA}.
*/

\begin{verbatim}
#define OX_SECURED_DATA               521
\end{verbatim}

\noindent
\begin{tabular}{|c|c|c|c|c|}  \hline
{\tt int32 OX\_DATA\_WITH\_LENGTH} & {\tt int32} {\rm serial} 
& {\tt int32} {\rm size}
& {\sl CMObject} {\rm o} & {\it tail} \\
\hline 
\end{tabular}

//&jp {\tt size} フィールドに 値 -1 が入っている場合この情報を無視する.
//&eg If {\tt size} is equal to -1, then it is ignored.

//&jp {\it tail } は次のように定義する.
//&eg {\it tail } is defined as follows.
\\ \noindent
\begin{tabular}{|c|c|c|}  \hline
{\tt int32 CMO\_START\_SIGNATURE} & {\tt int32} {\rm size}
& {\it signature} \\
\hline 
\end{tabular}

/*&jp
ここで, {\tt size} はバイト列 {\it signature} 部の長さ.
{\it signature} は, Hash 関数を用いた, {\it CMO data}
にたいする, デジタル署名をいれ, 不正な serialized object 
を検出する.
Tail の {\tt size} フィールドが 0 の場合, デジタル署名部はない.
*/
/*&eg
Here {\tt size} is the length of {\it signature}.
{\it signature} is a digital signature of {\it CMO data} by
a Hash function and is used to detect invalid serialized objects.
If {\tt size} of Tail is equal to 0, then it has no digital signature.
*/

//&jp クライアント, サーバの実装には次の4つの選択がある.
//&eg Currently there are four modes of communicating data.
/*&jp
\begin{enumerate}
\item {\tt OX\_DATA} のみを用いて CMObject を送る (mathcap 付).
\item {\tt OX\_SECURED\_DATA} のみを用いて CMObject を送る.
\item {\tt OX\_DATA} および
{\tt OX\_SECURED\_DATA} を混在して
使用できるようにする.
\item {\tt OX\_DATA} のみを用いてかつ mathcap も用いない(一番高速).
\end{enumerate} 
*/
/*&eg
\begin{enumerate}
\item Only {\tt OX\_DATA} is used with checking by mathcap.
\item Only {\tt OX\_SECURED\_DATA} is used.
\item Both {\tt OX\_DATA} and {\tt OX\_SECURED\_DATA} can be used.
\item Only {\tt OX\_DATA} is used without checking by mathcap.
\end{enumerate} 
*/
/*&jp
1 の短所は, mathcap の実装が不十分で,理解できない CMObject をうけとる
と,以後の CMObject は理解できなくなる.  1 の長所は, 長さフィールドの計
算をおこなわないため, データを送り出す側に負担がかからないことである.
2 の長所は, mathcap の実装が不十分で,理解できない CMObject をうけとっ
ても,長さフィールドを用いて, 通信回線のダウンを防ぐことができる.  2 の
短所は, 長さフィールドの計算をおこなうため, データを送り出す側に負担が
かかることである.
*/
/*&eg
Suppose that the mathcap handling is incomplete and an application
has received unknown CMObject.
In mode 1, the application cannot detect the end of the CMObject
and it will not be able to understand the subsequent messages.
In mode 2, the application can detect the end of the unknown CMObject
from the size information. However, in mode 2, additional cost is
required on the sender to compute the total length of CMObjects.
*/

//&jp 現在のすべてのサンプルサーバは, 1, 4 のみを実装している.
//&teg Currently all sample servers implements only 1 and 4.

/*&jp
mathcap の交換はセッションの開始時点で必須という訳ではないことに注意さ
れたい.  たとえば,モード 4 で通信して,それから, mathcap を交換して,モー
ド 1 へ移行することも可能なように実装すべきである.
*/
/*&eg
Note that the exchange of mathcaps are not necessary at the start
of a session. Any server should be implemented so that it can
change the communication mode dynamically, say, from 4 to 1.
*/

//&jp \subsection{サーバスタックマシンはローカルな拡張機能をもってよい}
//&eg \subsection{Local extension on server stack machines}

\begin{verbatim}
#define  CMO_PRIVATE   0x7fff0000  /* 2147418112 */
\end{verbatim}

/*&jp
{\tt CMO\_PRIVATE} = {\tt OX\_PRIVATE} = {\tt SM\_PRIVATE} 
よりはじまる, 0x10000 個の ID は, private 領域として予約されている.
各サーバの開発者間で表現方法につきまだ合意がないような, CMObject, 
OX Message, SMobject を表現するために使用する.
*/
/*&eg
0x10000 ID's beginning from 
{\tt CMO\_PRIVATE} = {\tt OX\_PRIVATE} = {\tt SM\_PRIVATE} 
are reserved for private use.
They can be used to represent OX tags, CMObjects, SMobjects
which are not authorized yet.
*/


//&jp \subsection{MathLink や OpenMath などの通信規約の実装}
//&eg \subsection{Implementation of other protocols such as MathLink and OpenMath}

/*&jp
Open asir, open sm1 と Mathematica の用いている MathLink や 
Open Math (\cite{openmath})
プロトコルを変換するための
ライブラリやサーバを用意すれば, {\tt asir} や {\tt kan/sm1} の
内部構造を理解することなしに, これらに準拠したシステムと通信できる.
*/
/*&eg
If we provide a library or a server for protocol conversion
between CMO and ``foreign'' protocols such as MathLink or OpenMath,
a client conforming to such protocols can communicate with 
Asir or kan/sm1 without knowing their internal structures.
*/

//&jp \subsection{共通スタックマシン言語}
//&eg \subsection{Common operations on stack machines}

/*&jp
CMO に付随した, たとえば, Integer 32 に対する,
add, sub, mul, などの基本的な計算は {\tt SM\_executeFunction}
で全てのシステムで実行できるように検討している.
スタックマシンの制御構造についても検討している.
*/
/*&eg
Fundamental operations such as {\tt add}, {\tt sub}, {\tt mul} should be
executed on any server by {\tt SM\_executeFunction}.
Control structures on stack machines such as {\tt if} and {\tt for}
are also being considered.
*/

