%% $OpenXM: OpenXM/doc/OpenXM-specs/introduction.tex,v 1.5 2020/03/14 01:21:56 takayama Exp $
//&jp \section{はじめに}
//&eg \section{Introduction}

/*&jp
OpenXM は, おなじタイプまたは異なるタイプの数学プロセス間の
メッセージのやりとりの規約である.
開発の動機は, 手作り(または研究的な)数学ソフトの相互乗り入れの実現
および分散計算の実装が
第一であったが, もちろん数学ソフト間だけでなく, ワープロソフトや,
インタラクティブな数学本,
さらには数学デジタル博物館用のソフトがこの規約に従い, 
数学ソフトを呼び出すことなどにも利用できる.
当面の目標は OpenXM 数学ソフトパッケージを作ることである.
これはさまざまな数学ソフトを一つのパッケージとして
簡単に好きな言語より使えるようにするプロジェクトである.
現在 OpenXM.tar.gz には,
asir, sm1, phc, gnuplot, tigers が入っている.
OpenXM 数学ソフトパッケージプロジェクトに
参加できるように CMO の
規約を拡張していくための規約も定めるものとする.
*/
/*&eg
OpenXM is a free, or Open Source, infrastructure for mathematical
software systems.
It provides methods and protocols
for interactive distributed computation and
for integrating mathematical software systems.
OpenXM package is a set of software systems that support OpenXM protocols.
It is currently a collection of software systems
{\tt Risa/Asir} \cite{asir}, {\tt Kan/sm1} \cite{kan}, {\tt PHC} pack \cite{phc}
, {\tt GNUPLOT},
{\tt Mathematica} interface, and
{\tt OpenMath}/XML \cite{openmath} translator.
*/

/*&jp
現在専門的な数学ソフトが多数開発
されているが, 次世代の数学ソフトは他のソフトよりサブルーチンとして
呼び出せる機能をもつべきである.
このように協調機能にすぐれたプログラムを書くための設計の
ガイドライン, プログラム作法のようなものを提案するのも, 
このプロジェクトの目的である.
このようなガイドラインにそってプログラムすることにより,
数学アルゴリズム自体に集中できる環境が実現できることを
期待している.

設計の方針として, (1) 単純 (2) 拡張性 (3) 実装の簡便さ (4) 実用性(5) 
高信頼性(robustness),に重きをおいている.  

OpenXM はなにも考えずに簡単に接続できるシステムを作ろう,というまで野心
的ではない.  数学的な object は一筋縄ではいかないし, 完全な統一規格を
つくるというのは気が遠くなる仕事である. そのかわり, 今よりすこしだけこ
ういったデータ交換や分散システム構築の仕事を楽にしたいというのがささや
かな第1目標である.  また, Mathematica や Maple といった巨大な統合ソフ
トを, Free Mathematical Software としてわれわれ自身の手でつくっていく
ための基礎でもある.
*/

/*&eg
We have been profited from increasing number
of mathematical software systems.
These are usually ``expert'' systems in one area of mathematics
such as ideals, groups, numbers, polytopes, and so on.
They have their own interfaces and data formats,
which are fine for intensive users of these systems.
However, a unified system will be more convenient
for users who want to explore a new area of mathematics with these
software systems or users who need these systems only occasionally.
It is also wonderful for developpers to have various software components
that can be used from the target system.
 
OpenXM provides not only data representation and communication protocols
but also programming guidelines to develop cooperative applications.
One will be able to concentrate on
developing mathematical algorithms with such guidelines.
Our design goals are (1) simpleness, (2) extensibility, (3) 
easiness of implementation, (4) practicality, and (5) robustness.

We believe that an open integrated system is a future of mathematical
software systems.  
However, it might be  a dream without realizability.
We want to build a prototype of such an open system by using existing
standards, technologies and several mathematical software systems.  
We want to see how far we can go with this approach.
*/

