JP2000148460A - プログラム変換方法 - Google Patents

プログラム変換方法

Info

Publication number
JP2000148460A
JP2000148460A JP10327337A JP32733798A JP2000148460A JP 2000148460 A JP2000148460 A JP 2000148460A JP 10327337 A JP10327337 A JP 10327337A JP 32733798 A JP32733798 A JP 32733798A JP 2000148460 A JP2000148460 A JP 2000148460A
Authority
JP
Japan
Prior art keywords
code
class
program
data
argument
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP10327337A
Other languages
English (en)
Inventor
Takayuki Saito
隆之 斉藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Vision Laboratories Corp
Original Assignee
Digital Vision Laboratories Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Vision Laboratories Corp filed Critical Digital Vision Laboratories Corp
Priority to JP10327337A priority Critical patent/JP2000148460A/ja
Publication of JP2000148460A publication Critical patent/JP2000148460A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 プログラム開発者が簡単に作成できるプログ
ラム変換方法を提供する。 【解決手段】 トランスレータ62は、第1のオブジェ
クトを特定するオブジェクト参照データを第2のオブジ
ェクトに格納することを示す第1のコードと、第2のオ
ブジェクトのメッセージ通信用のメソッドを呼び出し
て、第1のオブジェクトとの間で通信を行うことを示す
第2のコードとを有するプログラムを変換する場合に、
第2のコードの記述内容から、メッセージ通信用のメソ
ッドの引数のデータ型および引数の並びを特定し、当該
特定した結果に基づいて、メッセージ通信用のメソッド
が第2のオブジェクトのクラスのメソッドであること
と、当該メソッドの引数のデータ型および引数の並びと
を明示して第2のオブジェクトのクラスを定義する第3
のコードを自動的に生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ネットワークを介
して複数のコンピュータを接続した並行分散処理システ
ム上で動作するアプリケーションプログラムをコンパイ
ルする際に用いられるプログラム変換方法に関する。
【0002】
【従来の技術】並列分散処理システムでは、ネットワー
クを介して異なるコンピュータ上で動作するプログラム
に応じて各コンピュータ上に分散オブジェクトが生成さ
れ、ネットワークを介して分散オブジェクト相互間でメ
ッセージ通信が行われる。並列分散処理システムの代表
的なものに、CORBA(Common Object RequestBroker
Architecture) −ORB(Object Request Broker) や
Java RMIなどがある。図16は、CORBAに
おけるアプリケーション相互間のインタフェースを説明
するための図である。このCORBA−ORBは、分散
オブジェクト相互間での通信を含むプログラムの記述を
簡単にするために、アプリケーションの開発者が、C、
C++およびJavaなどのプログラム言語で記述した
クライアント・アプリケーションプログラムおよびサー
バ・アプリケーションプログラムとは別に、クライアン
トとサーバとの間のインタフェース定義プログラムを、
IDL(Interface DefinitionLanguage: インタフェー
ス記述言語) を用いて記述する。
【0003】そして、インタフェース定義プログラムを
IDLコンパイラでコンパイルすることにより、クライ
アント用のスタブとサーバ用のスケルトンとを生成す
る。スタブは、クラインアント・アプリケーションプロ
グラムに、IDLで定義されたオペレーション群に対し
てのアクセスを提供するルーチン群であり、スタブが提
供するプロキシー(Proxy:代理機能)をクライアント・
アプリケーションが呼び出すことで、オペレーションが
起動される。このとき、オブジェクトの位置やネットワ
ーク・インタフェースの詳細は、スタブ以下の層に隠蔽
され、アプリケーションはこれらを意識する必要はな
い。一方、スケルトンは、サーバ・アプリケーションが
提供するメソッドを起動するためのディスパッチ(処
理)を行うプロキシーを提供する。ここでも、ネットワ
ーク・インタフェースの詳細は、スケルトン以下の層に
隠蔽されている。なお、IDLコンパイラは、スタブと
スケルトンとを、それぞれクライアント・アプリケーシ
ョンとサーバ・アプリケーションとが使用するプログラ
ム言語で生成する。
【0004】そして、クライアント側では、クライアン
ト・アプリケーションプログラムと、スタブとをそれぞ
れコンパイルした後にリンクすることで実行プログラム
を作成する。同じく、サーバ側でも、サーバ・アプリケ
ーションプログラムとスケルトンとをそれぞれコンパイ
ルした後にリンクすることで実行プログラムを作成す
る。
【0005】以下、インタフェース定義プログラム、サ
ーバ・アプリケーションプログラムおよびクライアント
・アプリケーションプログラムのJava RMIにお
ける一例について説明する。図17(A)はインタフェ
ース定義プログラムの一例、図17(B)はサーバ・ア
プリケーションプログラムの一例、図17(C)はクラ
イアント・アプリケーションプログラムの一例であり、
プログラム言語「Java」で記述されている。ここで
は、クライアント・アプリケーションプログラム内のク
ラスEchoClientが、サーバ・アプリケーショ
ンプログラム内のクラスEchoのメソッドechoを
呼び出す場合を例示している。図17(A)に示すよう
に、インタフェース定義プログラムは、クラスEcho
が、文字列を引数とするメソッドechoを持つことを
定義している。当該インタフェース定義プログラムは、
インタフェースのマッピングを定義しており、実行体の
記述は含まない。また、図17(B)に示すように、サ
ーバ・アプリケーションプログラムは、コード(1)に
おいて、クラスEchoを定義しており、コード(2)
において、クラスEchoが、引数および戻り値が文字
列のメソッドechoを持つことを示しており、コード
(3)において、メソッドechoが、呼び出しの際の
文字列の引数をそのまま戻り値として返すことを示して
いる。
【0006】また、図17(C)に示すように、クライ
アント・アプリケーションプログラムは、コード(4)
において、クラスNamingのメソッドlookup
を呼び出してリモートホスト(サーバ)のクラスEch
oのオブジェクトへの参照を得て、当該参照をクラスE
cho型のオブジェクトeに格納する。ここで、クラス
Echoは、図17(A)に示すインタフェース定義プ
ログラム内でメソッドechoを持つことが定義されて
いるため、オブジェクトeは、リモートに存在するオブ
ジェクトEchoを呼び出すプロキシーオブジェクトと
して振る舞う。なお、クラスNamingの定義は、例
えばクライアント側のライブラリ内に存在する。また、
コード(5)において、プロキシーオブジェクトeのメ
ソッドechoを呼び出すことにより、リモートに存在
するオブジェクトの呼び出しを行っている。ここで、プ
ロキシーオブジェクトのメソッドは、ローカルオブジェ
クトのメソッドの場合と同じ記述形式で呼び出しが可能
であり、リモート呼び出しの手続きの詳細は、IDLコ
ンパイラによって生成されるスタブ以下の層に隠蔽して
記述される。また、コード(6)において、コード
(5)で呼び出したメソッドechoの戻り値を画面に
出力することを示している。
【0007】図17に示すプログラムによるメソッド呼
び出し形態は、例えば図18に示すように視覚化して表
現できる。図18に示すように、図17に示すプログラ
ムでは、クライアント・アプリケーションプログラムの
オブジェクトEchoClientが、プロキシーオブ
ジェクトeのメソッドechoを呼び出すという記述形
式(e.echo)で、サーバ・アプリケーションプロ
グラムのオブジェクトEchoのメソッドechoを呼
び出している。
【0008】
【発明が解決しようとする課題】しかしながら、上述し
た従来の手法では、プログラム開発者は、C,C++あ
るいはJavaなどのプログラム言語によるサーバ・ア
プリケーションプログラムおよびクライアント・アプリ
ケーションプログラムを作成する他に、IDLによるイ
ンタフェース定義プログラムを作成する必要がある。そ
のため、プログラム開発者は、IDLについての知識も
有している必要があり、アプリケーションによるプログ
ラム開発の負担が大きいという問題がある。このような
問題を解決するために、クライアントとサーバとの間の
インタフェースを、プログラム言語C++やJavaを
用いてアプリケーションプログラム内に記述することも
可能であるが、プログラマが明示して記述しなければな
らないインタフェースに関するコードの数が大幅に増加
してしまうという問題がある。
【0009】また、例えばプログラム言語「Java」
などのオブジェクト指向プログラム言語を用いたプログ
ラムでは、「オブジェクトに対しての処理を、当該オブ
ジェクトのメソッドとして記述し、当該オブジェクトの
メソッドを呼び出すという形態で当該オブジェクトに対
しての処理を記述する」というプログラム構築思想に沿
ってプログラミングを行うことが多い。そのため、分散
オブジェクト相互間での通信を記述するコードも、この
ようなプログラム構築思想に基づいて記述したいという
要請がある。しかしながら、このようなプログラム構築
思想に基づいてプログラミングを行うと、オブジェクト
のクラスの定義内のメソッドに関してのコード数が増加
し、プログラマの負担が大きくなるという問題がある。
【0010】本発明は上述した従来技術の問題点に鑑み
てなされ、IDLなどを用いたインタフェース定義プロ
グラムを別途作成する必要がなく、しかも、他のプロセ
スとの間のメッセージ通信の記述を含むプログラムを、
プログラム開発者が簡単に作成できるプログラム変換方
法を提供することを目的とする。
【0011】
【課題を解決するための手段】上述した従来技術の問題
点を解決し、上述した目的を達成するために、本発明の
プログラム変換方法は、ネットワークを介して接続され
た他のコンピュータ上の他のプロセスあるいは同一のコ
ンピュータ上の他のプロセスが管理する第1のオブジェ
クトとの間で通信を行うプロセスの手順を記述したプロ
グラムを変換するプログラム変換方法であって、前記第
1のオブジェクトを特定するオブジェクト参照データを
第2のオブジェクトに格納することを示す第1のコード
と、前記第2のオブジェクトのメッセージ通信用のメソ
ッドを呼び出して、前記第1のオブジェクトとの間で通
信を行うことを示す第2のコードとを有するプログラム
を変換する場合に、前記プログラムを解析し、前記第2
のコードの記述内容から、前記メッセージ通信用のメソ
ッドの引数のデータ型および引数の並びを特定し、当該
特定した結果に基づいて、前記メッセージ通信用のメソ
ッドが前記第2のオブジェクトのクラスのメソッドであ
ることと、当該メソッドの引数のデータ型および引数の
並びとを明示して前記第2のオブジェクトのクラスを定
義する第3のコードを自動的に生成する。
【0012】また、本発明のプログラム変換方法は、好
ましくは、前記メッセージ通信用のメソッドの引数とし
て、前記第1のオブジェクトのメソッドを特定する前記
第2のオブジェクトの変数が記述されている場合に、前
記変数が前記第2のオブジェクト内の変数であることを
さらに明示して前記第2のオブジェクトのクラスを定義
する前記第3のコードを自動的に生成する。
【0013】また、本発明のプログラム変換方法は、好
ましくは、前記プログラムは、他のプロセスに存在する
クラスを特定するクラス参照データを格納するリモート
クラスのコンストラクタを呼び出して、他のプロセスに
存在するクラスを特定するクラス参照データを得て、当
該得たクラス参照データを前記リモートクラス型の第3
のオブジェクトに格納することを示す第4のコードをさ
らに有し、前記第1のコードは、前記第3のオブジェク
トのオブジェクト生成用のメソッドを呼び出して、前記
第1のオブジェクトを生成し、当該生成した前記第1の
オブジェクトを特定するオブジェクト参照データを前記
第2のオブジェクトに格納することを示す場合に、前記
第4のコードおよび前記第1のコードの記述内容から、
前記オブジェクト生成用のメソッドの引数のデータ型お
よび引数の並びとを特定し、当該特定した結果に基づい
て、前記コンストラクタが前記リモートクラスのコンス
トラクタであることと、当該コンストラクタの引数のデ
ータ型および引数の並びと、前記オブジェクト生成用の
メソッドが前記リモートクラスのメソッドであること
と、当該メソッドの引数のデータ型および引数の並びと
を明示して前記リモートクラスを定義する第5のコード
を自動的に生成する。
【0014】また、本発明のプログラム変換方法は、好
ましくは、前記メッセージ通信用のメソッドの引数は、
前記第1のオブジェクトのメソッドを特定するメソッド
参照データと、当該メソッドに与える引数データとを含
み、前記メッセージ通信用のメソッドは、前記メソッド
参照データで特定される前記第1のオブジェクトのメソ
ッドに、前記引数データを与える手続きである。
【0015】また、本発明のプログラム変換方法は、好
ましくは、前記メッセージ通信用のメソッドは、前記第
1のオブジェクトのメソッドが前記与えられた引数デー
タを用いて処理を行った結果を戻り値として受け取るま
で同期待ち状態になることを示す手続きである。
【0016】また、本発明のプログラム変換方法は、好
ましくは、前記第2のコードの記述内容から、前記メッ
セージ通信用のメソッドの戻り値のデータ型を特定し、
当該特定した結果に基づいて、前記メッセージ通信用の
メソッドの戻り値のデータ型をさらに明示して前記第2
のオブジェクトのクラスを定義する前記第3のコードを
自動的に生成する。
【0017】また、本発明のプログラム変換方法は、好
ましくは、前記プログラムは、前記第2のオブジェクト
の前記メッセージ通信用のメソッドを実行して前記第1
のオブジェクトから受け取った戻り値を最初に用いて処
理を行うことを示す第6のコードを有し、前記第2のコ
ードの前記メッセージ通信用のメソッドが、前記第1の
オブジェクトのメソッドに引数データを与えた後、当該
第1のオブジェクトのメソッドから受け取る前記戻り値
を用いた処理を行う際に、当該戻り値を受け取っていな
いときに同期待ちを行うことを示す場合に、少なくとも
前記第1のオブジェクトへの参照を示すオブジェクト参
照データと、当該第1のオブジェクトのメソッドへの参
照を示すメソッド参照データと、引数データとを用いた
コンストラクタと、メッセージを送信するための第1の
メソッドと、戻り値を受け取るための第2のメソッドと
を有するメッセージディスクリプタークラスの定義を自
動的に生成し、前記第2のコードを、前記コンストラク
タを呼び出して生成したメッセージディスクリプターク
ラスのオブジェクトの前記第1のメソッドを呼び出して
前記第1のオブジェクトにメッセージを送信する記述に
自動的に置き換え、前記第6のコードを、前記コンスト
ラクタを呼び出して生成したメッセージディスクリプタ
ークラスのオブジェクトの前記第2のメソッドを呼び出
して受け取った前記戻り値を用いて前記処理を行う記述
に自動的に置き換える。
【0018】また、本発明のプログラム変換方法は、好
ましくは、オブジェクトを引数として前記他のプロセス
との間でメッセージ通信を行う場合に、前記プロセスの
手順を記述したプログラム言語の種類に依存した内部表
現形式と、前記プログラム言語の種類に依存しない共通
表現形式との間でデータ変換を行うメソッドを前記オブ
ジェクトのクラスの定義内に自動的に記述する。
【0019】また、本発明のプログラム変換方法は、好
ましくは、前記共通表現形式のオブジェクトは、引数デ
ータ本体と、当該引数データ本体のデータ型および引数
データの並びに関しての情報と、前記引数データ本体が
グラフ構造をしている場合には、その構造に関して情報
とを含んでいる。
【0020】また、本発明のプログラム変換方法は、好
ましくは、前記プログラムは、オブジェクト指向プログ
ラム言語を用いて記述されている。
【0021】
【発明の実施の形態】以下、本発明のプログラム変換方
法を採用した本発明の実施形態に係わるトランスレータ
について説明する。
【0022】本実施形態のトランスレータの概要 本実施形態のトランスレータは、並列分散処理システム
(分散プラットフォーム)上のコンピュータで実行され
るネットワークを介した通信手続きを含むアプリケーシ
ョンプログラムをコンパイルしてアセンブリコードもし
くは機械語コードを生成する際に用いられ、当該アプリ
ケーションプログラムをユーザが記述する際の負担を軽
減するものである。具体的には、本実施形態のトランス
レータは、IDLで記述したインタフェース定義プログ
ラムを用いない場合にも、アプリケーションプログラム
内のAPI(Application Programming Interface) レベ
ルでのメッセージ通信の記述を簡単にする。例えば、本
実施形態のトランスレータは、アプリケーションープロ
グラムをトレースして、メッセージ通信に関わる手続き
や、ユーザ定義のクラスのデータ形式を変換するメソッ
ド(パックイン/エクスパンド)などを自動生成する。
【0023】並列分散処理システム 以下、本実施形態のトランスレータを組み込んだコンパ
イラを用いてアプリケーションプログラムを変換して得
られた実行プログラムが実行される並列分散処理システ
ムについて説明する。本実施形態においては、複数のコ
ンピュータがネットワークを介して接続された並列分散
処理システムであって、各コンピュータがネットワーク
を介して通信を行いながら協調して所望の計算処理を行
うような、分散処理環境を提供する並列分散処理システ
ムを例示して本発明を説明する。
【0024】図1は、本実施形態の並列分散処理システ
ムの全体構成を模式的に示す図である。本実施形態の並
列分散処理システムは、インターネットや、CATV
網、衛星通信など多様な通信メディアが混在して構成さ
れるネットワーク環境において、ネットワーク上の分散
リソースを論理的に一体の計算環境として捉え、分散処
理環境を提供するものである。ここで、分散リソースと
は、コンピュータのハードウェア機能に加えて、データ
ベースや高性能計算サーバ、WWWページの情報ソース
など、任意の計算機能を提供するものである。また、そ
の計算とは、広い範囲の種々の処理の実行を含むものと
する。
【0025】このような分散処理環境上に、計算実体で
あるオブジェクトが配置され、計算空間を形成する。な
お、計算空間は、同一のネットワーク環境上に複数のも
のをそれぞれ個別に形成することができる。オブジェク
トは、具体的には、リモート呼出可能な分散オブジェク
ト、分散関数、あるいは、ネットワークを介して参照可
能な共有変数(大域共有変数)である。そして、これら
により、分散オブジェクト指向計算、分散関数(手続
き)呼び出しおよび大域共有変数処理という各計算が、
並行的に行われる。
【0026】このような計算を行うための、オブジェク
トのメソッドおよび分散関数の呼び出しや、大域共有変
数へのアクセスというオブジェクト間の通信は、非同
期メッセージ送信(Send:戻り値なしの一方向の通
信)、遅延評価型同期呼び出し(Call:同期呼び
出しを行った後、戻り値を用いた処理を行う際に、当該
戻り値を受け取っていないときに当該戻り値を受け取る
まで呼び出し側が待ち状態になる)、完全同期呼び出
し(syncCall:同期呼び出しを行うと、戻り値
を受け取るまで呼出側が待ち状態になる)という3種類
の方法により行う。なお、これらの通信を総称してメッ
セージ通信と呼ぶ。すなわち、このような並列分散処理
システムは、ネットワーク上に分散配置されたオブジェ
クトが、メッセージ通信によって並行計算を各々順次実
行し、メッセージの連鎖によって全体として所望の計算
を進行させるシステムと言うことができる。
【0027】計算空間に配置される各オブジェクトは、
図2に示すように、コンピュータ上で動作するプロセス
を用いて管理される。プロセスは、オブジェクト間のメ
ッセージ通信機能などを提供する、オブジェクトのため
の計算環境である。そのため、プロセスは、APIと、
OSやハードウェアに対するシステムインターフェース
を備え、プログラミング言語やOS、ハードウェア、ネ
ットワークといった実行環境の違いに適応して稼働でき
るようになっている。また、メッセージは、異なる言語
間でも送信可能であり、任意のデータ構造体を引数とし
て扱えるようになっている。その結果、このようなプロ
セスの集合として得られる実行環境は、大域空間上で共
通の仮想的計算環境として機能する。
【0028】すなわち、本実施形態の並列分散処理シス
テムでは、分散オブジェクトの生成、分散オブジェクト
と分散手続きの管理、これら実行体へメッセージを送信
するメッセージ通信機能は、各コンピュータ上で動作す
るプロセスのAPI(Application Programming Interfa
ce) 部によって提供される。
【0029】メッセージ通信機能 以下、並列分散処理システム内のコンピュータ上で各々
動作する分散オブジェクト相互間でのメッセージ通信を
説明する。図3は、並列分散処理システム内のコンピュ
ータ上で各々動作する分散オブジェクト相互間でのメッ
セージ通信を説明するための図である。図3では、クラ
イアントとなるコンピュータ上で動作する分散オブジェ
クト12が、サーバとなるコンピュータ上で動作する分
散オブジェクト13の機能(メソッドなど)を呼び出す
際に、分散オブジェクト12から分散オブジェクト13
にメッセージが送信される場合の動作を示している。
【0030】図3に示すように、分散オブジェクト12
から同じクライアント上で動作するプロセス10のAP
I部14にメッセージの送信要求が出力され、当該メッ
セージの引数がAPI部(プログラム言語依存部)によ
って内部表現形式から共通表現形式に変換される。ここ
で、共通表現形式とはプロセッサ、OSおよびアプリケ
ーションプログラムのプログラム言語に依存しないデー
タ形式であり、共通表現形式の引数には、引数データ本
体と、当該引数データ本体のデータ型および並びに関し
ての情報と、引数データ本体がリスト構造などのグラフ
構造をしている場合にはその構造に関しての情報とを含
んでいる。また、内部表現形式とは、プロセッサ、OS
およびアプリケーションプログラムのプログラム言語に
依存したデータ形式である。
【0031】そして、共通表現形式の引数、メッセージ
宛先の参照情報と通信メディア指定、ならびに送信元参
照情報が、メッセージ・パッシング・オペレータ16の
メッセージ・センダ17に引き渡される。
【0032】そして、メッセージ・センダ17が、必要
に応じてメッセージ宛先の参照情報と通信メディア指定
を参照解決部18によって解決(変換、展開)し、その
解決結果によって各種通信手段(プロセス内通信、ノー
ド内プロセス間通信、ノード間通信)が選択される。そ
して、プロセス10内での通信の場合には、メッセージ
・センダ17によってメッセージが宛先分散オブジェク
トあるいは、手続きに伝達される。また、同一のクライ
アント上の異なるプロセス間通信の場合には、OSが提
供するプロセス間通信機能(IPC)を使用してメッセ
ージが宛先プロセスのメッセージ通信部に伝達される。
さらに、ネットワーク20を介して接続されたサーバー
となるコンピュータ上で動作する分散オブジェクト13
との間での通信の場合には、通信メディア指定によって
通信メディアI/F19が選択され、送信元参照情報、
解決された宛先参照情報(ネットワークアドレス、プロ
セス識別子、分散オブジェクト識別子とメソッド識別
子、もしくは手続き識別子)と共通表現形式の引数デー
タとが、通信メディアI/F19およびネットワーク2
0を介して、サーバ上で動作するプロセス11に引き渡
される。
【0033】メッセージを受信した通信メディアインタ
フェースI/F21は、メッセージ・パッシング・オペ
レータ22を別スレッドとして呼び出し、送信元ならび
に宛先参照情報と共通表現形式の引数とを引き渡す。
【0034】そして、メッセージ・パッシング・オペレ
ータ22のディスパッチャ23は、宛先参照情報(リモ
ートID:並列分散処理システム内でユニークな識別
子)を参照解決部によってローカルID(プロセス内で
ユニークな識別子)に変換した後、共通部24にメッセ
ージを引き渡す。共通部24は、ローカルIDとアドレ
スの対応表をもっており、ローカルIDから分散オブジ
ェクトもしくは手続き(関数)のアドレスを特定する。
【0035】ここで、ユーザ定義型のメソッド、手続き
は、共通部24内から直接呼び出されるのではなく、A
PI部25内に組み込まれたインタフェース関数を通し
て呼び出される。このインタフェース関数は、個々のメ
ソッド・手続きの特性(引数や戻り値など)に柔軟に対
処するため、各メソッド・手続きごとにトランスレータ
によって生成されてAPI部25内に組み込まれるもの
で、ユーザ定義のメソッド、手続きの前処理、呼び出
し、後処理をおこなう。前処理として、共通表現形式で
届いたメッセージの引数の内部表現形式への変換・展開
(エクスパンド)を行い、後処理として、戻り値の共通
表現形式への変換(パックイン)とAPI共通部24へ
の引き渡しをおこなう(戻り値の処理は、メッセージが
戻り値を要求している場合に限っておこなわれる)。
【0036】API部25はインタフェース関数から引
き渡された戻り値をメッセージの送信元へ送信するよう
メッセージ・パッシング・オペレータ22に依頼する。
この戻り値は、メッセージ着信時の経路を遡りメッセー
ジ送信元スレッドに渡される。
【0037】本実施形態のトランスレータの詳細 〔本実施形態のトランスレータの位置づけ〕先ず、本実
施形態のトランスレータの位置づけについて説明する。
なお、本実施形態では、プログラム言語「Java」で
記述されたアプリケーションプログラムを処理するため
に用いられるトランスレータを例示して説明するが、本
発明は、例えば「C++」などのその他のプログラム言
語で記述されたアプリケーションプログラムを処理する
場合にも適用可能である。
【0038】図4は、アプリケーションプログラム50
から実行コード73を生成するまでの過程を説明するた
めの図である。ここで、図4に示す処理は、サーバ側の
アプリケーションプログラムおよびクライアント側のア
プリケーションプログラムのそれぞれについて個別に行
われる。図4に示すように、トランスレータ62は、ア
プリケーションプログラム50に対して、ライブラリ6
5を参照した「Java」コンパイラ61におけるコン
パイル処理を順に行って実行コード73を生成する過程
で、「Java」コンパイラ61におけるコンパイル処
理時に、アプリケーションプログラム70に含まれるメ
ッセージ通信に係わる記述について翻訳および新たなク
ラスおよびメソッドなどの生成処理を行う。
【0039】トランスレータ62は、図5に示すよう
に、アプリケーションプログラム50をトレースして構
文解析し、メッセージ通信に係わる記述の引数のデータ
型および引数並びを判別して、新規生成コード52を生
成し、生成した新規生成コード52を「Java」コン
パイラ61に出力する。「Java」コンパイラ61
は、アプリケーションプログラム50に含まれる分散プ
ログラミングに係わる記述を除く記述の字句解析や構文
解析などを行い、その処理結果と、トランスレータ62
から入力した新規生成コード52とを、ライブラリ65
を参照しながらコンパイルして実行コード73を生成す
る。
【0040】なお、本実施形態において用いられるクラ
ス、オブジェクト、インスタンスおよびメソッドなどの
用語は、オブジェクト指向プログラミングにおいて、一
般的に使用されているものである。
【0041】〔本実施形態のトランスレータ62で処理
されるアプリケーションプログラム50〕第1の例 トランスレータ62で処理されるアプリケーションプロ
グラム50としては、例えば、図3に示すサーバ上で動
作するプロセス11を生成するためのサーバ・アプリケ
ーションプログラム501 と、図3に示すクライアント
上で動作するプロセス10を生成するためのクライアン
ト・アプリケーションプログラム502とがある。アプ
リケーションプログラム501 ,502 は、それぞれ前
述した図4に示すように、トランスレータ62および
「Java」コンパイラ61の処理を経て、実行コード
73となる。このとき、サーバ・アプリケーションプロ
グラム501から得られた実行コード73を実行するこ
とによって図3に示すプロセス11が生成され、クライ
アント・アプリケーションプログラム502 から得られ
た実行コード73を実行することによって図3に示すプ
ロセス10が生成される。
【0042】図6(A)はサーバ・アプリケーションプ
ログラム501 の一例の一部を示す図、図6(B)はク
ライアント・アプリケーションプログラム502 の一例
の一部を示す図、図6(C)はクライアント・アプリケ
ーションプログラム502 をトランスレータ62で処理
して生成される新規生成コード52の一例の一部を示す
図であり、これらはプログラム言語「Java」で記述
されている。
【0043】図6(A)に示すように、サーバ・アプリ
ケーションプログラム501 は、コード(11)におい
て、クラスEchoを定義しており、コード(12)に
おいて、クラスEchoがメソッドechoを持ち、メ
ソッドechoの引数および戻り値が文字列型であるこ
とを示しており、コード(13)において、メソッドe
choが文字列の引数をそのまま戻り値として返すこと
を示している。
【0044】また、図6(B)に示すように、クライア
ント・アプリケーションプログラム502 は、クラスE
choClientを定義している。クラスEchoC
lientは、コード(14)〜(17)によって定義
される。コード(14)は、クラスRemoteCla
ssのコンストラクタRemoteClassを呼び出
しており、リモート呼び出しを行うオブジェクトのクラ
スの名前”Echo”と、当該クラスが属するパッケー
ジの名前”myPackage”と、当該クラスが存在
するプロセスの名前”MyServer”とを引数とし
て与えている。また、コード(14)は、当該コンスト
ラクタを実行して、クラスEchoへの参照を、Rem
oteClass型の参照オブジェクトrcに格納する
ことを示している。なお、コンストラクタとは、クラス
と同じ名前を持ち、当該クラスのオブジェクトを自動的
に初期化するメソッドである。
【0045】コード(15)は、参照オブジェクトrc
のメソッドcreateObject()を呼び出し、
クラスEchoのオブジェクトを、クラスEchoが存
在するプロセス上に生成し、当該生成したオブジェクト
への参照を、RemoteInstance型の参照オ
ブジェクトriに格納している。ここで、メソッドcr
eateObject()の実体は、クライアント側の
ライブラリ65に存在しているが、クラスRemote
ClassがメソッドcreateObject()を
持つことの定義は、クライアント・アプリケーションプ
ログラム502 およびクライアント側のライブラリ65
のいずれにも存在せず、トランスレータ62によって自
動的に生成される。
【0046】コード(16)は、参照オブジェクトri
のメソッドsyncCallを呼び出し、当該メソッド
syncCallの引数として、呼び出しを行うメソッ
ドのメソッド名”echo”および当該呼び出しを行う
メソッドに与える引数arg
〔0〕を与えている。ま
た、コード(16)は、呼び出した参照オブジェクトr
iのメソッドからの戻り値を、文字列型の変数echo
Messageに格納することを示している。ここで、
コード(16)に応じた処理が実行されると、メソッド
syncCallに基づいて、リモートにechoメソ
ッドの呼び出しを行った後、戻り値を受け取るまで待ち
状態になる
【0047】このように、コード(16)では、他のプ
ロセス(リモート)に存在する呼び出し先のEchoオ
ブジェクトへの参照を格納する参照オブジェクトriの
メソッドとして、当該呼び出し先のオブジェクトEch
oのメソッドechoに呼び出しメッセージを送信する
メッセージ通信機能であるsyncCallを記述して
いる。コード(16)によるメソッド呼び出し形態は、
例えば図7に示すように視覚化して表現できる。図7に
示すように、コード(16)では、クライアント・アプ
リケーションプログラム502 のオブジェクトEcho
Clientが、リモートに存在するEchoオブジェ
クトへの参照を格納する参照オブジェクトriのメソッ
ドsyncCallを用いて、メソッドsyncCal
lの引数である文字列”echo”で特定されるオブジ
ェクトEchoのメソッドechoを呼び出している。
【0048】このように、リモートに存在するオブジェ
クトへの参照を示すクラス内に、当該リモートに存在す
るオブジェクトと通信を行うメソッドを記述すること
で、例えばプログラム言語「Java」などのオブジェ
クト指向プログラム言語を用いたプログラムにおける
「オブジェクトに対しての処理を、当該オブジェクトの
メソッドとして記述し、当該オブジェクトのメソッドを
呼び出す形式で当該オブジェクトに対しての処理を記述
する」というプログラム構築思想に沿ったプログラミン
グが可能になる。
【0049】ここで、メソッドsyncCallは、メ
ッセージ通信用のメソッドであり、その実体は、クライ
アント側のライブラリ65に存在しているが、インスタ
ンスRemoteInstanceがメソッドsync
Callを持つことの定義は、クライアント・アプリケ
ーションプログラム502 およびクライアント側のライ
ブラリ65のいずれにも存在せず、トランスレータ62
によって自動的に生成される。
【0050】コード(17)は、変数echoMess
ageに格納されている文字列を表示することを示して
いる。
【0051】次に、図6(A)に示すサーバ・アプリケ
ーションプログラム501 を変換して生成された実行コ
ードを実行して生成されたプロセスと、クライアント・
アプリケーションプログラム502 を変換して生成され
た実行コードを実行して生成されたプロセスと間でのメ
ッセージ通信処理について説明する。先ず、クライアン
ト側のコンピュータ上のプロセスにおいて、図6(B)
にコード(14)に基づいて、サーバ側のコンピュータ
上にプロセスが持つクラスEchoへの参照を要求する
ことを示すメッセージが、サーバ側のプロセスに送信さ
れ、サーバ側のプロセスから受け取った当該参照が、R
emoteClass型の参照オブジェクトrcに格納
される。
【0052】次に、クライアント側のプロセスにおい
て、図6(B)に示すコード(15)に基づいて、参照
オブジェクトrcのメソッドcreateObject
()が実行され、サーバ側のプロセス内に、クラスEc
hoのオブジェクトが生成される。そして、当該生成さ
れたオブジェクトへの参照が、サーバ側のプロセスから
クライアント側のプロセスに送信され、クライアント側
のプロセスにおいて、当該参照が、RemoteIns
tance型の参照オブジェクトriに格納される。
【0053】次に、クライアント側のプロセスにおい
て、図6(B)に示すコード(16)に基づいて、参照
オブジェクトriのメッセージ通信用のメソッドsyn
cCallが実行され、メソッドsyncCallの引
数として、リモートに存在するメソッドechoのメソ
ッド名と、当該メソッドechoに与える引数とが与え
られる。そして、サーバ側のプロセスにおいて、参照オ
ブジェクトriで特定されるオブジェクトのメソッドe
choが実行され、その戻り値がクライアント側のプロ
セスに送信される。クライアント側のプロセスは、戻り
値を受けると、当該戻り値を、変数echoMessa
geに格納する。
【0054】次に、クライアント側のプロセスにおい
て、図6(B)に示すコード(17)に基づいて、変数
echoMessageに格納されている戻り値が表示
される。
【0055】第2の例 トランスレータ62で処理されるアプリケーションプロ
グラム50としては、前述した図6に示す例の他に、図
3に示すサーバ上で動作するプロセス11を生成するた
めの図8(A)に示すサーバ・アプリケーションプログ
ラム1501 と、図8(B)に示すクライアント上で動
作するプロセス10を生成するためのクライアント・ア
プリケーションプログラム1502 とを用いてもよい。
ここで、図8(A)に示すサーバ・アプリケーションプ
ログラム1501 は、図6(A)に示すサーバ・アプリ
ケーションプログラム501 と同じである。
【0056】図8(B)に示すクライアント・アプリケ
ーションプログラム1502 のコード(14),(1
5),(17)は、図6(B)に示すクライアント・ア
プリケーションプログラム502 のコード(14),
(15),(17)と同じである。一方、コード(3
1)は、参照オブジェクトriのメソッドとして、メッ
セージ通信用のsyncCallを呼び出している点
は、図6(B)に示すコード(16)と同じであるが、
当該syncCallの引数に、呼び出しを行うメソッ
ドの文字列型のメソッド名”echo”を与えるのでは
なく、参照オブジェクトriが持つ変数echo(r
i.echo)を与える点が異なる。すなわち、オブジ
ェクトriが持つ変数によって、呼び出し先のメソッド
を特定する。
【0057】コード(31)によるメソッド呼び出し形
態は、例えば図9に示すように視覚化して表現できる。
図9に示すように、コード(31)では、クライアント
・アプリケーションプログラム1502 のオブジェクト
EchoClientが、リモートに存在するオブジェ
クトEchoへの参照を示す参照オブジェクトriのメ
ソッドsyncCallを用いて、参照オブジェクトr
iの変数echoで特定されるリモートに存在するオブ
ジェクトEchoのメソッドechoを呼び出してい
る。
【0058】〔トランスレータ62の処理〕トランスレ
ータ62は、図5を用いて前述した処理を行う。第1の例 以下、図6(B)に示すクライアント・アプリケーショ
ンプログラム502 をトランスレータ62で処理して新
規生成コード52を生成する場合を例示して、トランス
レータ62の処理を説明する。図6(B)に示すクライ
アント・アプリケーションプログラム502 が、トラン
スレータ62によって、トレースおよび構文解析され、
コード(14)において、クラスRemoteClas
sのコンストラクタRemoteClassが呼び出さ
れ、コード(15)において、RemoteClass
型の参照オブジェクトrcがcreateObject
()をメソッドとして持つことが解析される。そして、
トランスレータ62によって、新規生成コード52内
に、図6(C)に示すように、クラスRemoteCl
assを定義するコード(18),(19),(20)
が記述される。ここで、コード(19)は、クラスRe
moteClassが、コンストラクタRemoteC
lassを有し、3個の文字列型の引数が与えられるこ
とを定義している。また、図中{・・・}で省略化して
いるが、当該箇所にコンストラクタRemoteCla
ssの実行体が記述される。また、コード(20)は、
戻り値がRemoteInstance型であり、引数
を持たないメソッドcreateObject()をク
ラスRemoteClassが持つことを定義してい
る。また、図中{・・・}で省略化しているが、当該箇
所にメソッドcreateObject()の実行体が
記述される。
【0059】また、トランスレータ62によって、図6
(B)に示すクライアント・アプリケーションプログラ
ム502 から、クラスRemoteInstance
が、2個の文字列型の引数を持つメソッドsyncCa
llを持つことが解析され、新規生成コード52内に、
そのことを定義するコード(21),(22)が記述さ
れる。また、図中{・・・}で省略化しているが、当該
箇所にメソッドsyncCallの実行体が記述され
る。
【0060】このように、トランスレータ62を用いる
ことで、ユーザがクライアント・アプリケーションプロ
グラム502 を作成する際に、図6(C)に示す新規生
成コード52をクライアント・アプリケーションプログ
ラム502 に明示して記述する必要がなく、ユーザがク
ライアント・アプリケーションプログラム502 を作成
する際の負担を軽減できる。すなわち、IDLを用いた
インタフェース定義プログラムを用いなくても、ユーザ
は、他のアプリケーションプログラムが提供するメソッ
ドを呼び出す記述を含むクライアント・アプリケーショ
ンプログラム502 を、プログラム言語「Java」の
みを用いて簡単に記述できる。
【0061】第2の例 以下、図8(B)に示すクライアント・アプリケーショ
ンプログラム1502をトランスレータ62で処理して
新規生成コードを生成する場合における、トランスレー
タ62の処理を説明する。この場合のトランスレータ6
2の処理は、図8(B)に示すコード(31)について
の処理のみが、前述した第1の例の処理とは異なるた
め、当該コード(31)についての処理のみを以下に説
明する。トランスレータ62によって、コード(31)
の記述に基づいて、クラスRemoteInstanc
eが、2個の文字列型の引数を持つメソッドsyncC
allを持ち、しかも、クラスRemoteInsta
nceが変数echoを持つことが解析され、図8
(C)に示すように、新規生成コード152内に、クラ
スRemoteInstanceがRemoteMet
hod型の変数echoを持つことを定義するコード
(32)と、クラスRemoteInstanceのメ
ソッドsyncCallが、RemoteMethod
型および文字列型の2個の引数を持つことを定義するコ
ード(33)とが記述される。また、図中{・・・}で
省略化しているが、当該箇所にメソッドsyncCal
lの実行体が記述される。なお、RemoteMeth
od型とは、リモートに存在するメソッドを特定する変
数の型である。
【0062】第3の例 以下、例えば図10に示すように、クライアント・アプ
リケーションプログラム2502 内に、メッセージ通信
用のメソッドCallが含まれている場合のトランスレ
ータ62の処理について説明する。ここで、メソッドC
allは、リモートに存在するメソッドの呼び出しを行
った後、他の処理を行い、戻り値を用いた処理を行う際
に、当該戻り値を受け取っていないときに当該戻り値を
受け取るまで呼び出し側が待ち状態になることを指示す
るメソッドである。ここで、図10において、コード
(14),(15),(17)は、図6(B)に示す前
述したコード(14),(15),(17)と同じであ
る。
【0063】ここで、コード(41)は、参照オブジェ
クトriのメソッドCallを呼び出し、当該メソッド
Callの引数に、呼び出しを行うメソッドのメソッド
名”echo”および当該呼び出しを行うメソッドに与
える引数arg
〔0〕とを与えている。また、呼び出し
たEchoオブジェクトのメソッドechoからの戻り
値を、文字列型の変数echoMessageに格納す
ることを示している。
【0064】トランスレータ62は、図10に示すクラ
イアント・アプリケーションプログラム2502 をトレ
ースし、コード(41),(17)を、図11に示す新
規生成コード252のコード(51),(52)にそれ
ぞれ翻訳すると共に、新規生成コード52に、図12に
示す参照オブジェクトriのクラスRemoteIns
tanceおよび図13に示すクラスMessageD
escriptorの定義を記述する。
【0065】先ず、図11に示すコード(51),(5
2)について説明する。コード(51)は、参照オブジ
ェクトriのメソッドcallを実行することを指示し
ており、コード(51)は、図4に示す「Java」コ
ンパイラ61によるコンパイルされる際に、トランスレ
ータ62によって生成された新規生成コード252に記
述された図12に示すクラスRemoteInstan
ceのメソッドcallのコード(62)〜(66)で
置き換えられる。これにより、コード(51)に応じ
て、MessageDescriptor型のオブジェ
クトmdが生成され、このオブジェクトmdが呼び出し
先(送信先)にメッセージを送信すると共に、オブジェ
クトmdが戻り値として戻されるように、実行コードが
生成される。すなわち、呼び出し先からの戻り値を受け
取るための同期待ちは、コード(51)に応じた処理で
は行われない。
【0066】コード(52)は、コード(51)で呼び
出し先に要求した戻り値を実際に使用するコードであ
り、オブジェクトmdの図13に示すメソッドgetR
eturnValue()を実行することを指示してい
る。このメソッドgetReturnValue()
は、後述するように、呼び出し先からの戻り値を受け取
ることを指示しており、アプリケーションプログラムの
実行時にコード(52)に対応する処理が行われると、
呼び出し先から戻り値を受け取るまで同期待ち状態とな
る。すなわち、新規生成コード252に図11に示すコ
ード(51),(52)、図12および図13に示す記
述を含めることで、これらを用いて作成された実行コー
ドを実行する際に、リモートに存在するメソッドの呼び
出しを行うメッセージを送信してから、当該メソッドの
戻り値を実際に使用するまでの間に他の処理を行うこと
ができる。また、当該戻り値を使用する処理を行う際
に、戻り値を受け取っていない場合には、当該時点で、
戻り値を受け取るための同期待ちが行われる。そのた
め、不要な同期待ちにより、アプリケーションプログラ
ムの実行時間が長期化することを回避できる。
【0067】次に、図13に示すクラスMessage
Descriptorの定義について説明する。クラス
MessageDescriptorは、メッセージの
送信、戻り値の受け取り、送信状態(送信エラーや戻り
値の受け取りなどの状態)の受け取りなど、1回のメッ
セージ送信で必要とされる手続きを規定するオブジェク
トのクラスであり、メッセージ送信毎に生成される。図
13に示すコード(71)は、メッセージ送信先がオブ
ジェクトの場合のコンストラクタMessageDes
criptorを定義しており、引数ri,rmは、そ
れぞれ呼び出し先のオブジェクトとメソッドとを特定
し、引数argは呼び出し先のオブジェクトに受け渡す
引数をまとめた構造体(オブジェクト)であり、引数c
allingModeはメッセージ送信モードが前述し
たSend,Call,syncCallのいずれであ
るかを特定する。また、図中{・・・}で省略化してい
るが、当該箇所にコンストラクタMessageDes
criptorの実行体が記述される。また、コード
(72)は、実際にメッセージ送信機構本体に送信要求
を行うメソッドtransmitを定義している。ま
た、図中{・・・}で省略化しているが、当該箇所にメ
ソッドtransmitの実行体が記述される。また、
コード(73)は、メッセージ送信先からの戻り値を受
け取るためのメソッドgetReturnValueを
定義している。また、図中{・・・}で省略化している
が、当該箇所にメソッドgetReturnValue
の実行体が記述される。
【0068】次に、図12に示すクラスRemoteI
nstanceの定義について説明する。コード(6
1)は、クラスRemoteInstanceが、Re
moteMethod型の変数echoを持つことを示
している。コード(62)は、クラスRemoteIn
stanceが、メソッドcallを持つことを示して
おり、当該メソッドcallが、RemoteMeth
od型と文字列型の2個の引数持ち、MessageD
escriptor型の戻り値を持つことを示してい
る。
【0069】コード(63)〜(66)は、メソッドc
allを実行するときの手続きを記述している。コード
(63)は、callの引数arg1を内部表現形式か
ら共通表現形式に変換し、当該変換した引数をPoda
cクラスのオブジェクトargに格納することを示して
いる。ここで、Podacクラスとは、複数個のデータ
構造をひとかたまりとして扱うコンテナクラスである。
コード(64)は、MessageDescripto
rクラスのコンストラクタを実行して、Message
Descriptor型のオブジェクトmdを生成する
ことを示している。コード(65)は、Message
Descriptor型のオブジェクトmdのメソッド
transmitを実行して、当該オブジェクトmdを
呼び出し先のオブジェクトのメソッドに送信することを
示している。コード(66)は、オブジェクトmdをメ
ソッドcallの戻り値として返すことを示している。
【0070】第4の例 トランスレータ62は、例えば、サーバ・アプリケーシ
ョンプログラム501およびクライアント・アプリケー
ションプログラム502 に記述されたクラスのオブジェ
クトが、リモートのオブジェクトとの間で送受信される
場合には、図14に示すように、当該クラスの定義内
に、当該オブジェクトを内部表現形式から共通表現形式
に変換するメソッドpackinと、当該オブジェクト
を共通表現形式から内部表現形式に変換するメソッドe
xpandとを自動的に記述する。
【0071】ここで、共通表現形式は、前述したよう
に、OSおよびアプリケーションプログラムのプログラ
ム言語に依存しないデータ形式であり、共通表現形式の
引数には、引数データ本体と、当該引数データ本体のデ
ータ型およびデータ並びに関しての情報と、引数データ
本体が例えば図15に示すようなリスト構造をしている
場合にはその構造に関しての情報とを含んでいる。ま
た、内部表現形式は、前述したように、OSおよび当該
クラスが存在するアプリケーションプログラムのプログ
ラム言語に依存したデータ形式である。
【0072】図14に示すように、クラスの定義内に自
動的に記述されたメソッドpackinは、当該クラス
のオブジェクトを、メッセージ通信用のメソッドを用い
てリモートに存在するオブジェクトに送信する際に、当
該リモートに存在するオブジェクトに与える引数を内部
表現形式から共通表現形式に変換するために用いられ
る。また、メソッドexpandは、当該クラスのオブ
ジェクトをリモートに存在するオブジェクトから受け取
ったときに、当該受け取ったオブジェクトを当該アプリ
ケーションプログラム内で使用できるように、当該受け
取ったオブジェクトを共通表現形式から内部表現形式に
変換するために用いられる。
【0073】このようなメソッドpackinおよびe
xpandを用いることで、例えば、プログラム言語
「Java」で記述されたアプリケーションプログラム
と、プログラム言語「C++」で記述されたアプリケー
ションプログラムとの間での通信が可能になる。また、
本実施形態では、トランスレータ62によって、各クラ
ス毎に、当該クラスの定義内に、メソッドpackin
およびexpandを自動的に記述するため、アプリケ
ーションプログラムの開発者の負担が大幅に軽減され
る。
【0074】以上説明したように、トランスレータ62
によれば、IDLなどを用いたインタフェース定義プロ
グラムを別途作成する必要がなく、しかも、プログラム
開発者が、他のプロセスとの間のメッセージ通信の記述
を含むアプリケーションプログラムを簡単に作成でき
る。また、例えばプログラム言語「Java」などのオ
ブジェクト指向プログラム言語を用いたプログラムにお
いて採用される「オブジェクトに対しての処理を、当該
オブジェクトのメソッドとして記述し、当該オブジェク
トのメソッドを呼び出すという形態で当該オブジェクト
に対しての処理を記述する」というプログラム構築思想
に沿ってプログラミングを行うことができる。
【0075】本発明は上述した実施形態には限定されな
い。例えば、上述したアプリケーションプログラムの内
容は例示であって、その内容およびプログラム言語は任
意である。
【0076】また、上述した実施形態では、トランスレ
ータ62が生成する新規生成コード内に、新たに定義を
行ったコンストラクタおよびメソッドの実行体を記述す
る場合を例示したが、これらのコンストラクタおよびメ
ッドの実行体の記述を図4に示すライブラリ65に持た
せ、新規生成コード内には、ライブラリ65に存在する
これらの実行体を特定するコードを記述するようにして
もよい。
【0077】
【発明の効果】以上説明したように、本発明のプログラ
ム変換方法によれば、他のプロセスとの間のメッセージ
通信の記述を含むプログラムを、プログラム開発者が簡
単に作成できるようになる。
【図面の簡単な説明】
【図1】図1は、本発明の実施形態の並列分散処理シス
テムにおける大域計算の概念を説明するための図であ
る。
【図2】図2(A)は並行オブジェクトとプロセスとの
関係を示す図、図2(B)は図2(A)に示す並行オブ
ジェクトの内部状態構成を示す図である。
【図3】図3は、本実施形態の並列分散処理システムに
おけるプロセス相互間での通信機能を説明するための図
である。
【図4】図4は、本発明の実施形態において、アプリケ
ーションプログラムから実行コードを生成するまでの過
程を説明するための図である。
【図5】図5は、図4に示すトランスレータにおける処
理を説明するための図である。
【図6】図6(A)はサーバ・アプリケーションプログ
ラムの一例の一部を示す図、図6(B)はクライアント
・アプリケーションプログラムの一例の一部を示す図、
図6(C)は図6(B)に示すクライアント・アプリケ
ーションプログラムをトランスレータで処理して生成さ
れる新規生成コードの一例の一部を示す図である。
【図7】図7は、図6に示すアプリケーションプログラ
ムにおけるメソッドのリモート呼び出しの記述を視覚的
に表現した図である。
【図8】図8(A)はサーバ・アプリケーションプログ
ラムのその他の例の一部を示す図、図8(B)はクライ
アント・アプリケーションプログラムのその他の例の一
部を示す図、図8(C)は図8(B)に示すクライアン
ト・アプリケーションプログラムをトランスレータで処
理して生成される新規生成コードの一例の一部を示す図
である。
【図9】図9は、図8に示すアプリケーションプログラ
ムにおけるメソッドのリモート呼び出しの記述を視覚的
に表現した図である。
【図10】図10は、クライアント・アプリケーション
プログラムのその他の例を説明するための図である。
【図11】図11は、図10に示すクライアント・アプ
リケーションプログラムをトランスレータで処理して生
成した新規生成コードを説明するための図である。
【図12】図12は、図10に示すクライアント・アプ
リケーションプログラムをトランスレータで処理して生
成した新たなクラス定義を説明するための図である。
【図13】図13は、図10に示すクライアント・アプ
リケーションプログラムをトランスレータで処理して生
成した新たなクラス定義を説明するための図である。
【図14】図14は、本発明の実施形態のトランスレー
タにおける処理を説明するための図である。
【図15】図15は、図14を用いて説明する処理によ
って生成されるメソッドが処理可能なツリー構造を説明
するための図である。
【図16】図16は、CORBAにおけるアプリケーシ
ョン相互間のインタフェースを説明するための図であ
る。
【図17】図17(A)は従来のインタフェース定義プ
ログラムの一例の一部を示す図、図17(B)は従来の
サーバ・アプリケーションプログラムの一例の一部を示
す図、図17(C)は従来のクライアント・アプリケー
ションプログラムの一例の一部を示す図である。
【図18】図18は、図17に示すプログラムによるメ
ッセージ通信の記述を視覚的に表現した図である。
【符号の説明】
10,11…プロセス、12,13…分散オブジェク
ト、14,25…API部、15,24…共通部、1
6,22…メッセージ・パッシング・オペレータ、18
…参照解決部、19,21…通信メディアI/F、50
…アプリケーションプログラム、61…「Java」コ
ンパイラ、62…トランスレータ

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】ネットワークを介して接続された他のコン
    ピュータ上の他のプロセスあるいは同一のコンピュータ
    上の他のプロセスが管理する第1のオブジェクトとの間
    で通信を行うプロセスの手順を記述したプログラムを変
    換するプログラム変換方法において、 前記第1のオブジェクトを特定するオブジェクト参照デ
    ータを第2のオブジェクトに格納することを示す第1の
    コードと、前記第2のオブジェクトのメッセージ通信用
    のメソッドを呼び出して、前記第1のオブジェクトとの
    間で通信を行うことを示す第2のコードとを有するプロ
    グラムを変換する場合に、前記プログラムを解析し、 前記第2のコードの記述内容から、前記メッセージ通信
    用のメソッドの引数のデータ型および引数の並びを特定
    し、 当該特定した結果に基づいて、前記メッセージ通信用の
    メソッドが前記第2のオブジェクトのクラスのメソッド
    であることと、当該メソッドの引数のデータ型および引
    数の並びとを明示して前記第2のオブジェクトのクラス
    を定義する第3のコードを自動的に生成するプログラム
    変換方法。
  2. 【請求項2】前記メッセージ通信用のメソッドの引数と
    して、前記第1のオブジェクトのメソッドを特定する前
    記第2のオブジェクトの変数が記述されている場合に、 前記変数が前記第2のオブジェクト内の変数であること
    をさらに明示して前記第2のオブジェクトのクラスを定
    義する前記第3のコードを自動的に生成する請求項1に
    記載のプログラム変換方法。
  3. 【請求項3】前記プログラムは、他のプロセスに存在す
    るクラスを特定するクラス参照データを格納するリモー
    トクラスのコンストラクタを呼び出して、他のプロセス
    に存在するクラスを特定するクラス参照データを得て、
    当該得たクラス参照データを前記リモートクラス型の第
    3のオブジェクトに格納することを示す第4のコードを
    さらに有し、前記第1のコードは、前記第3のオブジェ
    クトのオブジェクト生成用のメソッドを呼び出して、前
    記第1のオブジェクトを生成し、当該生成した前記第1
    のオブジェクトを特定するオブジェクト参照データを前
    記第2のオブジェクトに格納することを示す場合に、 前記第4のコードおよび前記第1のコードの記述内容か
    ら、前記オブジェクト生成用のメソッドの引数のデータ
    型および引数の並びとを特定し、 当該特定した結果に基づいて、前記コンストラクタが前
    記リモートクラスのコンストラクタであることと、当該
    コンストラクタの引数のデータ型および引数の並びと、
    前記オブジェクト生成用のメソッドが前記リモートクラ
    スのメソッドであることと、当該メソッドの引数のデー
    タ型および引数の並びとを明示して前記リモートクラス
    を定義する第5のコードを自動的に生成する請求項1ま
    たは請求項2に記載のプログラム変換方法。
  4. 【請求項4】前記メッセージ通信用のメソッドの引数
    は、前記第1のオブジェクトのメソッドを特定するメソ
    ッド参照データと、当該メソッドに与える引数データと
    を含み、 前記メッセージ通信用のメソッドは、前記メソッド参照
    データで特定される前記第1のオブジェクトのメソッド
    に、前記引数データを与える手続きである請求項1また
    は請求項2に記載のプログラム変換方法。
  5. 【請求項5】前記メッセージ通信用のメソッドは、前記
    第1のオブジェクトのメソッドが前記与えられた引数デ
    ータを用いて処理を行った結果を戻り値として受け取る
    まで同期待ち状態になることを示す手続きである請求項
    4に記載のプログラム変換方法。
  6. 【請求項6】前記第2のコードの記述内容から、前記メ
    ッセージ通信用のメソッドの戻り値のデータ型を特定
    し、 当該特定した結果に基づいて、前記メッセージ通信用の
    メソッドの戻り値のデータ型をさらに明示して前記第2
    のオブジェクトのクラスを定義する前記第3のコードを
    自動的に生成する請求項1または請求項2に記載のプロ
    グラム変換方法。
  7. 【請求項7】前記プログラムは、前記第2のオブジェク
    トの前記メッセージ通信用のメソッドを実行して前記第
    1のオブジェクトから受け取った戻り値を最初に用いて
    処理を行うことを示す第6のコードを有し、 前記第2のコードの前記メッセージ通信用のメソッド
    が、前記第1のオブジェクトのメソッドに引数データを
    与えた後、当該第1のオブジェクトのメソッドから受け
    取る前記戻り値を用いた処理を行う際に、当該戻り値を
    受け取っていないときに同期待ちを行うことを示す場合
    に、 少なくとも前記第1のオブジェクトへの参照を示すオブ
    ジェクト参照データと、当該第1のオブジェクトのメソ
    ッドへの参照を示すメソッド参照データと、引数データ
    とを用いたコンストラクタと、 メッセージを送信するための第1のメソッドと、 戻り値を受け取るための第2のメソッドと を有するメッセージディスクリプタークラスの定義を自
    動的に生成し、 前記第2のコードを、前記コンストラクタを呼び出して
    生成したメッセージディスクリプタークラスのオブジェ
    クトの前記第1のメソッドを呼び出して前記第1のオブ
    ジェクトにメッセージを送信する記述に自動的に置き換
    え、 前記第6のコードを、前記コンストラクタを呼び出して
    生成したメッセージディスクリプタークラスのオブジェ
    クトの前記第2のメソッドを呼び出して受け取った前記
    戻り値を用いて前記処理を行う記述に自動的に置き換え
    る請求項1に記載のプログラム変換方法。
  8. 【請求項8】オブジェクトを引数として前記他のプロセ
    スとの間でメッセージ通信を行う場合に、 前記プロセスの手順を記述したプログラム言語の種類に
    依存した内部表現形式と、前記プログラム言語の種類に
    依存しない共通表現形式との間でデータ変換を行うメソ
    ッドを前記オブジェクトのクラスの定義内に自動的に記
    述する請求項1に記載のプログラム変換方法。
  9. 【請求項9】前記共通表現形式のオブジェクトは、引数
    データ本体と、当該引数データ本体のデータ型および引
    数データの並びに関しての情報と、前記引数データ本体
    がグラフ構造をしている場合には、その構造に関して情
    報とを含んでいる請求項8に記載のプログラム変換方
    法。
  10. 【請求項10】前記プログラムは、オブジェクト指向プ
    ログラム言語を用いて記述されている請求項1または請
    求項2に記載のプログラム変換方法。
