(57)【要約】【課題】コンピュータ間の通信において、処理毎に通信相手先からの応答を待つことが必要な為に通信処理に時間がかかる。【解決手段】通信コード生成装置１００において、ソースプログラム解析処理部１０８が、コンピュータ間の通信に用いられる通信コードのインタフェース仕様と、通信コードの呼出し処理を実装したソースプログラムとを解析した上で通信相手先からの複数の応答を一つにまとめて受け取れる箇所を抽出し、その解析結果に基づいてユーザプログラム編集部１１１が通信相手先からの応答を減らしたユーザプログラムを生成する。また、ユーザプログラム編集部１１１が生成したユーザプログラムに対応する通信コードを関数利用通信コード編集部１１２と関数公開通信コード編集部１１３とにより生成する。そして、通信相手先からの応答を減らすことでコンピュータ間の通信性能を向上することが出来る。【選択図】図４
2012128581.tif 000002
【特許請求の範囲】
【請求項１】
関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成装置において、
関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部と、
前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部と、
前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部と、
前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Ａと、
関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Ａと、
関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Ａと、
前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部と、
前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されている場合に、前記第１の関数の呼び出し命令を、第１の関数名と第１の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第１の呼び出し命令に書き換え、前記第２の関数の呼び出し命令を、第２の関数名と前記第１の関数の計算結果情報と第２の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第２の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Ａに記憶するユーザプログラム編集部と、
前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第１の呼び出し命令を受け取り前記第１の関数名を含む第１の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第２の呼び出し命令を受け取り前記第２の関数名を含む第２の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Ａに記憶する関数利用通信コード編集部と、
前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第１の関数の計算依頼情報と前記第２の関数の計算依頼情報とを受信した場合に、前記第１の関数名に基づいて第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、前記第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、前記第１の関数の計算依頼情報とともに前記第１の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第１の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第２の関数の計算依頼情報とともに前記第２の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Ａに記憶する関数公開通信コード編集部と
を備えたことを特徴とする通信コード生成装置。
【請求項２】
前記ソースプログラム解析処理部は、ソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した３つ以上の呼び出し命令である場合に、前記互いに独立した３つ以上の呼び出し命令の内、最後に呼び出される呼び出し命令を前記第２の関数の呼び出し命令と判断し、その他の呼び出し命令を前記第１の関数の呼び出し命令と判断することを特徴とした請求項１記載の通信コード生成装置。
【請求項３】
前記通信コード生成装置は、更に
前記ユーザプログラム編集部が編集したソースプログラムの編集内容と、前記関数利用通信コード編集部が編集した関数利用通信スタブコードの編集内容と、前記関数公開通信コード編集部が編集した関数公開通信スタブコードの編集内容とを記憶装置に記憶する通信コード／ユーザプログラム編集ログ記憶部と、
前記通信コード／ユーザプログラム編集ログ記憶部が記憶したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを抽出する通信コード／ユーザプログラム編集ログ抽出部と、
前記通信コード／ユーザプログラム編集ログ抽出部が抽出したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを表示する通信コード／ユーザプログラム編集ログ表示部と
を備えたことを特徴とする請求項１又は２記載の通信コード生成装置。
【請求項４】
前記通信コード生成装置は、更に
前記通信コード／ユーザプログラム編集ログ表示部が表示するソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とから、編集内容を復元する箇所を表す復元情報を入力する入力部と、
前記入力部が入力した復元情報が表す編集内容を復元する箇所の編集内容を前記通信コード／ユーザプログラム編集ログ記憶部から抽出する復元対象編集ログ抽出部と、
前記復元対象編集ログ抽出部が抽出した編集内容に基づいてソースプログラムの編集内容を復元するユーザプログラム復元部と
を備えたことを特徴とする請求項３記載の通信コード生成装置。
【請求項５】
前記通信コード生成装置は、更に
前記関数利用コンピュータに送信される計算結果情報のデータの大きさを調べる転送データチェック部と、
前記関数利用コンピュータに送信される計算結果情報のデータの大きさの閾値を記憶装置に記憶する転送データサイズ閾値記憶部と、
前記転送データチェック部が調べた計算結果情報のデータの大きさが、前記転送データサイズ閾値記憶部が記憶した計算結果情報のデータの大きさの閾値よりも大きい場合に、前記関数利用コンピュータに送信される計算結果情報の送信方法を変更するように前記ユーザプログラムを変更するユーザプログラム通信方式変更部と
を備えたことを特徴とする請求項１〜４いずれか記載の通信コード生成装置。
【請求項６】
関数の計算依頼情報を受信し関数を計算して計算結果情報を送信する関数公開コンピュータに対して計算依頼情報を送信して計算結果情報を受信する関数利用コンピュータにおいて、
第１の関数名と、第１の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第１の呼び出し命令と、第２の関数名と、保留されている前記第１の関数の計算結果情報と第２の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第２の呼び出し命令とを有するユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Ｂと、
前記ユーザプログラムから第１の呼び出し命令を受け取り第１の関数名を含む第１の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報の受信を待たずに前記ユーザプログラムから前記第２の呼び出し命令を受け取り第２の関数名を含む第２の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開コンピュータから受信する処理を中央処理装置に行わせる命令が記述された関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Ｂと、
前記関数公開コンピュータと通信を行う関数利用通信部と、
前記ユーザプログラム記憶部Ｂが記憶するユーザプログラムを読み込み、前記ユーザプログラムが有する前記第１の呼び出し命令と前記第２の呼び出し命令とを実行し、前記第１の呼び出し命令と前記第２の呼び出し命令とに基づいて前記関数利用通信コード記憶部Ｂが記憶する関数利用通信コードを実行して、前記関数利用通信部により前記第１の関数の計算依頼情報と前記第２の関数の計算依頼情報とを前記関数公開コンピュータに送信し、前記関数利用通信部により前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開コンピュータから受信するユーザプログラム実行部と
を備えたことを特徴とする関数利用コンピュータ。
【請求項７】
関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータから関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータにおいて、
第１の関数を計算する第１の関数コードと、第２の関数を計算する第２の関数コードとを記憶装置に記憶する関数記憶部と、
関数の計算結果情報を保留する計算結果情報保留部と、
前記関数利用コンピュータと通信を行う関数公開通信部と、
前記関数公開通信部が関数利用コンピュータから第１の関数の計算依頼情報と第２の関数の計算依頼情報とを受信して、第１の関数名に基づいて前記関数記憶部が記憶する第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、第１の関数の計算依頼情報とともに計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第１の関数の計算結果情報を前記計算結果情報保留部に記憶して第１の関数の計算結果情報の送信を保留し、前記関数公開通信部が前記関数利用コンピュータから第２の関数の計算依頼情報とともに計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に前記計算結果情報保留部に保留していた前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開通信部により前記関数利用コンピュータへ送信する処理を中央処理装置に行わせる命令が記述された関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Ｂと、
前記関数公開通信部により受信した前記第１の関数の計算依頼情報と前記第２の関数の計算依頼情報とに基づき、前記関数公開通信コード記憶部Ｂが記憶する関数公開通信コードを実行し、前記関数記憶部が記憶する第１の関数コードによる第１の関数の計算と第２の関数コードによる第２の関数の計算とを行い第１の関数の計算結果情報と第２の関数の計算結果情報とを得て第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開通信コードに伝達する関数計算実行部と、
を備えたことを特徴とする関数公開コンピュータ。
【請求項８】
前記請求項１記載の通信コード生成装置と前記請求項６記載の関数利用コンピュータと前記請求項７記載の関数公開コンピュータとを備えることを特徴としたコンピュータシステム。
【請求項９】
前記ユーザプログラムは前記関数利用コンピュータが備えるオペレーティングシステムである関数利用オペレーティングシステムにより動作し、前記関数コードは関数公開コンピュータが備えるオペレーティングシステムである関数公開オペレーティングシステムにより動作し、前記関数利用オペレーティングシステムと前記関数公開オペレーティングシステムとが異なるオペレーティングシステムであることを特徴とする前記請求項８記載のコンピュータシステム。
【請求項１０】
関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成方法において、
ソースプログラム記憶部が関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶ステップと、
関数利用通信スタブコード記憶部、前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶ステップと、
関数公開通信スタブコード記憶部が、前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶ステップと、
ユーザプログラム記憶部Ａが、前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶ステップと、
関数利用通信コード記憶部Ａが、関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶ステップと、
関数公開通信コード記憶部Ａが、関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶ステップと、
ソースプログラム解析処理部が、前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理ステップと、
ユーザプログラム編集部が、前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されている場合に、前記第１の関数の呼び出し命令を、第１の関数名と第１の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第１の呼び出し命令に書き換え、前記第２の関数の呼び出し命令を、第２の関数名と前記第１の関数の計算結果情報と第２の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第２の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Ａに記憶するユーザプログラム編集ステップと、
関数利用通信コード編集部が、前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第１の呼び出し命令を受け取り前記第１の関数名を含む第１の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第２の呼び出し命令を受け取り前記第２の関数名を含む第２の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Ａに記憶する関数利用通信コード編集ステップと、
関数公開通信コード編集部が、前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第１の関数の計算依頼情報と前記第２の関数の計算依頼情報とを受信した場合に、前記第１の関数名に基づいて第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、前記第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、前記第１の関数の計算依頼情報とともに前記第１の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第１の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第２の関数の計算依頼情報とともに前記第２の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Ａに記憶する関数公開通信コード編集ステップと
を備えたことを特徴とする通信コード生成方法。
【請求項１１】
コンピュータを、請求項１〜５いずれか記載の通信コード生成装置として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、互いに通信を行う関数利用コンピュータおよび関数公開コンピュータ、および関数利用コンピュータと関数公開コンピュータとの通信に用いられる通信コードを生成する通信コード生成装置、および通信コード生成方法、およびプログラムに関する。
【背景技術】
【０００２】
一般にコンピュータは、オペレーティングシステム（以下ＯＳと称する）を備え、ＯＳを用いて様々な動作を行う。そして、例えば、複数の種類の異なるオペレーティングシステム（マルチオペレーティングシステム。以下、マルチＯＳと称する）を備える組込みシステムや、クライアント／サーバシステムなどのコンピュータシステムは、種類の異なるオペレーティングシステム間の通信を行う。（クライアント／サーバ間の通信においては、主にメッセージ通信を行う）。コンピュータシステムは、異なるＯＳ間の通信を、インタフェース仕様やデータ長といった定義情報に基づいて生成された通信コードをユーザプログラム内から呼び出すことで実現している。（定義情報とは、例えばサーバ側にてクライアント向けに公開している関数のインタフェース仕様をＩＤＬ（アイディーエル、インタフェース記述言語）にて定義された情報である）。
ここで、通信コードとは、ユーザプログラムを作成するユーザが種類の異なるＯＳ間の通信仕様（手段や手順）を理解しなくても種類の異なるＯＳ間の通信の処理を実現出来るようにしたプログラムである。そして、通信コードとは、異なるＯＳ間の通信の処理を実現出来るように所定の関数のインタフェース定義から、コンパイラにより生成したＯＳ間の通信の処理を実装したプログラムのことである。
また以下、所定の関数を公開するコンピュータを関数公開コンピュータ、関数公開コンピュータが公開した関数を利用するコンピュータを関数利用コンピュータと称する。関数公開コンピュータは、例えばサーバであり、関数利用コンピュータは例えばクライアント端末やユーザ端末である。
また、マルチＯＳにおいて、関数公開コンピュータが備えるオペレーティングシステムを関数公開オペレーティングシステム（以下、関数公開ＯＳと称する）、関数利用コンピュータが備えるオペレーティングシステムを関数利用オペレーティングシステム（以下、関数利用ＯＳと称する）。
また、以下の説明において、関数公開コンピュータが備える通信コードを関数公開通信コード、関数利用コンピュータが備える通信コードを関数利用通信コードと表記するが、特にコンピュータの区別が必要無い場合は、前述と同様に単に「通信コード」と表記する。同様に後述する「通信スタブコード」についても、関数公開コンピュータが備える通信スタブコードを関数公開通信スタブコード、関数利用コンピュータが備える通信スタブコードを関数利用通信スタブコードと表記するが、特にコンピュータの区別が必要無い場合は、単に「通信スタブコード」と表記する。なお、ここで「通信スタブコード」とは「通信コード」を生成するにあたり、基となる暫定的な通信コードを意味する。
また、通信コード生成装置が生成する「通信コード」と「通信スタブコード」とは、例えばＣ言語などのプログラム言語で記述されたソースコードである。（ここで、プログラム言語は、Ｃ言語に限定されるものでは無い）。そして、ユーザプログラムが実行された際に、関数公開コンピュータおよび関数利用コンピュータが使用する「通信コード」と「通信スタブコード」とは、コンパイラによりコンパイルされたオブジェクトコードである。（「通信コードの実行コード」もしくは「通信スタブコードの実行コード」である）。
【０００３】
通信コードは、所定の関数毎に生成される。そして、関数利用ＯＳ（関数利用コンピュータ）は、関数公開ＯＳ（関数公開コンピュータ）が公開した所定の関数を利用する場合に、所定の関数毎の通信コードを用いて、所定の関数の処理に用いる引数を関数公開ＯＳに送信する。そして、関数利用ＯＳは、関数公開ＯＳが所定の関数の処理を行った結果の応答の受信を所定の関数の利用毎に待機する。この為、ＯＳ間の応答（例えばメッセージの送受信）の数が多くなり、ＯＳ間の通信性能を低下させる。
ＩＤＬは、関数利用ＯＳに対して、予め関数の処理結果の応答を返す又は返さない、いずれかの処理を固定して通信コードを生成することが可能である。しかし、この場合ユーザが通信コードをユーザプログラムから呼び出す場合に、関数の処理結果の応答の有無を意識して、ユーザプログラムを作成しなければならず、ユーザの作業負荷が高くなる。また、この方法は、同じ通信コードを用いて、ユーザプログラム内のある処理では応答を必ず待つようにし、別の処理では応答を待たないようにしたい場合には、対応出来ない。
ＯＳ間の通信性能を向上させる方法としては、公開する関数の粒度を大きくすることで、関数利用ＯＳ（関数利用コンピュータ）から通信コードを呼び出す回数を減らす方法がある（例えば、特許文献１参照）。
しかし、関数利用ＯＳ（関数利用コンピュータ、クライアント）に公開する関数（通信コード）の粒度を大きくして提供する方法でも、複数の関数（通信コード）を連続して呼び出したような場合、関数利用ＯＳは、通信コード実行時に必ず関数公開ＯＳ（関数公開コンピュータ、サーバ）からの応答を待つことになる。そして、関数利用ＯＳと関数公開ＯＳとの通信処理における性能は、低下する。例えば、関数利用ＯＳ側の通信コードでは要求メッセージ生成と要求メッセージの送信、および応答メッセージの受信／解釈を行い、関数公開ＯＳ側では要求メッセージの受信／解釈と関数の実行、および応答メッセージの生成、応答メッセージの返信を毎回行っている。その為、関数利用ＯＳと関数公開ＯＳとの通信処理は、処理時間がかかる問題がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２３４５３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
この発明の実施の形態は、例えば、コンピュータ間における通信性能を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
この発明に係る通信コード生成装置は、
関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成装置において、
関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部と、
前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部と、
前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部と、
前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Ａと、
関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Ａと、
関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Ａと、
前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部と、
前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されている場合に、前記第１の関数の呼び出し命令を、第１の関数名と第１の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第１の呼び出し命令に書き換え、前記第２の関数の呼び出し命令を、第２の関数名と前記第１の関数の計算結果情報と第２の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第２の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Ａに記憶するユーザプログラム編集部と、
前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第１の呼び出し命令を受け取り前記第１の関数名を含む第１の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第２の呼び出し命令を受け取り前記第２の関数名を含む第２の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Ａに記憶する関数利用通信コード編集部と、
前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第１の関数の計算依頼情報と前記第２の関数の計算依頼情報とを受信した場合に、前記第１の関数名に基づいて第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、前記第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、前記第１の関数の計算依頼情報とともに前記第１の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第１の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第２の関数の計算依頼情報とともに前記第２の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第１の関数の計算結果情報と前記第２の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Ａに記憶する関数公開通信コード編集部と
を備えたことを特徴とする。
【発明の効果】
【０００７】
この発明に係る通信コード生成装置は、コンピュータ間における通信性能を向上させることが可能となる。特にこの発明に係る通信コード生成装置は、異なるオペレーティングシステムを備えるコンピュータ間における通信性能を向上させることが可能となる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１を示す図で、通信コード生成装置１００の外観の一例を示す図。
【図２】実施の形態１を示す図で、通信コード生成装置１００のハードウェア資源の一例を示す図。
【図３】実施の形態１を示す図で、コンピュータシステム５００の構成を示す図。
【図４】実施の形態１を示す図で、通信コード生成装置１００の構成を示す図。
【図５】実施の形態１を示す図で、関数利用コンピュータ２００の構成を示す図。
【図６】実施の形態１を示す図で、関数公開コンピュータ３００の構成を示す図。
【図７】実施の形態１を示す図で、関数利用通信スタブコードとソースプログラムを基に関数利用通信コードとユーザプログラムを作成する際の手順を示すフロー図。
【図８】実施の形態１を示す図で、インタフェース定義の例を示す図。
【図９】実施の形態１を示す図で、関数利用通信スタブコードの例を示す図。
【図１０】実施の形態１を示す図で、ソースプログラムの例を示す図。
【図１１】実施の形態１を示す図で、ソースプログラムを実行した場合の処理シーケンスを示す図。
【図１２】実施の形態１を示す図で、関数利用通信コードの例を示す図。
【図１３】実施の形態１を示す図で、ユーザプログラムの例を示す図。
【図１４】実施の形態１を示す図で、ユーザプログラムを実行した場合の処理シーケンスを示す図。
【図１５】実施の形態２を示す図で、編集ログの記録部を有する通信コード生成装置１００の構成を示す図。
【図１６】実施の形態２を示す図で、編集ログの具体例を示す図。
【図１７】実施の形態３を示す図で、編集ログの情報を利用してユーザプログラムを編集前の処理に編集（復元）するための復元部を有する通信コード生成装置１００の構成を示す図。
【図１８】実施の形態３を示す図で、ユーザが編集（復元）箇所を指定した例を示す図。
【図１９】実施の形態３を示す図で、ユーザプログラム復元部１２２が編集（復元）したユーザプログラムの例を示す図。
【図２０】実施の形態４を示す図で、転送データの受け渡し方法を変更するユーザプログラム通信方式変更部１２４と通信コード通信方式変更部１２６とを有する通信コード生成装置１００の構成を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
本実施の形態では、異なるオペレーティングシステムを備えるコンピュータ間における通信に用いられる通信性能を向上させた通信コードを生成する通信コード生成装置の例を説明する。また通信コード生成装置が生成した通信コードを用いたコンピュータシステムの例を説明する。
【００１０】
最初に、図１、図２、図３を用いて通信コード生成装置１００とコンピュータシステム５００との概要を説明する。
図１は、実施の形態１における通信コード生成装置１００の外観の一例を示す図である。
図２は、実施の形態１における通信コード生成装置１００のハードウェア資源の一例を示す図である。
図３は、コンピュータシステム５００の構成を示す図である。
【００１１】
図１において、通信コード生成装置１００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００１２】
図２において、通信コード生成装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１３】
通信ボード９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信ボード９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１４】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１５】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
なお、以上は通信コード生成装置１００について説明したが、関数利用コンピュータ２００および関数公開コンピュータ３００も通信コード生成装置１００と同様のハードウェア資源を備える。（同様である為、説明は省略する）。
【００１６】
図３において、コンピュータシステム５００は、通信コード生成装置１００と関数利用コンピュータ２００と関数公開コンピュータ３００とを備える。関数利用コンピュータ２００は、例えばクライアント／サーバシステムにおけるクライアントである。関数公開コンピュータ３００は、例えばクライアント／サーバシステムにおけるサーバである。関数利用コンピュータ２００と関数公開コンピュータ３００とは、通信コード生成装置１００が生成した通信コード及びユーザプログラムを用いて通信を行う。
また、コンピュータシステム５００において、ユーザプログラムは関数利用コンピュータ２００が備えるオペレーティングシステムである関数利用オペレーティングシステムにより動作する。また、関数コードは関数公開コンピュータ３００が備えるオペレーティングシステムである関数公開オペレーティングシステムにより動作する。そして、関数利用オペレーティングシステムと関数公開オペレーティングシステムとは異なるオペレーティングシステムであることも可能である。
なお、ここで関数コードとは、関数を計算する為のプログラムである。また、関数コードは関数公開コンピュータ３００が公開する関数毎に準備され、関数公開コンピュータ３００の記憶装置に記憶されている。（以後、関数公開コンピュータ３００が公開する関数を「公開関数」と称する）。また、関数コードは関数公開コンピュータ３００（関数公開ＯＳ）が実行可能なオブジェクトコードである。
【００１７】
次に、図４を用いて通信コード生成装置１００の構成を説明する。
図４は、通信コード生成装置１００の構成を示す図である。
入力部１０１は、ユーザがマウスやキーボード等を用いて既に定義済みであるインタフェース定義から通信コードを生成したい関数の選択やソースプログラム、ユーザプログラムの解析などを指示するためのもの情報を入力するである。
ここで、ソースプログラムを基に後述のユーザプログラム編集部１１１が編集を施したプログラムを「ユーザプログラム」と称し、ユーザプログラム編集部１１１が編集を施す以前のプログラムを「ソースプログラム」と称する。また、通信コード生成装置１００（ユーザプログラム編集部１１１）が編集を行う「ユーザプログラム」と「ソースプログラム」とは、例えばＣ言語などプログラム言語で記述されたソースコードである。（ここで、プログラム言語はＣ言語に限定されるものでは無い）。そして、関数利用コンピュータが実行する「ユーザプログラム」とは、コンパイラによりコンパイルされたオブジェクトコードである。（「ユーザプログラムの実行コード」もしくは「ソースプログラムの実行コード」である）。
インタフェース定義格納部１０２は、関数利用ＯＳに対して公開している関数公開ＯＳ側の関数のインタフェース仕様（戻り値や引数のデータ型、引数の入出力タイプなど）を定義したインタフェース定義を管理する。
インタフェース定義抽出部１０３は、インタフェース定義格納部１０２に格納されているインタフェース定義（関数のリスト）を抽出する。
インタフェース定義一覧表示部１０４は、インタフェース定義抽出部１０３で抽出したインタフェース定義を一覧表示する。そして、ユーザは、インタフェース定義一覧表示部１０４に表示されたインタフェース定義から通信コードを生成したい関数をユーザが入力部１０１を用いて選択する。
通信コード自動生成処理部１０５は、インタフェース定義格納部１０２に記憶された関数のインタフェース仕様のうちユーザに選択された関数のインタフェース仕様に基づいて関数利用ＯＳで利用可能な関数利用通信スタブコードと関数公開ＯＳで利用可能な関数公開通信スタブコードとを自動生成する。
関数利用通信スタブコード記憶部１０９は、通信コード自動生成処理部１０５が生成した関数利用通信スタブコードを記憶する。
関数公開通信スタブコード記憶部１１０は、通信コード自動生成処理部１０５が生成した関数公開通信スタブコードを記憶する。
ソースプログラム解析実行指示部１０６は、通信コード自動生成処理部１０５にて自動生成した通信スタブコード（関数利用通信スタブコード）を実装したソースプログラムの解析を指示する。
ソースプログラム記憶部１１７は、通信スタブコード（関数利用通信スタブコード）の呼び出し処理を実装したソースプログラムを記憶する。（ソースプログラムは、例えばユーザによって予め作成されている）。
ソースプログラム読込み処理部１０７は、ソースプログラム解析実行指示部１０６からのソースプログラムの解析要求指示に従い、ソースプログラムの読み込みをソースプログラム記憶部１１７から行う。ここで、ソースプログラムは、入力部１０１を用いて指定された通信スタブコード（関数利用通信スタブコード）の呼び出し処理を実装したものである。
ソースプログラム解析処理部１０８は、ソースプログラム読込み処理部１０７にて読み込まれたソースプログラム内で呼び出されている通信スタブコード（関数利用通信スタブコード）に対してインタフェース定義抽出部１０３より抽出したインタフェース定義を基にソースプログラムを解析する。（解析内容の詳細は後述する）。
関数利用通信コード編集部１１２は、ソースプログラム解析処理部１０８による解析結果を基に、通信コード自動生成処理部１０５にて自動生成された関数利用通信スタブコードを、関数利用通信コードとして通信性能を向上するように編集する。（編集内容の詳細は後述する）。
関数公開通信コード編集部１１３は、ソースプログラム解析処理部１０８による解析結果を基に、通信コード自動生成処理部１０５にて自動生成された関数公開通信スタブコードを、関数公開通信コードとして通信性能を向上するように編集する。（編集内容の詳細は後述する）。
関数利用通信コード記憶部Ａ１１４は、関数利用通信コード編集部１１２で編集された関数利用通信コードを記憶する。
関数公開通信コード記憶部Ａ１１５は、関数公開通信コード編集部１１３で編集された関数公開通信コードを記憶する。
ユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８による解析結果と関数利用通信コード編集部１１２にて編集された関数利用通信コードを基に、通信性能を向上させる為にソースプログラムの関数利用通信スタブコードを呼び出す箇所を編集する。そして、ユーザプログラム編集部１１１は、編集したソースプログラムをユーザプログラムとして生成する。（ユーザプログラム編集部１１１が編集したソースプログラムをユーザプログラムと称する）。
ユーザプログラム記憶部Ａ１１６は、ユーザプログラム編集部１１１が生成（編集）したユーザプログラムを記憶する。
【００１８】
ここで、通信コード生成装置１００の概要を述べる。
通信コード生成装置１００は、関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータ２００で実行されるユーザプログラムと関数利用通信コードと、関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータ２００に送信する関数公開コンピュータ３００で実行される関数公開通信コードとを生成する。
そして、通信コード生成装置１００は、関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部１１７を備える。
そして、通信コード生成装置１００は、呼び出し命令を受け取り関数の計算依頼情報を生成して関数公開コンピュータ３００に計算依頼情報を送信して関数を計算した計算結果情報を関数公開コンピュータ３００から受信する処理を関数利用コンピュータ２００に行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部１０９を備える。
そして、通信コード生成装置１００は、関数利用コンピュータ２００から関数の計算依頼情報を受信し、関数の計算を実行させ関数を計算した計算結果情報を関数利用コンピュータ２００へ送信する処理を関数公開コンピュータ３００に行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部１１０を備える。
そして、通信コード生成装置１００は、ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Ａ１１６と、関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Ａ１１４と、関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Ａ１１５とを備える。
そして、通信コード生成装置１００は、ソースプログラム記憶部１１７に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部１０８を備える。
そして、通信コード生成装置１００は、ソースプログラム解析処理部１０８が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第１の関数の呼び出し命令と第２の関数の呼び出し命令とで記述されている場合に、第１の関数の呼び出し命令を、第１の関数名と第１の関数の計算結果情報の送信の保留を関数公開コンピュータ３００に対して指示する保留識別符号とを含む第１の呼び出し命令に書き換え、第２の関数の呼び出し命令を、第２の関数名と第１の関数の計算結果情報と第２の関数の計算結果情報との送信を関数公開コンピュータ３００に対して指示する送信識別符号とを含む第２の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Ａ１１６に記憶するユーザプログラム編集部１１１を備える。
そして、通信コード生成装置１００は、関数利用通信スタブコード記憶部１０９に記憶された関数利用通信スタブコードを読み込んで、関数利用コンピュータ２００が実行するユーザプログラムから第１の呼び出し命令を受け取り第１の関数名を含む第１の関数の計算依頼情報と保留識別符号とを関数公開コンピュータ３００に送信し、第１の関数の計算結果情報の受信を待たずに関数利用コンピュータ２００が実行するユーザプログラムから第２の呼び出し命令を受け取り第２の関数名を含む第２の関数の計算依頼情報と送信識別符号とを関数公開コンピュータ３００に送信し、第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開コンピュータ３００から受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Ａ１１４に記憶する関数利用通信コード編集部１１２を備える。
そして、通信コード生成装置１００は、関数公開通信スタブコード記憶部１１０に記憶された関数公開通信スタブコードを読み込んで、関数利用コンピュータ２００から第１の関数の計算依頼情報と第２の関数の計算依頼情報とを受信した場合に、第１の関数名に基づいて第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、第１の関数の計算依頼情報とともに第１の関数の計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第１の関数の計算結果情報の送信を保留し、関数利用コンピュータ２００から第２の関数の計算依頼情報とともに第２の関数の計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に保留していた第１の関数の計算結果情報と第２の関数の計算結果情報とを関数利用コンピュータ２００へ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Ａ１１５に記憶する関数公開通信コード編集部１１３を備える。
【００１９】
更に、ソースプログラム解析処理部１０８は、ソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した３つ以上の呼び出し命令である場合に、互いに独立した３つ以上の呼び出し命令の内、最後に呼び出される呼び出し命令を第２の関数の呼び出し命令と判断し、その他の呼び出し命令を第１の関数の呼び出し命令と判断する。
【００２０】
次に、図５を用いて関数利用コンピュータ２００の構成を説明する。
図５は、関数利用コンピュータ２００の構成を示す図である。
ユーザプログラム記憶部Ｂ２１０は、通信コード生成装置１００のユーザプログラム記憶部Ａ１１６が記憶したユーザプログラムと同じユーザプログラムを記憶する。
関数利用通信コード記憶部Ｂ２２０は、通信コード生成装置１００の関数利用通信コード記憶部Ａ１１４が記憶した関数利用通信コードと同じ関数利用通信コードを記憶する。
ユーザプログラム実行部２３０は、ユーザプログラム記憶部Ｂ２１０が記憶したユーザプログラムを実行する。
関数利用通信部２４０は、ユーザプログラム実行部２３０が実行したユーザプログラムの実行に伴って、関数公開コンピュータ３００と通信を行う。
【００２１】
ここで、関数利用コンピュータ２００の概要を述べる。
関数利用コンピュータ２００は、関数の計算依頼情報を受信し関数を計算して計算結果情報を送信する関数公開コンピュータ３００に対して計算依頼情報を送信して計算結果情報を受信する。
そして、関数利用コンピュータ２００は、第１の関数名と、第１の関数の計算結果情報の送信の保留を関数公開コンピュータ３００に対して指示する保留識別符号とを含む第１の呼び出し命令と、第２の関数名と保留されている第１の関数の計算結果情報と第２の関数の計算結果情報との送信を関数公開コンピュータ３００に対して指示する送信識別符号とを含む第２の呼び出し命令とを有するユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Ｂ２１０を備える。
そして、関数利用コンピュータ２００は、ユーザプログラムから第１の呼び出し命令を受け取り第１の関数名を含む第１の関数の計算依頼情報と保留識別符号とを関数公開コンピュータ３００に送信し、第１の関数の計算結果情報の受信を待たずにユーザプログラムから第２の呼び出し命令を受け取り第２の関数名を含む第２の関数の計算依頼情報と送信識別符号とを関数公開コンピュータ３００に送信し、第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開コンピュータ３００から受信する処理をＣＰＵに行わせる命令が記述された関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Ｂ２２０を備える。
そして、関数利用コンピュータ２００は、関数公開コンピュータ３００と通信を行う関数利用通信部２４０を備える。
そして、関数利用コンピュータ２００は、ユーザプログラム記憶部Ｂ２１０が記憶するユーザプログラムを読み込み、ユーザプログラムが有する第１の呼び出し命令と第２の呼び出し命令とを実行し、第１の呼び出し命令と第２の呼び出し命令とに基づいて関数利用通信コード記憶部Ｂ２２０が記憶する関数利用通信コードを実行して、関数利用通信部２４０により第１の関数の計算依頼情報と第２の関数の計算依頼情報とを関数公開コンピュータ３００に送信し、関数利用通信部２４０により第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開コンピュータ３００から受信するユーザプログラム実行部２３０を備える。
【００２２】
次に、図６を用いて関数公開コンピュータ３００の構成を説明する。
図６は、関数公開コンピュータ３００の構成を示す図である。
関数記憶部３１０は、関数を計算するプログラムである関数コードを記憶する。
関数公開通信コード記憶部Ｂ３２０は、通信コード生成装置１００の関数公開通信コード記憶部Ａ１１５が記憶した関数公開通信コードと同じ関数公開通信コードを記憶する。
関数公開通信部３４０は、関数利用コンピュータ２００からの要求に基づき関数利用コンピュータ２００と通信する。
関数計算実行部３３０は、関数公開通信部３４０が受信した関数利用コンピュータ２００からの要求に基づき関数記憶部３１０が記憶する所定の関数コードの計算を実行する。
計算結果保留部３５０は、所定の場合に関数計算実行部３３０が実行した関数コードの計算結果を記憶する。
【００２３】
ここで、関数公開コンピュータ３００の概要を述べる。
関数公開コンピュータ３００は、関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータ２００から関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータ２００に送信する。
そして、関数公開コンピュータ３００は、第１の関数を計算する第１の関数コードと、第２の関数を計算する第２の関数コードとを記憶装置に記憶する関数記憶部３１０を備える。
そして、関数公開コンピュータ３００は、関数の計算結果情報を保留する計算結果保留部３５０と、関数利用コンピュータ２００と通信を行う関数公開通信部３４０とを備える。
そして、関数公開コンピュータ３００は、関数公開通信部３４０が関数利用コンピュータ２００から第１の関数の計算依頼情報と第２の関数の計算依頼情報とを受信して、第１の関数名に基づいて関数記憶部３１０が記憶する第１の関数コードを呼び出して第１の関数の計算を実行させ、かつ、第２の関数名に基づいて第２の関数コードを呼び出して第２の関数の計算を実行させるとともに、第１の関数の計算依頼情報とともに計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第１の関数の計算結果情報を計算結果保留部３５０に記憶して第１の関数の計算結果情報の送信を保留し、関数公開通信部３４０が関数利用コンピュータ２００から第２の関数の計算依頼情報とともに計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に計算結果保留部３５０に保留していた第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開通信部３４０により関数利用コンピュータ２００へ送信する処理をＣＰＵに行わせる命令が記述された関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Ｂ３２０を備える。
そして、関数公開コンピュータ３００は、関数公開通信部３４０により受信した第１の関数の計算依頼情報と第２の関数の計算依頼情報とに基づき、関数公開通信コード記憶部Ｂ３２０が記憶する関数公開通信コードを実行し、関数記憶部３１０が記憶する第１の関数コードによる第１の関数の計算と第２の関数コードによる第２の関数の計算とを行い第１の関数の計算結果情報と第２の関数の計算結果情報とを得て第１の関数の計算結果情報と第２の関数の計算結果情報とを関数公開通信コードに伝達する関数計算実行部３３０を備える。
【００２４】
次に、図７、図８、図９、図１０、図１１、図１２、図１３、図１４を用い、具体例を挙げて説明する。
なお、説明中にプログラミング言語による記述が有るが、例えばＣ言語などプログラミング言語によるものであり、個々の関数や変数などの詳細な説明は省略する。（ここでプログラム言語はＣ言語に限定されるものでは無い）。
図７は、関数利用通信スタブコードとソースプログラムを基に関数利用通信コードとユーザプログラムを作成する際の手順を示すフロー図である。
図８は、インタフェース定義の例を示す図である。
図９は、関数利用通信スタブコードの例を示す図である。
図１０は、ソースプログラムの例を示す図である。
図１１は、ソースプログラムを実行した場合の処理シーケンスを示す図である。
図１２は、関数利用通信コードの例を示す図である。
図１３は、ユーザプログラムの例を示す図である。
図１４は、ユーザプログラムを実行した場合の処理シーケンスを示す図である。
【００２５】
まず、図７に示すステップＳ１において、関数公開コンピュータ３００は、関数を公開すると共に、公開する関数（関数コード）のインタフェース定義も公開している。そして、インタフェース定義格納部１０２は、そのインタフェース定義を格納している。
図８にインタフェース定義格納部１０２が格納しているそのインタフェース定義の例を示す。図８は、４つの関数（ｆｕｎｃ１、ｆｕｎｃ２、ｆｕｎｃ３、ｆｕｎｃ４）のインタフェース定義を示している。実際は、多数の関数のインタフェース定義を格納可能であるが、図示の簡略化の為に、４つの関数のみを図示する。
１つ目の関数のインタフェース定義である「ｓｈｏｒｔ  ｆｕｎｃ１（  ｉｎ  ｓｈｏｒｔ  ｘ，  ｏｕｔ  ｓｈｏｒｔ  ｙ）」は、戻り値のデータ型が「ｓｈｏｒｔ」であり、関数公開コンピュータ３００が公開している公開関数名が「ｆｕｎｃ１」であることを示している。また、この関数は２つの引数を用いている。１つ目の引数は、引数の入出力タイプが「ｉｎ」すなわち、関数に値を渡す為の入力引数であり、引数のデータ型が「ｓｈｏｒｔ」であり、引数名が「ｘ」であることを示している。２つ目の引数は、引数の入出力タイプが「ｏｕｔ」すなわち、関数から値を受け取る為の出力引数であり、引数のデータ型が「ｓｈｏｒｔ」であり、引数名が「ｙ」であることを示している。
２つ目の関数のインタフェース定義である「ｓｈｏｒｔ  ｆｕｎｃ２（  ｉｎ  ｓｈｏｒｔ  ｎｕｍ，  ｉｎ  ｓｈｏｒｔ  ｐａｒａｍ）」は、１つ目の関数と同様に２つの引数を用いているが、２つの引数とも引数の入出力タイプが「ｉｎ」であることを示している。
３つ目の関数のインタフェース定義である「ｌｏｎｇ  ｆｕｎｃ３（  ｉｎ  ｓｈｏｒｔ  ｚ）」は、戻り値のデータ型が「ｌｏｎｇ」であり、入出力タイプが「ｉｎ」の引数を１つだけ用いていることを示している。
４つ目の関数のインタフェース定義である「ｓｈｏｒｔ  ｆｕｎｃ１（  ｉｎ  ｃｈａｒ  ａ，  ｏｕｔ  ｌｏｎｇ  ｂ）」は、２つの引数を用いている。１つ目の引数は、引数の入出力タイプが「ｉｎ」であり、引数のデータ型が「ｃｈａｒ」であり、引数名が「ａ」であることを示している。２つ目の引数は、引数の入出力タイプが「ｏｕｔ」であり、引数のデータ型が「ｌｏｎｇ」であり、引数名が「ｂ」であることを示している。
【００２６】
次に、図７に示すステップＳ２において、ユーザはユーザプログラム（またはソースプログラム）に用いる為に必要な関数、すなわちユーザプログラム（またはソースプログラム）から呼び出したい関数を入力部１０１により入力装置を用いて選択する。
インタフェース定義抽出部１０３は予め、インタフェース定義格納部１０２に格納されている関数のインタフェース定義を抽出している。そして、インタフェース定義一覧表示部１０４は、例えば表示装置９０１にインタフェース定義抽出部１０３が抽出した関数のインタフェース定義の一覧を表示する。インタフェース定義一覧表示部１０４は、例えば図８に示す「ｓｈｏｒｔ  ｆｕｎｃ１（  ｉｎ  ｓｈｏｒｔ  ｘ，ｏｕｔ  ｓｈｏｒｔ  ｙ）」や「ｓｈｏｒｔ  ｆｕｎｃ２（  ｉｎ  ｓｈｏｒｔ  ｎｕｍ，ｉｎ  ｓｈｏｒｔ  ｐａｒａｍ）」などを一覧表示する。そして、ユーザは、入力部１０１（例えば、キーボード９０２や、マウス９０３）を用いて、表示された関数のインタフェース定義の一覧から、必要な関数の関数名及び必要な関数のインタフェース定義を選択することが可能である。
本説明においては、ユーザは、図８に示すｆｕｎｃ１〜ｆｕｎｃ３の３つの関数を選択したと仮定する。
【００２７】
次に、図７に示すステップＳ３において、通信コード自動生成処理部１０５は、選択された関数のインタフェース定義から、関数利用通信スタブコードと関数公開通信スタブコードを自動生成する。そして、自動生成された関数利用通信スタブコードと関数公開通信スタブコードとは、それぞれ関数利用通信スタブコード記憶部１０９と関数公開通信スタブコード記憶部１１０とに記憶される。
【００２８】
図９に関数利用通信スタブコードの例を示す。（関数利用通信スタブコードと関数公開通信スタブコードとは、関数利用側のコンピュータと関数公開側のコンピュータ（もしくは関数利用ＯＳと関数公開ＯＳ）と異なる環境で用いられるために、プログラムの記述が異なる場合があるが、本実施の形態における説明の主旨には影響しない為、ここでは、関数利用通信スタブコードについてのみ具体例の説明を行う）。
図９の例では、「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ１」「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ２」「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ３」の３つの関数利用通信スタブコードの例を示している。（「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ３」に関しては、関数内部の記述の図示を省略している）。
関数利用通信スタブコード「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ１」は、関数「ｆｕｎｃ１」に対応しており、関数利用通信スタブコード「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ２」は、関数「ｆｕｎｃ２」に対応しており、関数利用通信スタブコード「ｓｈｏｒｔ  ｓｔｕｂ＿ｆｕｎｃ３」は、関数「ｆｕｎｃ３」に対応している。
通信コード自動生成処理部１０５により、自動生成された関数利用通信スタブコードは、関数名の先頭に例えば「ｓｔｕｂ＿」が付加される。「ｓｔｕｂ＿」が付加された関数利用通信スタブコードは、ユーザプログラム（またはソースプログラム）が通信コードの呼び出し処理を実装した際にユーザプログラム（またはソースプログラム）内の既存の関数と区別できるようになっている。なお、本実施の形態では関数利用通信スタブコードは、関数名の先頭に「ｓｔｕｂ＿」を付加したが、ユーザプログラム（またはソースプログラム）内の既存の関数との区別が付けられれば何でも良い。
図９に示すように関数利用通信スタブコードは、一連の処理の後に「ｒｅｓ＝ｓｅｎｄＭｅｓｓａｇｅ（  ｍｓｇ  ）；」によって、必ず関数公開ＯＳからの応答を受け取るようになっている。（通信コード自動生成処理部１０５は、関数のインタフェース定義から判断して、図９に示すような例えば「ｒｅｓ＝ｓｅｎｄＭｅｓｓａｇｅ（  ｍｓｇ  ）；」のような処理を含ませた通信コードの生成が可能である）。
【００２９】
次に、図７のステップＳ４において、ユーザは、ユーザが作成したソースプログラムに関数利用通信スタブコードの呼び出し処理を実装する。そして、ユーザは、関数利用通信スタブコードの呼び出し処理を実装したソースプログラムをソースプログラム記憶部１１７に記憶させることを指示する情報を例えば入力部１０１を用いて入力する。
【００３０】
図１０に、関数利用通信スタブコードの呼び出し処理を実装したソースプログラムの例を示す。なお、図１０では、ソースプログラムの内、関数利用通信スタブコードの呼び出し処理を実装した部分だけを抜粋している。
図１０の例では、ユーザは、例えば入力部１０１（もしくはキーボード９０２やマウス９０３）を用いてソースプログラムに「ｓｔｕｂ＿ｆｕｎｃ１」「ｓｔｕｂ＿ｆｕｎｃ２」「ｓｔｕｂ＿ｆｕｎｃ３」の３つの関数利用通信スタブコードの呼び出し処理を実装する記述を行っている。
【００３１】
次に、図７のステップＳ５において、関数利用コンピュータ２００のユーザプログラム実行部２３０は、ソースプログラムを実行して、ＯＳ間（もしくはクライアント／サーバ間、もしくは関数利用コンピュータ２００／関数公開コンピュータ３００間）の通信が行われているか確認する。そして、ユーザプログラム実行部２３０は、関数公開ＯＳ（もしくはサーバ）上の関数が関数利用ＯＳ（もしくはクライアント）側からの実行要求に応じて正常に実行されていることを確認する。すなわち、ユーザプログラム実行部２３０は、ソースプログラム（ユーザプログラム）をデバッグする。
あるいは、ユーザが、ユーザプログラム実行部２３０が実行したソースプログラムの実行結果（例えばエラー処理結果など）を例えば関数利用コンピュータ２００の表示装置９０１などで確認する。そして、ユーザが入力部１０１（もしくはキーボード９０２やマウス９０３）を用いてソースプログラムの編集（デバッグ）を行う。
【００３２】
なお、ここで、関数利用通信コード編集部１１２は、関数利用通信スタブコードの編集を行わず、関数利用通信スタブコードをそのまま関数利用通信コードとして、関数利用通信コード記憶部Ａ１１４に記憶させている。同様に関数公開通信コード編集部１１３は、関数公開通信スタブコードの編集を行わず、関数公開通信スタブコードをそのまま関数公開通信コードとして、関数公開通信コード記憶部Ａ１１５に記憶させている。
そして、関数利用コンピュータ２００の関数利用通信コード記憶部Ｂ２２０は、関数利用通信コード記憶部Ａ１１４が記憶した関数利用通信コード（関数利用通信スタブコード）を記憶する。そして、関数利用コンピュータ２００は、関数利用通信コード（関数利用通信スタブコード）を関数利用ＯＳで動作可能なようにコンパイルし、関数利用通信コードの実行コード（例えばｅｘｅファイル）を生成する。更に関数利用通信コード記憶部Ｂ２２０は、関数利用通信コードを関数利用ＯＳで動作可能なようにコンパイルされた関数利用通信コードの実行コード（例えばｅｘｅファイル）を記憶する。
同様に、関数公開コンピュータ３００の関数公開通信コード記憶部Ｂ３２０は、関数公開通信コード記憶部Ａ１１５が記憶した関数公開通信コード（関数公開通信スタブコード）を記憶する。そして、関数公開コンピュータ３００は、関数公開通信コード（関数公開通信スタブコード）を関数公開ＯＳで動作可能なようにコンパイルして関数公開通信コードの実行コード（例えばｅｘｅファイル）を生成する。更に関数公開通信コード記憶部Ｂ３２０は、関数公開通信コードを関数公開ＯＳで動作可能なようにコンパイルされた関数公開通信コードの実行コード（例えばｅｘｅファイル）を記憶する。
また、ユーザプログラム記憶部Ａ１１６は、ソースプログラム記憶部１１７に記憶されたソースプログラムをユーザプログラムとして記憶する。（ソースプログラム解析実行指示部１０６、ソースプログラム読込み処理部１０７、ソースプログラム解析処理部１０８、ユーザプログラム編集部１１１による処理は行わない）。更に関数利用コンピュータ２００のユーザプログラム記憶部Ｂ２１０は、ユーザプログラム記憶部Ａ１１６が記憶したユーザプログラムを記憶する。そして、そして、関数利用コンピュータ２００は、ユーザプログラムを関数利用ＯＳで動作可能なようにコンパイルしてユーザプログラムの実行コード（例えばｅｘｅファイル）を生成する。更にユーザプログラム記憶部Ｂ２１０は、ユーザプログラムを関数利用ＯＳで動作可能なようにコンパイルされたユーザプログラムの実行コード（例えばｅｘｅファイル）を記憶する。
【００３３】
図１１に図１０のソースプログラムの関数利用通信スタブコードの呼び出し処理を実行した場合のシーケンスを示す。
ユーザは、関数利用コンピュータ２００のユーザプログラム実行部２３０にユーザプログラム記憶部Ｂ２１０に記憶されたユーザプログラムの実行コードの実行を指示する情報を例えば関数利用コンピュータ２００のキーボード９０２やマウス９０３を用いて入力する。
ユーザプログラムの実行コードは、一連の処理の内、図１０に示す関数利用通信コードの呼び出し処理の実行に移った場合、まず、「ｓｔｕｂ＿ｆｕｎｃ１」の実行コードを関数利用通信コード記憶部Ｂ２２０から呼び出し、図１０に示すソースプログラムで設定された引数１（入力引数）を受け渡す。
「ｓｔｕｂ＿ｆｕｎｃ１」の実行コードを実行する関数利用コンピュータ２００のＣＰＵは、図９に示す「ｓｔｕｂ＿ｆｕｎｃ１」に基づいた要求１メッセージを生成する。ここで、要求メッセージ（要求１メッセージ）とは、関数名（例えば「ｓｔｕｂ＿ｆｕｎｃ１」）や関数が用いる引数（例えば「ｓｔｕｂ＿ｆｕｎｃ１」が用いる引数）の情報が含まれた関数公開コンピュータ３００に対して計算依頼を行う為の計算依頼情報である。もしくは、要求メッセージ（要求１メッセージ）とは、関数公開コンピュータ３００が公開する関数（例えばｆｕｎｃ１）に対する処理要求である。そして、関数利用通信部２４０は、要求１メッセージ（計算依頼情報）を関数公開コンピュータ３００に送信する。
【００３４】
一方、関数公開コンピュータ３００の関数公開通信部３４０は、関数利用コンピュータ２００からの要求１メッセージ（計算依頼情報）を受信する。
そして、関数計算実行部３３０は、要求１メッセージ（計算依頼情報）の解釈を行い、要求１メッセージ（計算依頼情報）が計算を依頼している関数に対応する関数公開通信コードの実行コードを関数公開通信コード記憶部Ｂ３２０から呼び出す。呼び出された関数公開通信コードの実行コードは、関数記憶部３１０に記憶された関数コード（関数を計算するプログラム）に関数利用コンピュータ２００から受け渡された引数に基づく計算をさせて、その計算結果を受け取る。なお、ここで引数が出力引数の場合（例えば、図１０に示す「ｓｔｕｂ＿ｆｕｎｃ１」の引数２）、関数コードは、自ら新たに引数の値を設定し、自らの計算に使用することが出来る。
関数公開通信コードの実行コードは、関数コードから受け取った計算結果に基づき、応答１メッセージを生成する。ここで、応答メッセージ（応答１メッセージ）とは、要求メッセージに基づいて関数コードを実行した関数公開コンピュータ３００のＣＰＵが計算した計算結果情報である。もしくは、応答メッセージ（応答１メッセージ）とは、要求メッセージに基づいて関数公開コンピュータ３００が公開する関数の処理の成否を示す情報である。（処理の成否を示す情報とは、処理の結果が正常か異常かを示す情報のことである）。そして、関数公開通信部３４０は、応答１メッセージを関数利用コンピュータ２００に送信（返信）する。
【００３５】
関数利用コンピュータ２００の関数利用通信部２４０は、応答１メッセージを受信し、「ｓｔｕｂ＿ｆｕｎｃ１」の実行コードが応答１メッセージの解釈を行う。そして、「ｓｔｕｂ＿ｆｕｎｃ１」の実行コードは、応答１メッセージに含まれる関数コードの計算結果をユーザプログラムに受け渡す。
【００３６】
ユーザプログラムは、「ｓｔｕｂ＿ｆｕｎｃ２」「ｓｔｕｂ＿ｆｕｎｃ３」についても同様の処理を行う。
そして、図１１に示す通り、関数利用コンピュータ２００から関数公開コンピュータ３００へのメッセージの送信を３回、関数公開コンピュータ３００から関数利用コンピュータ２００へのメッセージの返信を３回行っている。
そして、本実施の形態においては、このメッセージの送信、返信の回数を減らす為に、図７に示すステップ６とステップ７の処理を行う。
【００３７】
図７に示すステップ６において、ユーザは、入力部１０１を用いて、ソースプログラム解析実行指示部１０６に対して、関数利用通信スタブコードの呼び出し処理が実装されたソースプログラムの解析を指示する。
ソースプログラムの解析指示を受けたソースプログラム解析実行指示部１０６は例えば、表示装置９０１にソースプログラムの一覧を示すファイル選択ダイアログを表示し、ユーザに解析の対象となる通信コード（関数利用通信スタブコード）の呼出し処理を実装したソースプログラムの指定を要求する。そして、ソースプログラム読込み処理部１０７は、ユーザが入力部１０１を用いて指定したソースプログラムをソースプログラム記憶部１１７から読み込む。
ソースプログラム解析処理部１０８は、ソースプログラム読込み処理部１０７に読み込まれたソースプログラムの解析を開始する。そして、まずは、ソースプログラム中で、通信コード自動生成処理部１０５にて自動生成された通信スタブコード（関数利用通信スタブコード）の呼び出し処理が実装されている箇所と、どの通信スタブコード（関数利用通信スタブコード）が呼び出されているのかとを検索する。通信スタブコード（関数利用通信スタブコード）の呼び出し処理を特定する方法としては、例えば呼び出されている関数名の先頭に「ｓｔｕｂ＿」が付加されている箇所を検索する方法がある。
ソースプログラム解析処理部１０８は、ソースプログラム内で呼び出されている通信スタブコード（関数利用通信スタブコード）にて実行要求を行っている関数（関数公開コンピュータ３００で公開されている関数）のインタフェース仕様（戻り値や引数のデータ型、引数の入出力タイプなど）をインタフェース定義抽出部１０３に要求する。
インタフェース定義抽出部１０３はインタフェース定義格納部１０２から関数のインタフェース仕様を関数名に基づいて抽出して、抽出したインタフェース仕様をソースプログラム解析処理部１０８に返す。
【００３８】
ソースプログラム解析処理部１０８は、取得したインタフェース仕様の「引数の入出力タイプ」をチェックして全ての引数のタイプが入力引数となっているかどうかを確認する。
引数に出力引数が含まれる場合には、その関数は関数公開ＯＳ（関数公開コンピュータ３００）側の処理にて何らかのデータを取得することを意味している。すなわち、関数公開コンピュータ３００からの応答は、関数公開コンピュータ３００側の処理の成否だけを返すわけではない。その為、引数に出力引数が含まれる関数は、関数以外の処理に依存関係があると考えられるため、通信性能を改善するための編集対象から外すこととする。
例えば、ソースプログラム解析処理部１０８は図８に示すインタフェース定義において各関数のインタフェース仕様の引数の入出力タイプが「ｉｎ」になっている引数のみの関数かどうかを確認する。
図８の例ではソースプログラム解析処理部１０８は、公開関数「ｆｕｎｃ１」は引数の入出力タイプが「ｏｕｔ」の出力引数が含まれているため対象外と判断する。また、ソースプログラム解析処理部１０８は、公開関数「ｆｕｎｃ２」と公開関数「ｆｕｎｃ３」は引数の入出力タイプが「ｉｎ」の入力引数のみであり、通信性能を改善するための編集対象と判断する。
また、ソースプログラム解析処理部１０８は、各々の関数の戻り値が別の関数の引数として使用されていないことも確認する。すなわちソースプログラム解析処理部１０８は、各関数が独立した関数であるかを確認する。
【００３９】
次にソースプログラム解析処理部１０８は、全ての引数が入力引数である関数がソースプログラム内で複数連続に実行されている箇所の有無を確認する。
例えば、関数公開コンピュータ３００にて管理しているデータベースへのデータの書込み要求を関数利用コンピュータ２００は、通信コードを用いて実施しているような場合を考える。この場合において、通常のデータベースアクセスの処理では一連の処理完了後にＣｏｍｍｉｔ（コミット）もしくはＲｏｌｌｂａｃｋ（ロールバック）を実施していることが多く、関数利用コンピュータ２００は、個々の書き込み要求に対する応答は必要ない。すなわち、関数利用コンピュータ２００は、最後の書込み要求時にそれまでの処理の成否が応答として返ってくれば良く、ソースプログラム解析処理部１０８は、そういった処理がソースプログラム内に含まれている箇所を確認する。言い換えれば、ソースプログラム解析処理部１０８は、関数利用コンピュータ２００が関数公開コンピュータ３００からの応答をリアルタイムに受け取る必要があるか否かを判断している。
ただし、関数公開コンピュータ３００の処理は、複数の書込み要求を受け取った場合に書き込み途中の処理がある場合はその処理が完了するまで別のデータの書込み処理を実施しないように排他制御を実施していることが前提である。
【００４０】
上記のような処理が含まれている場合に、ソースプログラム解析処理部１０８は、全ての引数が入力引数である関数がソースプログラム内で複数連続に実行されている箇所に相当する処理内で呼び出されている通信コードの一覧を関数利用通信コード編集部１１２と関数公開通信コード編集部１１３とに渡す。また、ソースプログラム解析処理部１０８は、後述のように関数利用通信コード編集部１１２と関数公開通信コード編集部１１３とが編集した通信コードの情報と、それらの通信コードの呼び出し処理が複数連続している箇所をユーザプログラム編集部１１１に通知する。
【００４１】
図１０に示すソースプログラムにおいて、ソースプログラム解析処理部１０８が編集対象と判断する箇所の具体例を示す。図１０に示すソースプログラムにおいては、引数が全て入力引数である「ｓｔｕｂ＿ｆｕｎｃ２」と「ｓｔｕｂ＿ｆｕｎｃ３」とが連続して呼び出されており、ソースプログラム解析処理部１０８は「ｓｔｕｂ＿ｆｕｎｃ２」と「ｓｔｕｂ＿ｆｕｎｃ３」とが呼び出されている処理を編集対象と判断する。ここで、「ｓｔｕｂ＿ｆｕｎｃ２」と「ｓｔｕｂ＿ｆｕｎｃ３」とは、互いに独立した関数（「ｓｔｕｂ＿ｆｕｎｃ２」の戻り値が「ｓｔｕｂ＿ｆｕｎｃ３」で利用されていない）であると仮定する。
【００４２】
次に図７に示すステップ８において、関数利用通信コード編集部１１２は、ソースプログラム解析処理部１０８から受け取った通信コードの一覧に基づき、関数利用通信スタブコード記憶部１０９に記憶されている関数利用通信スタブコードを編集する。すなわち、関数利用通信コード編集部１１２は、編集対象の関数利用通信スタブコードに対して、引数を一つ追加し、通信コード（通信スタブコード）に対応した関数コードの実行時に関数公開コンピュータ３００からの応答を返す／返さないの指定を出来るように修正する。そして、関数利用通信コード記憶部Ａ１１４は、修正された関数利用通信スタブコードを関数利用通信コードとして記憶する。（関数公開通信コード編集部１１３の編集内容も同様である為、説明を省略する）。
【００４３】
図１２に関数利用通信コード編集部１１２が編集した関数利用通信コードの例を示す。
関数「ｆｕｎｃ１」に関しては、引数に出力引数が含まれる為、編集対象外であり、編集処理は、施されていない。
一方、関数「ｆｕｎｃ２」は、引数が全て入力引数である為、引数「ｂｏｏｌ  ｆｌａｇ２」が追加されている（応答を返す／返さないの指定を出来るように修正している）。（図１２中の矢印（１）箇所）。この追加された引数は、真理値の「真＝ｔｒｕｅ」と「偽＝ｆａｌｓｅ」という２値をとるブーリアン型（Ｂｏｏｌｅａｎ型）の引数である。（以後、このブーリアン型の引数を「フラグ情報」と称する）。そして、関数「ｆｕｎｃ２」は、「関数公開ＯＳ（関数公開コンピュータ３００）からの応答を待たない」処理が追加されている（応答を返す／返さないの指定を出来るように修正している）。（図１２中の矢印（２）箇所）。また、関数「ｆｕｎｃ３」も引数が全て入力引数である為、引数として「ｂｏｏｌ  ｆｌａｇ３」が追加されている（図１２中の矢印（３）箇所）。（関数「ｆｕｎｃ３」も、「関数公開ＯＳ（関数公開コンピュータ３００）からの応答を待つ／待たない」の処理が追加されているが図示は省略する）。
【００４４】
そして、ユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８からの情報（関数利用通信コード編集部１１２と関数公開通信コード編集部１１３とが編集した通信コードの情報）に基づき、ソースプログラムにおける前記関数利用通信コード編集部１１２が編集した関数利用通信コードの呼び出し処理に対して、通信コードのフラグ情報に対応する引数を一つ追加する。更にユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８からの通知（通信コードの呼び出し処理が複数連続している箇所の通知）に基づき、応答に対するエラー処理を、関数利用通信コードを複数連続して呼び出した後にまとめて処理を実施するように修正する。
そして、ユーザプログラム編集部１１１が編集したソースプログラムを、ユーザプログラムとしてユーザプログラム記憶部Ａ１１６は記憶する。
【００４５】
図１０のソースプログラムを基に、ユーザプログラム編集部１１１が編集したユーザプログラムの具体例を図１３に示す。
図１３は、図１０と同じく、通信コードの呼び出し箇所のみを抜粋したものである。
関数「ｆｕｎｃ１」に関しては、引数に出力引数が含まれる為、編集対象外であり、編集処理は、施されていない。一方、関数「ｆｕｎｃ２」は、引数が全て入力引数である為、ブーリアン型の引数（フラグ情報）が追加されている（図１３中の矢印（１）箇所）。関数利用コンピュータ２００は、この引数に「ｆａｌｓｅ」を設定した場合は関数公開コンピュータ３００からの応答を受け取らないこととし、「ｔｒｕｅ」を設定した場合は関数公開コンピュータ３００からの応答を受付けることとする。
また、関数「ｆｕｎｃ３」も引数が全て入力引数である為、ブーリアン型の引数（フラグ情報）が追加されている（図１３中の矢印（２）箇所）。図１３のユーザプログラムの例では、前述の通り関数「ｆｕｎｃ２」と「ｆｕｎｃ３」とは独立しており、関数利用コンピュータ２００は、関数「ｆｕｎｃ２」の関数公開コンピュータ３００からの応答を関数「ｆｕｎｃ３」の関数公開コンピュータ３００からの応答と一緒に受け取ることが出来る。
すなわち、ユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８の判断に基づき、関数「ｆｕｎｃ２」を連続して呼び出される互いに独立した第１の関数としてフラグ情報に「ｆａｌｓｅ」を設定し、関数「ｆｕｎｃ３」を連続して呼び出される互いに独立した第２の関数としてフラグ情報に「ｔｒｕｅ」を設定している。
そして、ユーザプログラム記憶部Ａ１１６は、ユーザプログラム編集部１１１が編集したユーザプログラムを記憶する。
【００４６】
図１４に図１３のユーザプログラムの関数利用通信コードの呼び出し処理を実行した場合のシーケンスを示す。
なお、ここで、関数利用コンピュータ２００の関数利用通信コード記憶部Ｂ２２０は、関数利用通信コード記憶部Ａ１１４が記憶した関数利用通信コードを記憶する。そして、関数利用コンピュータ２００は、関数利用通信コードを関数利用ＯＳで動作可能なようにコンパイルして関数利用通信コードの実行コード（例えばｅｘｅファイル）を生成する。更に関数利用通信コード記憶部Ｂ２２０は、コンパイルされた関数利用通信コードの実行コード（例えばｅｘｅファイル）を記憶する。
同様に、関数公開コンピュータ３００の関数公開通信コード記憶部Ｂ３２０は、関数公開通信コード記憶部Ａ１１５が記憶した関数公開通信コードを記憶する。そして、関数公開コンピュータ３００は、関数公開通信コードを関数公開ＯＳで動作可能なようにコンパイルして関数公開通信コードの実行コード（例えばｅｘｅファイル）を生成する。更に関数公開通信コード記憶部Ｂ３２０は、コンパイルされた関数公開通信コードの実行コード（例えばｅｘｅファイル）を記憶する。
また、関数利用コンピュータ２００のユーザプログラム記憶部Ｂ２１０は、ユーザプログラム記憶部Ａ１１６に記憶させたユーザプログラムを記憶する。そして、関数利用コンピュータ２００は、ユーザプログラムを、関数利用ＯＳで動作可能なようにコンパイルしてユーザプログラムの実行コード（例えばｅｘｅファイル）を生成する。更にユーザプログラム記憶部Ｂ２１０は、コンパイルされたユーザプログラムの実行コード（例えばｅｘｅファイル）を記憶する。
【００４７】
まず、ユーザは、関数利用コンピュータ２００のユーザプログラム実行部２３０にユーザプログラム記憶部Ｂ２１０に記憶されたユーザプログラムの実行コードの実行を入力装置を用いて指示する。
ユーザプログラムの実行コードを実行するＣＰＵは、一連の処理の内、図１３に示す関数利用通信コードの呼び出し処理の実行に移った場合、まず、「ｓｔｕｂ＿ｆｕｎｃ１」の実行コードを関数利用通信コード記憶部Ｂ２２０から呼び出す。ここで、「ｓｔｕｂ＿ｆｕｎｃ１」に関しては、前述の図１０のソースプログラムと同じなので説明を省略する。
次にユーザプログラムの実行コードを実行するＣＰＵは、「ｓｔｕｂ＿ｆｕｎｃ２」の実行コードを関数利用通信コード記憶部Ｂ２２０から呼び出す。ここで、ユーザプログラムの実行コードは、図１３中の矢印（１）箇所に示す「ｆａｌｓｅ」を図１２中の矢印（１）箇所に示す引数「ｂｏｏｌ  ｆｌａｇ２」に受け渡す。
そして、関数公開コンピュータ３００では、関数公開通信コードの実行コードを実行するＣＰＵは、フラグ情報が「ｆａｌｓｅ」だった場合は応答を返さないと判断する（図１２中の矢印（２）箇所）。そして、計算結果保留部３５０は、「ｓｔｕｂ＿ｆｕｎｃ２」に基づいた関数コードの計算結果情報（応答メッセージ、例えば処理の成否）を一時保存する。
次にユーザプログラムの実行コードを実行するＣＰＵは、「ｓｔｕｂ＿ｆｕｎｃ３」の実行コードを関数利用通信コード記憶部Ｂ２２０から呼び出す。ここで、ユーザプログラムの実行コードは、図１３中の矢印（２）箇所に示す「ｔｒｕｅ」を図１２中の矢印（３）箇所に示す引数「ｂｏｏｌ  ｆｌａｇ３」に受け渡す。
そして、関数公開コンピュータ３００では、関数公開通信コードの実行コードを実行するＣＰＵは、フラグ情報が「ｔｒｕｅ」だった場合は、応答を返す際に計算結果保留部３５０が一時保存した情報と合わせて（複数の応答をまとめて）返す処理を実施すると判断する。そして、関数公開通信部３４０は、「ｓｔｕｂ＿ｆｕｎｃ２」と「ｓｔｕｂ＿ｆｕｎｃ３」の応答メッセージを一つにまとめて関数利用コンピュータ２００に返信する。
【００４８】
図１１の例に比較して、図１４の例は、関数利用コンピュータ２００と関数公開コンピュータ３００とのメッセージのやり取りの回数が減少している。（図１１の例では、関数利用コンピュータ２００から関数公開コンピュータ３００へのメッセージの送信を３回、関数公開コンピュータ３００から関数利用コンピュータ２００へのメッセージの返信を３回。一方、図１１の例では、関数利用コンピュータ２００から関数公開コンピュータ３００へのメッセージの送信を３回、関数公開コンピュータ３００から関数利用コンピュータ２００へのメッセージの返信を２回）。
【００４９】
なお、具体例の説明では、「ｓｔｕｂ＿ｆｕｎｃ２」と「ｓｔｕｂ＿ｆｕｎｃ３」との２つの通信コードの応答を１つにまとめる場合を説明したが、本実施の形態は、３つ以上の通信コードの応答をまとめることも可能である。その場合に連続して呼び出される最後の通信コードのフラグ情報が「ｔｒｕｅ」に設定され、その他の通信コードのフラグ情報は「ｆａｌｓｅ」に設定される。
すなわち、ユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８の判断に基づき、連続して呼び出される最後の通信コードに対応した関数を、連続して呼び出される互いに独立した第２の関数としてフラグ情報に「ｔｒｕｅ」を設定する。そして、ユーザプログラム編集部１１１は、ソースプログラム解析処理部１０８の判断に基づき、最後の通信コード以外の連続して呼び出される通信コードに対応した関数を、連続して呼び出される互いに独立した第１の関数としてフラグ情報に「ｆａｌｓｅ」を設定する。
【００５０】
そして、図７に示すステップ８において、コンピュータシステム５００（もしくは関数利用コンピュータ２００と関数公開コンピュータ３００）は、最終的な関数利用通信コードと、関数公開通信コードと、ユーザプログラムとのコンパイルを実施し、それぞれの実行コードを生成し、実行モジュールを生成する。更に図７に示すステップ９において、ユーザは、生成された実行モジュールを例えば組込み機器などに組み込んで実用化する。
【００５１】
本実施の形態は、関数利用コンピュータ２００と関数公開コンピュータ３００との間（もしくはＯＳ間もしくはマルチＯＳ間）の通信処理における通信性能を向上させるための通信コードを生成するためのものである。そして、本実施の形態は、通信スタブコードを用いて実行される関数に対して定義されたインタフェース定義の情報から引数が入力用（入力引数）なのか出力用（出力引数）なのかをチェックする。また、本実施の形態は、通信スタブコードの呼出し処理を実装しているソースプログラムを解析して、その関数を実行したときの応答をリアルタイムに受け取らなければならないかどうかを判断する。そして、本実施の形態は、前記を判断した結果に基づいて通信スタブコードを編集して通信コードを生成し、ソースプログラムを編集してユーザプログラムを生成することで、ＯＳ間（関数利用コンピュータ２００／関数公開コンピュータ３００間）通信における応答の数を減らすことができ通信性能を向上させることを可能とする。
このように本実施の形態は、ユーザに作業負荷をかけずにユーザプログラムとインタフェース定義を解析して応答をリアルタイムに返す必要の無い箇所を特定する。更に、本実施の形態は、応答メッセージをまとめて返す／受け取るように通信スタブコードとソースプログラムを修正することで、応答メッセージの作成と応答メッセージの送信、および応答メッセージの受信／解釈の処理回数を減らす。この為に、本実施の形態は、ＯＳ間（関数利用コンピュータ２００／関数公開コンピュータ３００間もしくはクライアント／サーバ間）における通信性能を向上することができる。
【００５２】
実施の形態２．
本実施の形態では、通信コード生成装置１００が通信スタブコードとソースプログラムを編集した場合、編集ログの情報（実施日、編集した通信コードとユーザプログラム内の修正箇所など）を記録する場合を説明する。
【００５３】
図１５は、編集ログの記録部を有する通信コード生成装置１００の構成を示す図である。
図１５に、ユーザプログラムとインタフェース定義の解析結果に基づいて通信スタブコードとソースプログラムを編集した時の編集ログの記録部を有する通信コード生成装置１００の構成を示す図を示す。
入力部１０１、インタフェース定義格納部１０２、インタフェース定義抽出部１０３、インタフェース定義一覧表示部１０４、通信コード自動生成処理部１０５、ソースプログラム解析実行指示部１０６、ソースプログラム読込み処理部１０７、ソースプログラム解析処理部１０８、関数利用通信スタブコード記憶部１０９、関数公開通信スタブコード記憶部１１０、ユーザプログラム編集部１１１、関数利用通信コード編集部１１２、関数公開通信コード編集部１１３、関数利用通信コード記憶部Ａ１１４、関数公開通信コード記憶部Ａ１１５、ユーザプログラム記憶部Ａ１１６、ソースプログラム記憶部１１７は、実施の形態１と同じである為に、説明を省略する。
そして、動作に関しても、実施の形態１と同様に、通信コード生成装置１００は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態１と同様に、通信コード生成装置１００は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態１と同様である為に、説明を省略する。
【００５４】
そして、通信コード／ユーザプログラム編集ログ記憶部１１８は、関数利用通信コード編集部１１２もしくは関数公開通信コード編集部１１３にて編集した通信スタブコードの関数名などを関数利用通信コード編集部１１２もしくは関数公開通信コード編集部１１３から受け取って記録する。
また、通信コード／ユーザプログラム編集ログ記憶部１１８は、ユーザプログラム編集部１１１にて編集が行われたソースプログラムの編集箇所と編集（修正）内容、および編集が行われた日時などの情報をユーザプログラム編集部１１１から受け取って記録する。ユーザプログラム編集部１１１から受け取る情報の具体例としては、ソースプログラム中で通信コードの呼び出し処理を実装している関数の関数名やクラス名もしくは行数など実装箇所を特定できる情報と、応答をどの通信コードを実行した際に受け取るのかといった情報などである。
通信コード／ユーザプログラム編集ログ抽出部１１９は、ユーザの指示により通信コード／ユーザプログラム編集ログ記憶部１１８から編集ログを抽出する。ここで、ユーザは、通信コード／ユーザプログラム編集ログ記憶部１１８に記録されている編集ログを確認したい場合に、入力部１０１を用いて、編集ログを抽出する指示を通信コード／ユーザプログラム編集ログ抽出部１１９に対して行う。
通信コード／ユーザプログラム編集ログ表示部１２０は、通信コード／ユーザプログラム編集ログ抽出部１１９が抽出した編集ログの情報を表示する。通信コード／ユーザプログラム編集ログ表示部１２０は、例えば、表示装置９０１であっても良い。
【００５５】
ここで、本実施の形態における通信コード生成装置１００の概要を述べる。
通信コード生成装置１００は、ユーザプログラム編集部１１１が編集したソースプログラムの編集内容と、関数利用通信コード編集部１１２が編集した関数利用通信スタブコードの編集内容と、関数公開通信コード編集部１１３が編集した関数公開通信スタブコードの編集内容とを記憶装置に記憶する通信コード／ユーザプログラム編集ログ記憶部１１８を備える。
そして、通信コード生成装置１００は、通信コード／ユーザプログラム編集ログ記憶部１１８が記憶したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを抽出する通信コード／ユーザプログラム編集ログ抽出部１１９を備える。
そして、通信コード／ユーザプログラム編集ログ抽出部１１９が抽出したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを表示する通信コード／ユーザプログラム編集ログ表示部１２０を備える。
【００５６】
図１６は、編集ログの具体例を示す図である。編集日時、編集対象ファイル、編集対象関数名、編集内容といった情報が記録されている。
これにより、ユーザは、関数利用通信コード編集部１１２もしくは関数公開通信コード編集部１１３にて編集した通信スタブコードの編集内容、またはユーザプログラム編集部１１１にて編集が行われたソースプログラムの編集内容を容易に確認することが出来る。
【００５７】
実施の形態３．
本実施の形態では、通信コード生成装置１００が通信スタブコードとソースプログラムを編集した場合に記録された編集ログの情報を利用して、ユーザプログラムを編集前の処理に編集（復元）する場合を説明する。（ユーザプログラムを関数公開コンピュータ３００からの応答をリアルタイムに受け取れるように編集（復元）する）。
図１７は、編集ログの情報を利用してユーザプログラムを編集前の処理に編集（復元）するための復元部を有する通信コード生成装置１００の構成を示す図である。
図１７に、ユーザプログラムとインタフェース定義の解析結果に基づいて通信スタブコードとソースプログラムを編集した時の編集ログの情報を利用して、ユーザプログラムを編集前の処理に編集（復元）するための復元部を有する通信コード生成装置１００の構成を示す。
【００５８】
入力部１０１、インタフェース定義格納部１０２、インタフェース定義抽出部１０３、インタフェース定義一覧表示部１０４、通信コード自動生成処理部１０５、ソースプログラム解析実行指示部１０６、ソースプログラム読込み処理部１０７、ソースプログラム解析処理部１０８、関数利用通信スタブコード記憶部１０９、関数公開通信スタブコード記憶部１１０、ユーザプログラム編集部１１１、関数利用通信コード編集部１１２、関数公開通信コード編集部１１３、関数利用通信コード記憶部Ａ１１４、関数公開通信コード記憶部Ａ１１５、ユーザプログラム記憶部Ａ１１６、ソースプログラム記憶部１１７は、実施の形態１および実施の形態２と同じである為に、説明を省略する。また、通信コード／ユーザプログラム編集ログ記憶部１１８、通信コード／ユーザプログラム編集ログ抽出部１１９、通信コード／ユーザプログラム編集ログ表示部１２０は、実施の形態２と同じである為に説明を省略する。
そして、動作に関しても、実施の形態１及び実施の形態２と同様に、通信コード生成装置１００は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態１及び実施の形態２と同様に、通信コード生成装置１００は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態１及び実施の形態２と同様である為に、説明を省略する。
そして、通信コード生成装置１００は、実施の形態２と同様に通信スタブコードとソースプログラムとを編集した編集ログを記録する。ここまでは、実施の形態２と同様である為に、説明を省略する。
【００５９】
ユーザは、通信コード／ユーザプログラム編集ログ表示部１２０に表示された編集ログの情報からユーザプログラム内の通信コードの呼び出し処理において、関数公開コンピュータ３００からの応答をリアルタイムに受け取れるように処理を変更したい（編集（復元）したい）箇所を入力部１０１を用いて選択する。
復元対象編集ログ抽出部１２１は、通信コード／ユーザプログラム編集ログ表示部１２０が表示した編集ログの情報から、ユーザに選択された編集（復元）対象の編集ログの情報を抽出する。
そして、ユーザプログラム復元部１２２は、復元対象編集ログ抽出部１２１が抽出した編集（復元）対象の編集ログの情報を基に、ユーザプログラム内の該当する通信コードの呼出し処理を実装している箇所について、関数公開コンピュータ３００からの応答をリアルタイムに受け取れるように編集（復元）する。
【００６０】
ここで、本実施の形態における通信コード生成装置１００の概要を説明する。
通信コード生成装置１００は、通信コード／ユーザプログラム編集ログ表示部１２０が表示するソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とから、編集内容を復元する箇所を表す復元情報を入力する入力部１０１を備える。
そして、通信コード生成装置１００は、入力部１０１が入力した復元情報が表す編集内容を復元する箇所の編集内容を通信コード／ユーザプログラム編集ログ記憶部１１８から抽出する復元対象編集ログ抽出部１２１を備える。
そして、復元対象編集ログ抽出部１２１が抽出した編集内容に基づいてソースプログラムの編集内容を復元するユーザプログラム復元部１２２を備える。
【００６１】
本実施の形態において、通信コード生成装置１００が、自動生成した通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析し、その解析結果に応じて通信性能を向上するためにソースプログラムに対して行われた編集内容を元の状態に編集（復元）するまでの動作を説明する。
ユーザは通信コード／ユーザプログラム編集ログ表示部１２０に表示されている編集ログの情報を確認する。（例えば図１６に示す編集ログの例）。そして、通信性能を向上するために実施された編集内容に対して、一部もしくは全てを編集前の状態に戻したい場合に、ユーザは、入力部１０１を用いて通信コード／ユーザプログラム編集ログ表示部１２０に対して戻したい編集箇所を選択（指定）し、ユーザプログラムの編集（復元）を指示する。
そして、復元対象編集ログ抽出部１２１は、通信コード／ユーザプログラム編集ログ表示部１２０で選択された編集箇所の編集ログの情報を抽出し、ユーザプログラム復元部１２２に渡す。また、ユーザプログラム復元部１２２は、ユーザプログラム記憶部Ａ１１６が記憶するユーザプログラムを読み込む。（ユーザプログラム復元部１２２は、ユーザが入力部１０１で指示したユーザプログラムをユーザプログラム記憶部Ａ１１６から読み込むことも可能である。また、ユーザプログラム復元部１２２は、編集ログの情報から判断してユーザプログラム記憶部Ａ１１６からユーザプログラムを読み込むことも可能である）。
ユーザプログラム復元部１２２は、復元対象編集ログ抽出部１２１から受け取った編集ログの情報を基に、ユーザプログラム記憶部Ａ１１６から読み込んだユーザプログラムを編集（復元）する。
【００６２】
具体的には、ユーザプログラム復元部１２２は、ユーザプログラム中で編集（復元）対象となる通信コードの呼び出し処理を実装している箇所に対して、ユーザプログラム編集部１１１にて通信コードの引数に追加したフラグ情報に「ｔｒｕｅ」を設定して、応答をリアルタイムに受け取れるように変更する。すなわち、関数公開通信部３４０は、関数公開コンピュータ３００において、関数コードの計算処理が終了した際に、計算結果情報を計算結果保留部３５０に一時記憶させずに、すぐに関数利用コンピュータ２００に計算結果情報を送信する。
また、ユーザプログラム復元部１２２は、この時、応答処理（エラー処理）をまとめて実行するように変更していた場合には、そのエラー処理も元のように通信コードを呼び出した直後に実施するように変更する。
そして、ユーザプログラム復元部１２２にて、ユーザプログラムの編集（復元）が完了したら、ユーザプログラム復元部１２２は、編集（復元）した箇所に該当する編集ログの情報を通信コード／ユーザプログラム編集ログ記憶部１１８から削除する。もしくは、ユーザプログラム復元部１２２は、編集（復元）したことを追記して後からユーザが通信コード／ユーザプログラム編集ログ表示部１２０にて編集ログを見た際に編集（復元）済みであること確認できるようにする。
【００６３】
図１８と図１９とを用いて、編集（復元）処理の具体例を説明する。
図１８は、ユーザが編集（復元）箇所を指定した例を示す図である。
図１９は、ユーザプログラム復元部１２２が編集（復元）したユーザプログラムの例を示す図である。
ユーザが、図１８に示す通信コード／ユーザプログラム編集ログ表示部１２０が表示した編集ログにおいて、矢印（１）箇所の「ｓｔｕｂ＿ｆｕｎｃ２」の処理を復元したい場合を想定する。すなわち、ユーザは「ｓｔｕｂ＿ｆｕｎｃ２」の計算結果情報を計算結果保留部３５０に一時記憶させることなく、リアルタイムで関数公開コンピュータ３００から受け取りたい場合を想定する。
その場合に、ユーザは、図１８に示す矢印（１）箇所を入力部１０１（例えば、マウス９０３など）を用いて選択し、ユーザプログラムの編集（復元）を指示する。そして、復元対象編集ログ抽出部１２１は選択された編集ログを通信コード／ユーザプログラム編集ログ記憶部１１８から抽出する。
そして、ユーザプログラム復元部１２２は、図１３に示すユーザプログラムを読み込み、復元対象編集ログ抽出部１２１が抽出した編集ログに基づき、図１９のようにユーザプログラムを編集（復元）する。
すなわち、ユーザプログラム復元部１２２は、図１８に示す矢印（１）箇所の編集ログに基づき、図１９において、フラグ情報を「ｔｒｕｅ」に設定し、「エラー処理２」を「ｓｔｕｂ＿ｆｕｎｃ２」の処理の直後に戻した。
このユーザプログラム復元部１２２が行った編集（復元）内容により、関数利用コンピュータ２００は、通信コードの編集内容を変更すること無く、「ｓｔｕｂ＿ｆｕｎｃ２」の処理において、関数公開コンピュータ３００からリアルタイムで計算結果情報を受け取ることが可能となる。
【００６４】
本実施の形態により、ユーザは通信コードやユーザプログラムの編集内容に対して、所望の箇所のみを元の状態（応答をリアルタイム受け取れるように）にユーザプログラムを容易に編集（復元）することができる。
【００６５】
実施の形態４．
本実施の形態では、関数利用コンピュータ２００と関数公開コンピュータ３００との間を転送する転送データ（例えば、マルチＯＳで動作する組込みシステムにおいて、ＯＳ間を転送するデータ）の受け渡し方法を通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼出し状況に応じて変更する場合を説明する。
図２０は、転送データの受け渡し方法を変更するユーザプログラム通信方式変更部１２４と通信コード通信方式変更部１２６とを有する通信コード生成装置１００の構成を示す図である。
図２０に通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況に応じてＯＳ間を転送する転送データの受け渡し方法を変更するための通信コード生成装置１００の構成を示す。
【００６６】
入力部１０１、インタフェース定義格納部１０２、インタフェース定義抽出部１０３、インタフェース定義一覧表示部１０４、通信コード自動生成処理部１０５、ソースプログラム解析実行指示部１０６、ソースプログラム読込み処理部１０７、ソースプログラム解析処理部１０８、関数利用通信スタブコード記憶部１０９、関数公開通信スタブコード記憶部１１０、ユーザプログラム編集部１１１、関数利用通信コード編集部１１２、関数公開通信コード編集部１１３、関数利用通信コード記憶部Ａ１１４、関数公開通信コード記憶部Ａ１１５、ユーザプログラム記憶部Ａ１１６、ソースプログラム記憶部１１７は、実施の形態１及び実施の形態２及び実施の形態３と同じである為に、説明を省略する。
そして、動作に関しても、実施の形態１及び実施の形態２及び実施の形態３と同様に、通信コード生成装置１００は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態１及び実施の形態２及び実施の形態３と同様に、通信コード生成装置１００は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態１及び実施の形態２及び実施の形態３と同様である為に、説明を省略する。
【００６７】
転送データチェック部１２３は、ユーザプログラム編集部１１１にて通信性能を向上するための編集が行われたユーザプログラム内にて呼び出されている通信コードを確認して、呼び出されている通信コードの引数のサイズをチェックする。
通信コード通信方式変更部１２６は、転送データチェック部１２３のチェック結果に応じて通信コード内の引数データの受け渡しを行っている処理内容を変更する。
ユーザプログラム通信方式変更部１２４は、転送データチェック部１２３のチェック結果に応じて変更した通信コードに合わせてユーザプログラムの通信コードの呼び出し処理を変更する。
転送データサイズ閾値記憶部１２５は、転送データチェック部１２３のチェック結果の判断基準となる転送データサイズの閾値を記憶する。
【００６８】
ここで、本実施の形態における通信コード生成装置１００の概要を説明する。
通信コード生成装置１００は、関数利用コンピュータ２００に送信される計算結果情報のデータの大きさを調べる転送データチェック部１２３を備える。
そして、通信コード生成装置１００は、関数利用コンピュータ２００に送信される計算結果情報のデータの大きさの閾値を記憶装置に記憶する転送データサイズ閾値記憶部１２５を備える。
そして、通信コード生成装置１００は、転送データチェック部１２３が調べた計算結果情報のデータの大きさが、転送データサイズ閾値記憶部１２５が記憶した計算結果情報のデータの大きさの閾値よりも大きい場合に、関数利用コンピュータ２００に送信される計算結果情報の送信方法を変更するようにユーザプログラムを変更するユーザプログラム通信方式変更部１２４を備える。
【００６９】
本実施の形態において、通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況に応じてＯＳ間（関数利用コンピュータ２００と関数公開コンピュータ３００との間）を転送するデータの受け渡し方法を変更する際の動作を説明する。
通常、ＯＳ間（関数利用コンピュータ２００と関数公開コンピュータ３００との間）のデータの受け渡しを行う方法は、メッセージ通信による方法と双方のＯＳ（コンピュータ）が共有して利用可能な共有メモリを用いる方法がある。共有メモリは例えば、関数利用コンピュータ２００と関数公開コンピュータ３００とが利用可能なサーバなどに備えられる。本実施の形態では、メッセージ通信による方法をデフォルトで適用していることとする。
そして、本実施の形態において、ユーザプログラム編集部１１１が、関数公開コンピュータ３００からの複数の計算結果情報をまとめて受け取るようにソースプログラムを編集した場合に、関数公開コンピュータ３００の関数公開通信部３４０から送信されるデータサイズが大きくなる場合が想定される。その場合、データの受け渡しを行う方法は、メッセージ通信による方法よりも共有メモリを用いる方法の方が効率良い。
【００７０】
転送データチェック部１２３は、ユーザプログラム編集部１１１が編集したユーザプログラム内にて呼び出されている通信コードの引数のデータ型情報からデータサイズをチェックする。（例えば引数が複数有る場合は、全ての引数を加算したサイズを算出する。また、転送データチェック部１２３は、引数のデータ型情報に対応したデータサイズを予めプログラム言語に応じて記憶している。）。そして、転送データチェック部１２３は、チェックしたデータサイズが転送データサイズ閾値記憶部１２５の記憶している閾値を超えるかどうかチェックする。この閾値は、ユーザによって予め設定が可能となっている。また、この閾値は関数利用ＯＳ（関数利用コンピュータ２００）と関数公開ＯＳ（関数公開コンピュータ３００）との間の要求メッセージもしくは応答メッセージのデータサイズとして設定することも可能であるし、関数の引数もしくは戻り値のデータサイズとして設定することも可能である。
転送データチェック部１２３は、チェックしたデータサイズが閾値を超える場合は、通信コード内の引数データの受け渡し処理をメッセージ通信の方法から共有メモリを利用する方法に変更するように、ユーザプログラム通信方式変更部１２４に通知する。ユーザプログラム通信方式変更部１２４は、受け取った変更通知に基づいてユーザプログラムを変更する。
また、転送データチェック部１２３は、ユーザプログラムの変更箇所で呼び出される通信コードも引数データの受け渡し処理をメッセージ通信の方法から共有メモリを利用する方法に変更するように、通信コード通信方式変更部１２６に通知する。通信コード通信方式変更部１２６は、受け取った変更通知にもとづいて通信コードを変更する。
あるいは、転送データチェック部１２３は、ユーザプログラム内にて呼び出されている通信コードの引数に実際に渡されている値を解析する。そして、転送データチェック部１２３は、その解析結果に応じて通信コード内の引数の受け渡し方法を指定するようにユーザプログラム通信方式変更部１２４に通知することも可能である。例えば、引数としてｃｈａｒ型で大きなデータサイズが指定されている場合でも、実際にはユーザが意図的にＮＵＬＬなどの小さなサイズのデータしか渡さないケースもあり、その場合は共有メモリを利用するのではなく、メッセージ通信にて引数を渡した方が性能的に良いと考えられる。
【００７１】
本実施の形態における具体例を説明する。
まず、図１０に示すソースプログラムを実施する場合を想定する。この場合の「ｆｕｎｃ１」「ｆｕｎｃ２」「ｆｕｎｃ３」の戻り値は、図８のインタフェース定義に示す通りｓｈｏｒｔ型である。ここで、例えばｓｈｏｒｔ型のデータサイズは１６ビット、ｌｏｎｇ型のデータサイズは、３２ビットと仮定する。更に転送データサイズ閾値記憶部１２５は、閾値として、関数利用ＯＳ（関数利用コンピュータ２００）と関数公開ＯＳ（関数公開コンピュータ３００）との間でやり取りされる関数の引数または戻り値のデータサイズの上限を３５ビットと記憶していると仮定する。
そして、実施の形態１の説明と同様にユーザプログラム実行部２３０が図１０に示すソースプログラムを実施すると、図１１に示すシーケンスが実施される。ここで図１１における関数利用ＯＳ（関数利用コンピュータ２００）と関数公開ＯＳ（関数公開コンピュータ３００）との間の引数と戻り値のデータサイズを確認する。
図１１に示す要求１メッセージにおいて、引数は図８の「ｆｕｎｃ１」のインタフェース定義に示す「ｓｈｏｒｔ  ｘ」と「ｓｈｏｒｔ  ｙ」とであり、合計で３２ビットとなる。その為、転送データサイズ閾値記憶部１２５の記憶している閾値（３５ビット）以下であるので、転送データチェック部１２３は、引数データの受け渡し処理をメッセージ通信の方法で行うと判断する。引数データの受け渡し処理は、メッセージ通信の方法がデフォルトと設定されているので、転送データチェック部１２３は、特に処理を実施しない。
そして、図１１に示す応答１メッセージにおいて、「ｆｕｎｃ１」の戻り値はｓｈｏｒｔ型の１６ビットであり、同様に戻り値データの受け渡し処理はメッセージ通信の方法で行われる。以下「ｆｕｎｃ２」と「ｆｕｎｃ３」の処理においても、閾値（３５ビット）を超えるデータは発生しない。
一方、ユーザプログラム編集部１１１が編集した図１３に示すユーザプログラムを実施する場合を想定する。ユーザプログラム実行部２３０が図１３に示すユーザプログラムを実施すると、図１４に示すシーケンスが実施される。
そして、応答２メッセージと応答３メッセージとの返信において、「ｆｕｎｃ２」と「ｆｕｎｃ３」との計算結果情報をまとめて返信することになっている為に、データサイズは４８ビットとなる。（図８に示す通り、「ｆｕｎｃ２」の戻り値がｓｈｏｒｔ型の１６ビットであり、「ｆｕｎｃ３」の戻り値がｌｏｎｇ型の３２ビットである為）。この場合、戻り値の合計のデータサイズは、転送データサイズ閾値記憶部１２５の記憶している閾値（３５ビット）を超える。よって、転送データチェック部１２３は、戻り値データの受け渡し処理を、共有メモリを利用する方法に変更すると判断する。そして、転送データチェック部１２３は、ユーザプログラム通信方式変更部１２４と通信コード通信方式変更部１２６とに受け渡し処理方法の変更通知を行う。ユーザプログラム通信方式変更部１２４は、変更通知に基づき、データの受け渡し処理を、共有メモリを利用する方法に変更するようにユーザプログラムを書き換える（図示は省略）。また通信コード通信方式変更部１２６は、変更通知に基づき、データの受け渡し処理を、共有メモリを利用する方法に変更するように通信コードを書き換える（図示は省略）。
【００７２】
本実施の形態により、通信コード生成装置１００は、ユーザに作業負荷をかけずに通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況を解析する。そして、通信コード生成装置１００は、その解析結果に応じて引数データの受け渡し方法を切り替えられるように通信コードとユーザプログラムを変更する。そして、通信コード生成装置１００は、ＯＳ間（関数利用コンピュータ２００と関数公開コンピュータ３００との間）の通信性能を向上することができる。
【００７３】
以上説明の実施の形態１〜４に関して、改めて概要を説明する。
【００７４】
マルチＯＳで動作する組込みシステムやクライアント／サーバシステムに対してＯＳ間の通信処理を仲介する通信スタブコードをインタフェース定義から自動生成する通信コード生成装置１００において（インタフェース定義とは別ＯＳ（通信相手）上にて動作するアプリケーション（ユーザプログラム）から自ＯＳ上で公開している関数の利用を可能とするためのインタフェースを定義したものである）、通信コードを自動生成したい関数の選択や通信コードの生成を指示するための入力部１０１と、別ＯＳに対して公開している関数のインタフェース定義を管理するインタフェース定義格納部１０２と、インタフェース定義格納部１０２に管理されているインタフェース定義を抽出するインタフェース定義抽出部１０３と、インタフェース定義抽出部１０３から抽出したインタフェース定義を一覧表示するインタフェース定義一覧表示部１０４と、インタフェース定義一覧表示部１０４に表示されているインタフェース定義一覧からユーザが入力部１０１を用いて選択したインタフェース定義の通信スタブコード（ソースコード）を自動生成する通信コード自動生成処理部１０５と、通信コード自動生成処理部１０５にて生成した通信スタブコードとソースプログラムの通信性能を向上するための処理をユーザが入力部１０１を用いて指示するソースプログラム解析実行指示部１０６と、ソースプログラム解析実行指示部１０６からの指示を受け通信コード自動生成処理部１０５にて生成された通信スタブコードを実行する（関数呼出し）処理を実装したソースプログラムを読み込むソースプログラム読込み処理部１０７と、インタフェース定義抽出部１０３がインタフェース定義格納部１０２から抽出した通信コード自動生成処理部１０５にて通信スタブコードを生成したインタフェース定義の情報に基づいてソースプログラム読込み処理部１０７にて読み込んだソースプログラムを解析して通信コードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードとその通信スタブコードを実行する処理をソースプログラム中に実装している箇所を抽出するソースプログラム解析処理部１０８と、ソースプログラム解析処理部１０８にて抽出した通信スタブコードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードに対してリアルタイムに応答を待たないように編集する通信コード編集部（関数利用通信コード編集部１１２、関数公開通信コード編集部１１３）と、ソースプログラム解析処理部１０８にて抽出した通信スタブコードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードを実行する処理をソースプログラム中に実装している箇所のプログラムを通信コード編集部（関数利用通信コード編集部１１２、関数公開通信コード編集部１１３）での編集結果に合わせて編集するユーザプログラム編集部１１１とを設けた通信コード生成装置１００について実施の形態１で説明した。
【００７５】
通信コード編集部（関数利用通信コード編集部１１２、関数公開通信コード編集部１１３）にて編集した通信スタブコードの関数名とユーザプログラム編集部１１１にて編集したユーザプログラムの編集箇所と編集内容を記録する通信コード／ユーザプログラム編集ログ記憶部１１８と、ユーザによる入力部１０１からの指示により通信コード／ユーザプログラム編集ログ記憶部１１８から編集箇所や編集内容を抽出する通信コード／ユーザプログラム編集ログ抽出部１１９と、通信コード／ユーザプログラム編集ログ記憶部１１８に記録された編集ログの情報をユーザに表示する通信コード／ユーザプログラム編集ログ表示部１２０とを設けた通信コード生成装置１００について実施の形態２で説明した。
【００７６】
通信コード／ユーザプログラム編集ログ表示部１２０にて表示されたユーザプログラムの編集ログから通信コードを用いて実行した関数からの応答をリアルタイムに受け取りたい箇所をユーザが入力部１０１を用いて任意に１つまたは複数選択した編集ログを抽出する復元対象編集ログ抽出部１２１と、ソースプログラム読込み処理部１０７にて読み込んだユーザプログラム編集部１１１で編集済みのユーザプログラムを復元対象編集ログ抽出部１２１にて抽出した編集ログの情報をもとにユーザが任意に選択した箇所の応答をリアルタイムに受け取れる（要求を出してから応答が返ってくるまで待ち状態にする）ように編集前の状態に戻すユーザプログラム復元部１２２を設けた通信コード生成装置１００について実施の形態３で説明した。
【００７７】
ユーザプログラム編集部１１１にて編集された通信コードの呼び出し処理を実装済みのユーザプログラムに対して通信コードの引数として通信相手に転送するデータのサイズをチェックする転送データチェック部１２３と、転送データチェック部１２３によるチェック結果に応じて通信相手にデータを転送する方法を通信コード内で変更するように通信コードを変更する通信コード通信方式変更部１２６と、転送データチェック部１２３によるチェック結果に応じて変更された通信コードに合わせてユーザプログラム内の通信コードの呼び出し処理を変更するユーザプログラム通信方式変更部１２４を設けた通信コード生成装置１００について実施の形態４で説明した。
【００７８】
以上説明したように実施の形態１〜４における通信コード生成装置１００は、インタフェース定義から生成した通信コードのインタフェース仕様と、通信コードの呼出し処理を実装したユーザプログラムを解析して、通信コード実行時に通信相手先から応答をリアルタイムに受け取る必要のない（複数の応答を一つにまとめて受け取れる）箇所を抽出し、その解析結果に応じて通信コードとユーザプログラムを編集することにより、マルチＯＳ間やクライアント／サーバ間における通信コードを用いた処理の通信性能を向上することが出来る。
【００７９】
なお、既に、説明したように、本実施の形態１〜４に示す通信コード生成装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００８０】
１００  通信コード生成装置、１０１  入力部、１０２  インタフェース定義格納部、１０３  インタフェース定義抽出部、１０４  インタフェース定義一覧表示部、１０５  通信コード自動生成処理部、１０６  ソースプログラム解析実行指示部、１０７  ソースプログラム読込み処理部、１０８  ソースプログラム解析処理部、１０９  関数利用通信スタブコード記憶部、１１０  関数公開通信スタブコード記憶部、１１１  ユーザプログラム編集部、１１２  関数利用通信コード編集部、１１３  関数公開通信コード編集部、１１４  関数利用通信コード記憶部Ａ、１１５  関数公開通信コード記憶部Ａ、１１６  ユーザプログラム記憶部Ａ、１１７  ソースプログラム記憶部、１１８  通信コード／ユーザプログラム編集ログ記憶部、１１９  通信コード／ユーザプログラム編集ログ抽出部、１２０  通信コード／ユーザプログラム編集ログ表示部、１２１  復元対象編集ログ抽出部、１２２  ユーザプログラム復元部、１２３  転送データチェック部、１２４  ユーザプログラム通信方式変更部、１２５  転送データサイズ閾値記憶部、１２６  通信コード通信方式変更部、２００  関数利用コンピュータ、２１０  ユーザプログラム記憶部Ｂ、２２０  関数利用通信コード記憶部Ｂ、２３０  ユーザプログラム実行部、２４０  関数利用通信部、３００  関数公開コンピュータ、３１０  関数記憶部、３２０  関数公開通信コード記憶部Ｂ、３３０  関数計算実行部、３４０  関数公開通信部、３５０  計算結果保留部、５００  コンピュータシステム、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  コンパクトディスク装置、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ローカルエリアネットワーク。
【図１】
2012128581.tif 000003
【図２】
2012128581.tif 000004
【図３】
2012128581.tif 000005
【図４】
2012128581.tif 000006
【図５】
2012128581.tif 000007
【図６】
2012128581.tif 000008
【図７】
2012128581.tif 000009
【図８】
2012128581.tif 000010
【図９】
2012128581.tif 000011
【図１０】
2012128581.tif 000012
【図１１】
2012128581.tif 000013
【図１２】
2012128581.tif 000014
【図１３】
2012128581.tif 000015
【図１４】
2012128581.tif 000016
【図１５】
2012128581.tif 000017
【図１６】
2012128581.tif 000018
【図１７】
2012128581.tif 000019
【図１８】
2012128581.tif 000020
【図１９】
2012128581.tif 000021
【図２０】
2012128581.tif 000022