/*&jp
数学的な Object をどのように表現するのか, どう伝えるのかを考えることは
決してつまらない問題ではない.
このような問題は, 新しい数学記号を創造する問題と似ているかもしれない.
我々は, 数字を $0$ を含んだ10進数で表記し,
微分を $dx$ と書き, 写像を $ \longrightarrow $ であらわす.
これらの記号法からどれだけ多くの利益を得ているか, 思いをはせて欲しい.
*/
/*&eg
It is not an obvious problem to consider how mathematical objects
are represented and communicated.
It may be similar to trying to create new mathematical symbols.
We have the decimal notation to represent numbers, the symbol $dx$
to represent a differential, and $ \longrightarrow $ to represent
a mapping. One should imagine how we are benefited from these notations.
*/

%% 変数名をどうするか悩むのにも似てる.

/*&jp
OpenXM は論理的には
OX 層, SM 層, CMO 層にわかれる.
OX Object は, データ, コマンドに大別できる.
データはこのプロジェクトのオリジナルのデータ形式
である CMO (Common Mathematical Object Format) で
送出してもよいし, MP や Open MATH などの形式を用いてもよい.
SM 層は (スタックマシン)サーバを制御するための命令の
あつまりであり, サーバは非同期的に動作させることが可能である.
柔軟性が高いので, IMC などのリモートプロシージャコール系の
プロトコルもエミュレートできる.
OX メッセージは DTD を用いて定義可能であり, XML を用いて
記述できる.
*/
/*&eg 
In OpenXM, communication is an exchange of messages. 
The messages are classified
into three types: DATA, COMMAND, and SPECIAL.  They are called OX
(OpenXM) messages.  Among the three types, {\it OX data messages} wrap
mathematical data.  We use standards of mathematical data formats such
as OpenMath and MP as well as our own data format {\it CMO} ({\it
Common Mathematical Object format}).  Servers, which provide services
to other processes, are stack machines.  The stack machine is called
the {\it OX stack machine}.  Existing mathematical software systems are
wrapped with this stack machine.  OX stack machines work in the
asynchronous mode like X servers. 
OpenXM servers try to be as quiet as possible.
OpenXM server does not send messages to the client unless it is requested
to send them. 

Our stackmachine architecutre can be used as the lowest level layer
to implement other protocols.
Emulating RPC or constructing a web server like MCP
\cite{iamc} on our asynchronous OX stack machines
are possible.

Our datatype definition is compliant to XML architecture.
OX messages can be defined by DTD and can be expressed by XML.
We call it OpenXM/XML.
*/
/*&jp
OpenXM に準拠したシステム xxx を, open xxx とよぶ.
たとえば, OpenXM 対応の asir は open asir であり,
OpenXM 対応の kan/sm1 は open sm1 である.
*/
/*&eg
A system xxx complient to the OpenXM protocol is called open xxx.
For example Asir complient to the OpenXM protocol is called open Asir, and
kan/sm1 complient to the OpenXM protocol is called open sm1.
*/

/*&jp
OpenXM は, データ型をきめている部分と,
共通スタック言語を定めている部分にわかれる.
よいたとえかどうか自信がないが,
OpenXM を定義する作業は, unicode を定める作業に似ている部分もある.
たとえば, 漢字は東アジアで共通に使用されているが, 国や地方単位で
形がすこしづつ違うものがある.
unicode では, 似た漢字を同じ code におしこんだ.
OpenXM でも, システム毎にことなるが似ているデータ型を
同じ型としてあつかう.
たとえば, ``分散多項式'' の意味は, asir と kan/sm1 で異なるが,
OpenXM では, 同じ型としてあつかわれる.
ただしこれでは不十分な場合があるので,システム固有のデータ型も扱える
ような仕組みも用意している.
(さっきのたとえでは, こちらは, unicode でなく, ISO の文字符号系に対応するか.)
共通スタック言語は, ごく小数の共通コマンドをのぞき
基本的にシステム毎に固有の関数により実行される.
これにより, open xxx のサーバの実装およびマニュアルの記述は
いちじるしく簡単になる.
システム毎に固有の関数を共通の関数名にするプロジェクトも
考えているが, 共通の関数名は OpenMath のものを利用する予定である.
*/
/*&eg
% not translated yet.
*/