JP10327337A 1998-11-17 1998-11-17 プログラム変換方法 Pending JP2000148460A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10327337A JP2000148460A (ja) 1998-11-17 1998-11-17 プログラム変換方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10327337A JP2000148460A (ja) 1998-11-17 1998-11-17 プログラム変換方法

Publications (1)

Publication Number Publication Date
JP2000148460A true JP2000148460A (ja) 2000-05-30

Family

ID=18198019

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10327337A Pending JP2000148460A (ja) 1998-11-17 1998-11-17 プログラム変換方法

Country Status (1)

Country Link
JP (1) JP2000148460A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005129027A (ja) * 2003-10-23 2005-05-19 Microsoft Corp アプリケーションプログラミングインターフェース(api)の設計
JP2007109252A (ja) * 2006-12-04 2007-04-26 Hitachi Ltd 組込みコントローラ及び組込みコントローラ開発ツール
JP2007141248A (ja) * 2005-11-09 2007-06-07 Sun Microsyst Inc ジャバ言語におけるメソッド参照のサポート

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005129027A (ja) * 2003-10-23 2005-05-19 Microsoft Corp アプリケーションプログラミングインターフェース(api)の設計
JP2007141248A (ja) * 2005-11-09 2007-06-07 Sun Microsyst Inc ジャバ言語におけるメソッド参照のサポート
JP2007109252A (ja) * 2006-12-04 2007-04-26 Hitachi Ltd 組込みコントローラ及び組込みコントローラ開発ツール

Similar Documents

Publication Publication Date Title
JP3264656B2 (ja) 遠隔プロシージャ・コール・システムにおけるインターフェース定義言語コンパイル・システム及び方法
US6148323A (en) System and method for managing the execution of system management
US6115710A (en) Portable and dynamic distributed transaction management method
US7171672B2 (en) Distributed application proxy generator
US6981250B1 (en) System and methods for providing versioning of software components in a computer programming language
US8359570B2 (en) Adaptive scripting tool
US20030070006A1 (en) Development system providing extensible remoting architecture
JP2005018777A (ja) 共通問い合わせ実行時システムおよびアプリケーションプログラミングインターフェイス
JP2000250768A (ja) サーバ・オブジェクトのメソッドを呼び出すプロセス方法及びデータ処理システム
US20040187141A1 (en) Push-based object request broker
US20200110584A1 (en) Automated code generation for functional testing of software applications
US7958145B2 (en) Creating multiple MBeans from a factory MBean
JP2000148460A (ja) プログラム変換方法
Stal The broker architectural framework
US7596572B1 (en) Methods and apparatus for providing a categorical approach to valuetype bridge support
JP2003022251A (ja) データ通信方法、データ通信システムおよびプログラム
JP2005266908A (ja) データ処理方法、プログラム、装置、メッセージの構造、メッセージ生成方法、及び、メッセージ送信方法
JPH11249919A (ja) 手続き呼出しの処理方法およびスタブ生成方法
JP4668367B2 (ja) コンピュータ、並列分散システムおよび機能呼び出し方法
JPH09245003A (ja) 並列分散処理システムおよびその方法
CA2551025C (en) Application framework for use with net-centric program architectures
de Oliveira Valente et al. Object Oriented Languages with Abstractions for Mobile Computation
Variamparambil Getting SMARTTOOLS and VisualStudio .NET to talk to each other using SOAP and web-services
Allam Loose coupling and substitution principle in objet-oriented frameworks for web services
Hubertus Wiese A Framework for Building Customised CORBA ORBs