JPH09160762A - プログラム変換方式 - Google Patents

プログラム変換方式

Info

Publication number
JPH09160762A
JPH09160762A JP33995195A JP33995195A JPH09160762A JP H09160762 A JPH09160762 A JP H09160762A JP 33995195 A JP33995195 A JP 33995195A JP 33995195 A JP33995195 A JP 33995195A JP H09160762 A JPH09160762 A JP H09160762A
Authority
JP
Japan
Prior art keywords
function
program
server
client
stub
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
JP33995195A
Other languages
English (en)
Inventor
Hideo Takahashi
英男 高橋
Atsushi Nitta
淳 新田
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP33995195A priority Critical patent/JPH09160762A/ja
Publication of JPH09160762A publication Critical patent/JPH09160762A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 インターフェース定義ファイルを必要とせず
にスタブ・コードを生成することのできるプログラム変
換方式を提供することにある。 【解決手段】 処理選択部110は入力プログラム20から
関数定義211、212…を読み込み、所在識別子がCLIENTの
ときはクライアント関数処理部120に関数定義を出力
し、該処理部120は関数複写部1210によりクライアント
プログラム310に関数定義を追加処理し、所在識別子がS
ERVERのときはサーバ関数処理部130に関数定義を出力
し、該処理部130は関数複写部1310によりサーバプログ
ラム320に関数定義を追加処理し、サーバ・スタブ生成
部1320でサーバ・スタブを生成してサーバプログラム32
0にサーバ・スタブを追加処理し、またクライアント・
スタブ生成部1330でクライアント・スタブを生成してク
ライアントプログラム310にクライアント・スタブを追
加処理する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は分散処理を行うプロ
グラムのためのプログラム変換方式に係わり、特に、単
一のプログラムを、遠隔手続き呼び出しを用いて協調動
作する複数のプログラムに分割するプログラム変換方式
に関する。
【0002】
【従来の技術】近年、多数の計算機をネットワークに接
続して運用する形態の計算機システムが普及している。
また、これらの計算機システム向けに、別々の計算機上
で実行される複数のプログラムによって、一つのアプリ
ケーションを構成する分散処理プログラムの開発がさか
んに行われている。分散処理プログラムの形態として
は、クライアント・サーバ型と呼ばれる形態が一般的で
ある。クライアント・サーバ型の分散処理プログラムで
は、アプリケーションをクライアント・プログラムとサ
ーバ・プログラムと呼ばれる2種類のプログラムに分割
して実装し、クライアント・プログラムがサーバ・プロ
グラムの提供する処理を必要に応じて呼び出す形で処理
を進める。クライアント・プログラムとサーバ・プログ
ラムの間の通信処理は煩雑であるため、通信処理をなる
べく意識せずにクライアント・サーバ型のプログラムを
作成することを可能にする目的で、遠隔手続き呼び出
し、またはRPC(Remote Procedure
Call)と呼ばれる通信方式が提案されている。遠
隔手続き呼び出しでは、例えば「DCEプログラミング
ガイド」(ジョン・シャーリー他著「Guide to
Writing DCE Application
s」中田温朗訳、オーム社、1994年)の3ページに
示されるように、スタブ・コードとRPCランタイム・
ライブラリと呼ばれるモジュールを用いて、クライアン
ト・プログラムからサーバ・プログラム上の手続きを呼
び出すことを可能にしている。ここで、スタブ・コード
とはサーバ上の手続きに渡すパラメータとネットワーク
で送受信するパケットの間の変換を行うモジュールであ
り、パラメータをパケットに変換するクライアント・ス
タブ・コードと、パケットをパラメータに変換するサー
バ・スタブ・コードの2種類のスタブ・コードがある。
また、RPCランタイム・ライブラリとは、各アプリケ
ーションで共通に使用できる通信処理ライブラリであ
る。なお、本明細書では、以後スタブ・コードを単にス
タブと略記する。また、手続きと関数を同義の語として
用いる。
【0003】スタブは、前掲書の6ページに示されるよ
うに、個々のアプリケーションに応じてプログラム作成
者が作成するインターフェース定義ファイルから、ID
L(Interface Definition La
nguage)コンパイラと呼ばれるプログラムによっ
て、自動的に生成して使用する。従来のIDLコンパイ
ラを用いたクライアント・サーバ型のプログラム開発で
は、プログラム開発者は以下の手順でクライアント・プ
ログラムとサーバ・プログラムをそれぞれ開発してい
た。 (手順1)アプリケーションの処理全体を、クライアン
ト・プログラムに含める関数群と、サーバ・プログラム
に含める関数群に分割し、それぞれクライアント・アプ
リケーション・コード、サーバ・アプリケーション・コ
ードとして実装する。 (手順2)クライアント・アプリケーション・コードの
中から起動されるサーバ・アプリケーション・コード内
の関数に対するインターフェース定義ファイルを作成す
る。 (手順3)IDLコンパイラを用いてインターフェース
定義ファイルからクライアント・スタブとサーバ・スタ
ブを生成する。 (手順4)クライアント・アプリケーション・コードと
クライアント・スタブとRPCランタイム・ライブラリ
を結合してクライアント・プログラムを作成し、サーバ
・アプリケーション・コードとサーバ・スタブとRPC
ランタイム・ライブラリを結合してサーバ・プログラム
を作成する。
【0004】
【発明が解決しようとする課題】上記の手順に沿ってプ
ログラム開発を進める必要があった従来の技術には、以
下の二つの問題点がある。第一の問題点は、インターフ
ェース定義ファイルをプログラム作成者が作成しなけれ
ばならず、作業量が多いということである。第二の問題
点は、関数の所在をクライアント・プログラムとサーバ
・プログラムの間で移動させるための作業量が多く、ア
プリケーションの性能の向上がしずらいということであ
る。
【0005】以下、それぞれの問題点について説明す
る。まず、第一の問題点について説明する。従来技術で
は、サーバ・アプリケーション・コード内に記述された
関数のうち、クライアント・アプリケーション・コード
から起動する全ての関数に対してプログラム開発者がイ
ンターフェース定義を作成する必要がある。そのため、
プログラム開発者の作業量が多い。次に、第二の問題点
について説明する。アプリケーションの性能は、アプリ
ケーションを構成する個々の関数の、クライアントとサ
ーバへの分配のしかたに依存する。それは、以下の二つ
の理由による。第一の理由は、クライアント・プログラ
ム上の関数がサーバ・プログラム上の関数を起動する頻
度が、クライアント・サーバ間の通信量を左右するため
である。通信量を減らしてアプリケーションの性能を向
上させるためには、一方の関数が他方の関数を頻繁に起
動するような関数同士は、クライアントかサーバのどち
らか一方にまとめて配置する必要がある。第二の理由
は、関数の分配のしかたが、クライアント・プログラム
を実行する計算機であるクライアント計算機と、サーバ
・プログラムを実行する計算機であるサーバ計算機に対
する負荷分散を決定するためである。例えば、クライア
ント計算機に比べてサーバ計算機の処理能力が高い場合
には、負荷の高い関数をなるべくサーバ・プログラム上
に配置した方が性能が向上する。逆にサーバ計算機に接
続されたクライアント計算機の数が多い場合のように、
クライアント計算機に比べてサーバ計算機の処理能力が
低い場合には、負荷の高い関数をなるべくクライアント
・プログラム上に配置した方が性能が向上する。
【0006】以上二つの理由から、アプリケーション全
体としての性能向上を図るためには、通信量が少なく、
負荷分散が適切になるように関数の分配を決定する必要
がある。ところが、各関数の間の呼び出し頻度や、各関
数による計算負荷は、プログラム作成の初期では不明な
場合が多い。そのため、プログラムの作成がかなり進ん
だ時点で、性能向上のために関数の配置を変更したくな
る場合がある。しかし、従来の技術では関数の配置を変
更しようとすると、プログラム作成者が以下の二つの作
業を行う必要があるため、作業量が多い。第一に、配置
を変更したい関数の記述場所を、クライアント・アプリ
ケーション・コードからサーバ・アプリケーション・コ
ードへ、またはその逆へ移動させなければならない。第
二に、移動させた関数に対応するインターフェース定義
を追加または削除しなければならない。以上二つの理由
により、従来技術では関数の所在をクライアント・プロ
グラムとサーバ・プログラムの間で移動させるための作
業量が多く、その結果としてアプリケーションの性能の
向上がしずらい。
【0007】本発明の第一の目的は、インターフェース
定義ファイルを必要とせずにスタブ・コードを生成する
ことのできるプログラム変換方式を提供することにあ
る。本発明の第二の目的は、アプリケーションの処理を
構成する関数の記述場所を変更することなく、関数の所
在をクライアント・プログラムとサーバ・プログラムの
間で、容易に移動させることのできるプログラム変換方
式を提供することにある。
【0008】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、複数の関数定義を有する入力プログラム
を入力として、クライアント・プログラムとサーバ・プ
ログラムを出力とするプログラム変換方式であり、処理
選択手段と、関数複写手段を有するクライアント関数処
理手段と、関数複写手段とクライアント・スタブ生成手
段とサーバ・スタブ生成手段を有するサーバ関数処理手
段からなるプログラム変換部を備え、前記各関数定義は
予め所在識別子が設定されており、前記処理選択手段
は、前記入力プログラムの有する関数定義を順次読み込
み、該関数定義に設定された所在識別子がクライアント
を示すとき該関数定義を前記クライアント関数処理手段
に出力し、前記所在識別子がサーバを示すとき該関数定
義を前記サーバ関数処理手段に出力し、前記クライアン
ト関数処理手段は、入力された関数定義を前記関数複写
手段により前記クライアント・プログラムに追加処理
し、前記サーバ関数処理手段は、入力された関数定義を
前記関数複写手段により前記サーバ・プログラムに追加
処理し、前記クライアント・スタブ生成手段によりクラ
イアント・スタブを生成し前記クライアント・プログラ
ムに追加処理し、前記サーバ・スタブ生成手段によりサ
ーバ・スタブを生成し前記サーバ・プログラムに追加処
理するようにしている。
【0009】また、複数の関数定義を有する入力プログ
ラムを入力として、クライアント・プログラムとサーバ
・プログラムを出力とするプログラム変換方式であり、
処理選択手段と、関数複写手段を有するクライアント関
数処理手段と、関数複写手段とクライアント・スタブ生
成手段とサーバ・スタブ生成手段を有するサーバ関数処
理手段からなるプログラム変換部を備え、前記各関数定
義は予め所在識別子が設定されており、前記処理選択手
段は、前記入力プログラムの有する関数定義を順次読み
込み、該関数定義に設定された所在識別子がクライアン
トを示すとき該関数定義を前記クライアント関数処理手
段に出力し、前記所在識別子がサーバを示すとき該関数
定義を前記サーバ関数処理手段に出力し、かつ読み込ん
だ関数定義に基づき各関数定義に対応するスタブの生成
状況を管理する関数管理テーブルを生成し、前記クライ
アント関数処理手段は、入力された関数定義を前記関数
複写手段により前記クライアント・プログラムに追加処
理し、かつ該関数複写手段は入力された関数定義中に呼
び出すべき前記サーバプログラムに属する関数定義があ
るとき、前記関数管理テーブルを参照し、該関数定義に
係るスタブが生成されていなければ前記サーバ関数処理
手段に該関数定義に係るスタブの生成指示を出力し、前
記サーバ関数処理手段は、入力された関数定義を前記関
数複写手段により前記サーバ・プログラムに追加処理
し、かつ前記スタブの生成指示を受けたとき、前記クラ
イアント・スタブ生成手段により該生成指示に従いクラ
イアント・スタブを生成し前記クライアント・プログラ
ムに追加処理し、前記サーバ・スタブ生成手段により該
生成指示に従いサーバ・スタブを生成し前記サーバ・プ
ログラムに追加処理するようにしている。
【0010】また、前記複数の関数定義を有する入力プ
ログラムに関数定義の他に関数の所在と名前とパラメー
タ情報とを記述した宣言である前方参照宣言を設け、前
記処理選択手段は、前記入力プログラムを順次読み込
み、先に読み込まれる前記前方参照宣言に基づき関数の
名前、所在およびパラメータ情報を記録したテーブルを
生成し、次いで読み込まれる関数定義を該テーブルを参
照してクライアント関数処理手段あるいはサーバ関数処
理手段に出力するようにしている。
【0011】また、複数の関数定義を有する入力プログ
ラムを入力として、該入力プログラムを2以上の任意の
複数のプログラムに分割し、該分割した複数のプログラ
ム間で互いの関数定義を呼び出すためのスタブを生成す
るプログラム変換方式であり、処理選択手段と、関数複
写手段と、クライアント・スタブ生成手段と、サーバ・
スタブ生成手段からなるプログラム変換部を備え、前記
各関数定義は、関数定義が前記分割した複数のプログラ
ムのいずれに所在するかを示す所在識別子が予め設定さ
れており、前記処理選択手段は、前記入力プログラムの
有する関数定義を順次読み込み、各関数定義について
の、関数名、所在、パラメータ情報、サーバ・スタブの
生成状況、前記分割した複数のプログラム毎におけるク
ライアント・スタブの生成状況を示す関数管理テーブル
を生成し、前記関数複写手段は、前記関数定義を読み込
み、該関数定義の所在識別子に対応する前記分割したプ
ログラムに該関数定義を追加処理し、かつ該関数定義中
に呼び出すべき他の関数定義があるとき、前記関数管理
テーブルを参照し、スタブの生成状況に応じて、前記サ
ーバ・スタブ生成手段によりサーバ・スタブを生成し、
クライアント・スタブ生成手段によりクライアント・ス
タブを生成し、それぞれ対応する前記分割したプログラ
ムに追加処理するようにしている。
【0012】また、前記複数の関数定義を有する入力プ
ログラムに関数定義の他に関数の所在と名前とパラメー
タ情報とを記述した宣言である前方参照宣言を設け、前
記処理選択手段は、前記入力プログラムを順次読み込
み、先に読み込まれる前記前方参照宣言に基づき前記関
数テーブルを初期生成するようにしている。
【0013】また、前記入力プログラムに任意の関数か
ら参照および更新が可能である大域変数定義と、該大域
変数定義の所在と名前と型を記述した宣言である大域変
数宣言を含め、前記プログラム変換部に大域変数複写手
段と、変数用サーバ・スタブ生成手段と、変数用クライ
アント・スタブ生成手段を設け、前記各大域変数定義
は、大域変数定義が前記分割した複数のプログラムのい
ずれに所在するかを示す所在識別子が予め設定されてお
り、前記処理選択手段は、前記入力プログラムを順次読
み込み、先に読み込まれる前記大域変数宣言に基づき前
記関数テーブルを初期生成し、次いで読み込まれる各大
域変数定義についての、変数名、型、所在、変数用サー
バ・スタブの生成状況、前記分割した複数のプログラム
毎における変数用クライアント・スタブの生成状況を示
す大域変数管理テーブルを生成し、前記大域変数複写手
段は、前記大域変数定義を読み込み、該大域変数定義の
所在識別子に対応する前記分割したプログラムに該大域
変数定義を追加処理し、前記関数複写手段は、前記関数
定義を読み込み、該関数定義中に更新/参照される大域
変数定義があるときは、該関数定義を該更新/参照に応
じて変換して対応する前記分割したプログラムに追加処
理し、かつ前記大域変数関数管理テーブルを参照し、変
数用スタブの生成状況に応じて、前記変数用サーバ・ス
タブ生成手段により変数用サーバ・スタブを生成し、変
数用クライアント・スタブ生成手段により変数用クライ
アント・スタブを生成し、それぞれ対応する前記分割し
たプログラムに追加処理するようにしている。
【0014】
【発明の実施の形態】
《第一実施例》はじめに本発明の第一実施例について説
明する。第一実施例で提示するプログラム変換部では、
入力プログラム中の関数定義に付随して記述された所在
識別子の値に応じて、関数定義をクライアント・プログ
ラムとサーバ・プログラムのいずれかに分配する。さら
に、サーバ・プログラム上の全ての関数に対応するスタ
ブを自動的に生成する。本実施例によれば、所在識別子
を書き換えるだけで関数の所在を変更することが可能と
なり、また、インターフェース定義ファイルをプログラ
ム作成者が作成することなく、出力されるクライアント
・プログラムからは、サーバ・プログラム上の任意の関
数を遠隔手続き呼び出しによって呼び出すことが可能と
なる。
【0015】図1は本実施例の構成図であり、図2〜図
4は本実施例の処理のPAD図である。図1において、
10は本発明で提供するプログラム変換方式を実装した
プログラム変換部であり、20はプログラム変換部10
の入力である入力プログラムであり、310はプログラ
ム変換部10の第一の出力であるクライアント・プログ
ラムであり、320はプログラム変換部10の第二の出
力であるサーバ・プログラムである。入力プログラム2
0は、関数定義211、212、…を有し、関数定義2
11、212、…は各関数の所在を、クライアント・プ
ログラムとサーバ・プログラムの中から指定する所在識
別子2111、2121、…を有する。
【0016】プログラム変換部10は、以下に説明する
処理選択部110と、クライアント関数処理部120
と、サーバ関数処理部130を有する。処理選択部11
0は、入力プログラム20の中の関数定義211、21
2、…を順次読み込み、各関数定義に対応する所在識別
子2111、2121、…に応じて、該所在識別子がク
ライアントを意味する識別子の場合、すなわち、関数定
義211に示すように所在識別子として“CLIEN
T”が設定されている場合には、クライアント関数処理
部120を起動し、該所在識別子がサーバを意味する識
別子である場合、すなわち、関数定義212に示すよう
に所在識別子として“SERVER”が設定されている
場合には、サーバ関数処理部130を起動する。なお、
本実施例では、クライアントを意味する識別子の例とし
て“CLIENT”を、サーバを意味する識別子の例と
して“SERVER”をそれぞれ用いるが、他の識別子
や記号を用いてもよい。
【0017】クライアント関数処理部120は、入力プ
ログラム20の中の関数定義をクライアント・プログラ
ム310に追加する関数複写部1210を有する。サー
バ関数処理部130は、入力プログラム20の中の関数
定義をサーバ・プログラム320に追加する関数複写部
1310と、該関数に対応するサーバ・スタブ324
1、…を生成してサーバプログラム320に追加するサ
ーバ・スタブ生成部1320と、該関数に対応するクラ
イアント・スタブ3131、…を生成してクライアント
プログラム31に追加するクライアント・スタブ生成部
1330を有する。クライアント・プログラム310
は、プログラム変換部10が生成するプログラムであ
り、関数複写部1210が追加する関数定義3111、
…とクライアント・スタブ生成部1330が追加するク
ライアント・スタブ3131、…を有する。
【0018】サーバ・プログラム320は、プログラム
変換部10が生成するプログラムであり、関数複写部1
310が追加する関数定義3211、…とサーバ・スタ
ブ生成部1320が追加するサーバ・スタブ3241、
…を有する。
【0019】図1を用いて本実施例の動作の概要につい
て説明する。本実施例では、プログラム変換部10が入
力プログラム2(ソースプログラムあるいはオブジェク
トプログラム)の中の関数定義を逐次読み込んで処理を
進める。読み込んだ関数定義の所在識別子の値が“CL
IENT”であるか“SERVER”であるかによっ
て、処理選択部110が、以下の2通りの処理のいずれ
かを選択して実行する。関数定義211のように、所在
識別子2111の値が“CLIENT”である場合に
は、処理選択部110はクライアント関数処理部120
を起動する。クライアント関数処理部120は、関数複
写部1210を起動して関数定義211をクライアント
・プログラム310に関数定義3111として追加す
る。すなわち、プログラム変換部10は、入力プログラ
ム20の中で所在識別子が“CLIENT”である関数
定義をクライアント・プログラム310に追加する。一
方、関数定義212のように、所在識別子2121の値
が“SERVER”である場合には、処理選択部110
はサーバ関数処理部130を起動する。サーバ関数処理
部130は、まず関数複写部1310を起動して関数定
義212をサーバ・プログラム320に追加する。次
に、サーバ・スタブ生成部1320を起動して関数定義
212に対応したサーバ・スタブを生成し、サーバ・プ
ログラム320に、サーバ・スタブ3241として追加
する。さらに、クライアント・スタブ生成部1330を
起動して関数定義212に対応したクライアント・スタ
ブを生成し、クライアント・プログラム310に、クラ
イアント・スタブ3131として追加する。すなわち、
プログラム変換部10は、入力プログラム20の中で所
在識別子が“SERVER”である関数定義をサーバ・
プログラム320に複写し、その関数をクライアント・
プログラムから呼び出すためのスタブを自動的に追加す
る。
【0020】以下では、図2〜図3を用いて、本実施例
の動作の詳細について説明する。図2は、処理選択部の
処理を示すPAD図である。以下、本図を用いて処理内
容を説明する。 (ステップ1101)処理選択部110は、処理の入力
である入力プログラム20から、まだ読み込むべき入力
がある限り、ステップ1102〜ステップ1105の処
理を繰り返す。 (ステップ1102)処理選択部110は、入力プログ
ラム20から所在識別子を読み込み、変数locに格納
する。 (ステップ1103)処理選択部110は、locの値
が“CLIENT”である場合にはステップ1104を
実行し、“SERVER”である場合にはステップ11
05を実行する。 (ステップ1104)処理選択部110は、クライアン
ト関数処理部120を起動する。 (ステップ1105)処理選択部110は、サーバ関数
処理部130を起動する。 以上が処理選択部110の処理である。
【0021】図3は、クライアント関数処理部120の
処理を示すPAD図である。以下、本図を用いて処理内
容を説明する。 (ステップ1201)クライアント関数処理部120
は、入力プログラム20から関数定義を一つ読み込む。 (ステップ1202)クライアント関数処理部120
は、関数複写部1210を起動して、ステップ1201
で読み込んだ関数定義をクライアント・プログラム31
0に追加する。 以上がクライアント関数処理部120の処理である。関
数複写部1210の詳細は自明なので説明を省略する。
【0022】図4は、サーバ関数処理部130の処理を
示すPAD図である。以下本図を用いて処理内容を説明
する。 (ステップ1301)サーバ関数処理部130は、入力
プログラム20から関数定義を一つ読み込む。 (ステップ1302)サーバ関数処理部130は、関数
複写部1310を起動してステップ1301で読み込ん
だ関数をサーバ・プログラム320に追加する。 (ステップ1303)サーバ関数処理部130は、サー
バ・スタブ生成部1320を起動してステップ1301
で読み込んだ関数に対するサーバ・スタブを生成し、生
成したサーバ・スタブをサーバ・プログラム320に追
加する。 (ステップ1304)サーバ関数処理部130は、クラ
イアント・スタブ生成部1330を起動してステップ1
301で読み込んだ関数に対するクライアント・スタブ
を生成し、生成したクライアント・スタブをクライアン
トプログラム310に追加する。
【0023】以上がサーバ関数処理部130の処理であ
る。関数複写部1310の詳細は自明であるため、また
サーバ・スタブ生成部1320、クライアント・スタブ
生成部1330は従来のIDLコンパイラで用いられる
周知技術によって構成できるため、それぞれ説明を省略
する。上記の構成によれば、入力プログラム中の関数定
義に付随して記述された所在識別子の値に応じて関数定
義をクライアント・プログラムとサーバ・プログラムの
いずれかに分配し、さらに、サーバ・プログラム上の全
ての関数に対応するスタブを自動的に生成することが可
能である。このため、出力されるクライアント・プログ
ラムからは、サーバ・プログラム上の任意の関数を呼び
出すことができる。本実施例によれば、所在識別子を設
定することにより関数の所在を決定可能であり、また、
所在識別子を書き換えてプログラム変換処理を再度行な
えば、関数の所在を変更することが可能であり、また、
インターフェース定義ファイルをプログラム作成者が作
成することなく、出力されるクライアント・プログラム
からは、サーバ・プログラム上の任意の関数を遠隔手続
き呼び出しによって呼び出すことが可能となることは明
らかである。よって、本実施例によれば、本発明の目的
を達成することができる。
【0024】《第二実施例》次に、第二実施例について
説明する。第一実施例では、サーバ・プログラム内の全
ての関数に対してスタブを生成するが、スタブを作る必
要がある関数は、サーバ・プログラム内の関数のうち、
クライアント・プログラム内から呼び出される関数だけ
である。しかるに、第一実施例では、クライアント・プ
ログラムから呼び出すことがない関数に対する不必要な
スタブまで生成してしまうために、プログラム変換部の
処理時間が余計にかかる。さらに、不必要なスタブを含
む分だけ、生成するクライアント・プログラムとサーバ
・プログラムのメモリ消費量が多くなるため、効率が悪
い。そこで、本実施例では、プログラム変換部の処理時
間を短縮し、生成するサーバ・プログラムとクライアン
ト・プログラムのメモリ消費量を抑えるために、実際に
クライアント・プログラムから呼び出されるサーバ・プ
ログラム内の関数に対してのみ、スタブを生成する方式
の例を提示する。
【0025】以下では、図5〜図7を用いて本実施例に
ついて説明する。本実施例では、図1の構成における処
理選択部110を、図6に処理内容を示す処理選択部1
11で置き換え、さらに処理選択部111には、図5に
示す、スタブの生成を管理するためのテーブルである関
数管理テーブル140を設ける。また、関数複写部12
0は、図7に処理内容を示す関数複写部121で置き換
える。
【0026】まず、図5に構成を示す関数管理テーブル
140について説明する。関数管理テーブル140に
は、処理選択部111または関数複写部1210が、入
力プログラム20を処理する過程で、新たな名前の関数
の定義または関数の呼び出しを見い出す度に、その関数
を管理するためのレコードを追加する。各レコードは、
以下に説明する1401〜1404のフィールドを有す
る。1401は関数名フィールドであり、関数の名前を
格納する。1402は所在フィールドであり、関数の所
在情報を格納する。格納する値は、“CLIENT”、
“SERVER”、“未知”のいずれかである。関数の
所在が明らかである場合には“CLIENT”または
“SERVER”のいずれかを格納し、未知である場合
には“未知”を格納する。関数の所在が未知となるの
は、入力プログラム20の中で関数定義に先だって関数
呼び出しが記述される場合である。1403はパラメー
タ形式フィールドであり、関数のパラメータ形式情報、
例えばパラメータの数と型などの情報を格納する。14
04はスタブフィールドであり、スタブ生成の有無を管
理するために、“未”、“要”、“済”のいずれかの値
を格納する。クライアント・プログラム内の関数からの
呼び出しがなく、スタブが未だ必要とされていない場合
には“未”を、クライアント・プログラム内の関数から
の呼び出しがあったものの、パラメータ形式が不明であ
るためにスタブを生成できず、パラメータ形式が分かり
次第スタブを作る必要がある場合には“要”を、スタブ
の生成が済んでいる場合には“済”を、それぞれ格納す
る。なお、本実施例および以後の実施例において、各種
のテーブルの各フィールドに格納する具体的な値として
は、実施例で例として用いる値以外の語や記号を用いて
もよい。
【0027】次に、本実施例の動作の概要について説明
する。本実施例では、関数管理テーブル140によって
各関数のスタブ生成の必要性を管理しながら処理を進め
る。そのためには、クライアント・プログラム上の関数
からサーバ・プログラム上の関数呼び出しがあるかどう
かを知る必要がある。そこで、クライアント・プログラ
ムに関数の複写処理と並行して、複写する関数の中から
呼び出される関数の所在とスタブの有無を、関数管理テ
ーブル140を用いて調べる。調べた結果に応じて以下
の何れかの処理を実行する。呼び出される関数の関数定
義を既に読み込んでおり、その関数がサーバ・プログラ
ム上の関数でかつ、スタブが未生成である場合には、関
数管理テーブル140に記録してあるパラメータ形式情
報を元に、その関数に対応するスタブを生成し、スタブ
が生成済であることを関数管理テーブル140に記録す
る。呼び出される関数の関数定義を未だ読み込んでいな
いために、その関数がサーバ・プログラム上の関数なの
かクライアント・プログラム上の関数なのか不明である
場合には、関数定義を読み込んでパラメータ形式情報が
判明するまではスタブを生成できないので、該関数のス
タブの生成が必要であることを関数管理テーブルに記録
しておく。後に該関数の関数定義を読み込んだ時点で、
該関数がサーバ・プログラム上の関数であることが判明
した場合にはその時点でスタブを生成する。逆に、該関
数がクライアント・プログラム上の関数であることが判
明した場合には、遠隔手続き呼び出しではなくなるの
で、スタブを生成しない。上記の場合以外は、単に複写
処理のみを行う。
【0028】次に図6〜7のPAD図を用いて、本実施
例の動作の詳細について説明する。まず図6に従って本
実施例における処理選択部111の処理内容を説明す
る。 (ステップ1121)処理選択部111は、入力プログ
ラム20から、まだ読み込むべき入力がある限りステッ
プ1122〜1135を繰り返す。 (ステップ1122)処理選択部111は、入力プログ
ラム20から所在識別子を読み込み、変数locに格納
する。 (ステップ1123)処理選択部111は、locの値
が“CLIENT”である場合にはステップ1124〜
1127を実行し、“SERVER”である場合にはス
テップ1128〜1135を実行する。 (ステップ1124)処理選択部111は、入力プログ
ラム20の中の次の関数定義が関数管理テーブル140
に登録されていなければステップ1125を実行する。 (ステップ1125)処理選択部111は、関数管理テ
ーブル140に該関数のためのレコードを追加し、該レ
コードの関数名フィールド1401に該関数の関数名を
格納する。 (ステップ1126)処理選択部111は、関数管理テ
ーブル140中の該関数に対するレコードの所在フィー
ルド1402に“CLIENT”を格納する。 (ステップ1127)処理選択部111は、クライアン
ト関数処理部120を起動する。 (ステップ1128)処理選択部111は、入力プログ
ラム20の中の次の関数定義が関数管理テーブル140
に登録されていればステップ1129〜1131を実行
し、登録されていなければステップ1132〜1133
を実行する。 (ステップ1129)処理選択部111は、サーバ・ス
タブ生成部1320を起動する。 (ステップ1130)処理選択部111は、クライアン
ト・スタブ生成部1330を起動する。 (ステップ1131)処理選択部111は、関数管理テ
ーブル140中の該関数に対するレコードのスタブ・フ
ィールド1404に“済”を格納する。 (ステップ1132)処理選択部111は、関数管理テ
ーブル140中に該関数に対するレコードを追加し、該
レコードのパラメータ形式フィールド1403に、該関
数のパラメータ形式情報を格納する。 (ステップ1133)処理選択部111は、該レコード
のスタブ・フィールド1404に“未”を格納する。 (ステップ1134)処理選択部111は、該レコード
の所在フィールド1402に“SERVER”を格納す
る。 (ステップ1135)処理選択部111は、関数複写部
1210を起動する。以上が、処理選択部111の処理
内容である。
【0029】次に、図7を用いて本実施例における関数
複写部1211の処理内容を説明する。本実施例では、
関数複写部1211は、入力プログラム20の中の関数
定義をクライアント・プログラム310に追加すると共
に、その関数の中の関数呼び出しのために必要となるス
タブの生成を管理する。処理内容を以下に説明する。
【0030】(ステップ12111)関数複写部121
1は、関数の終わりになるまでステップ12112〜1
2121を繰り返す。 (ステップ12112)関数複写部1211は、入力プ
ログラム20から文を一つ読み込む。 (ステップ12113)関数複写部1211は、ステッ
プ12112で読み込んだ文が関数呼び出しを含む場合
にはステップ12114〜12120を実行する。 (ステップ12114)関数複写部1211は、該関数
が関数管理テーブル140に登録済でない場合にはステ
ップ12115〜12116を実行し、登録済である場
合にはステップ12117〜12120を実行する。 (ステップ12115)関数複写部1211は、関数管
理テーブル140に該関数のためのレコードを追加し、
関数名フィールド1401に該関数の関数名を格納す
る。 (ステップ12116)関数複写部1211は、該レコ
ードの所在フィールド1402に“未知”を、スタブ・
フィールド1404に“要”を格納する。 (ステップ12117)関数複写部1211は、関数管
理テーブル140の該関数のためのレコードの所在フィ
ールド1402が“SERVER”であり、かつ該レコ
ードのスタブ・フィールド1404が“未”である場合
には、ステップ12118〜12120を実行する。 (ステップ12118)関数複写部1211は、サーバ
・スタブ生成部1320を起動する。 (ステップ12119)関数複写部1211は、クライ
アント・スタブ生成部1330を起動する。 (ステップ12120)関数複写部1211は、関数管
理テーブル140の該関数のためのレコードのスタブ・
フィールド1404に“済”を格納する。 (ステップ12121)関数複写部1211は、ステッ
プ12112で読み込んだ文をクライアント・プログラ
ム31に追加する。 以上が、関数複写部1211の処理内容である。
【0031】上述の構成によれば、実際にクライアント
・プログラムから呼び出されるサーバ・プログラム内の
関数に対してのみ、スタブを生成することが可能である
ことは明らかである。その結果、プログラム変換部の処
理時間を短縮し、生成するサーバ・プログラムとクライ
アント・プログラムのメモリ消費量を抑えることが可能
である。
【0032】《第三実施例》次に、第三実施例について
説明する。
【0033】第一、第二の実施例では、所在識別子を入
力プログラム中の各関数定義に隣接して記述する必要が
あるため、関数の所在の記述が入力プログラム中に散在
してしまう。そのため、多くの関数の所在を一括して変
更したり、各関数の所在を把握しようとしたりする場合
に不便である。そこで、本実施例では各関数の所在の一
元的な管理を可能とするために、関数の所在とパラメー
タ形式を指定する宣言である前方参照宣言によって関数
の所在を指定することが可能であるプログラム変換部の
例を提示する。前方参照宣言は関数定義に比べて短く記
述できるので、入力プログラム中の先頭部などにまとめ
て記述することによって、各関数の所在の一元的な管理
が可能となる。本実施例として、第2実施例の入力プロ
グラム中に前方参照宣言を設けた場合について説明する
が、第1実施例の入力プログラム中に前方参照宣言を設
けるようにしてもよいのはいうまでもない。
【0034】以下、図8〜9を用いて本実施例について
説明する。本実施例では、第二実施例の構成における処
理選択部111を、図9に処理内容を示す処理選択部1
12で置き換える。図8は、本実施例における入力プロ
グラム21の構成である。図8において、入力プログラ
ム21は、関数定義211、212、…の他に、前方参
照宣言221、222、…を有し、前方参照宣言22
1、222、…はそれぞれ所在識別子2211、222
1、…を有する。次に、本実施例の動作の概要について
説明する。本実施例では、入力プログラム中に関数の前
方参照宣言があると、処理選択部112が関数管理テー
ブル140に、関数の名前、所在およびスタブの生成に
必要となるパラメータ形式情報を記録しておく。後に関
数定義を読み込んだら、関数管理テーブル140に記録
された所在情報に基づいて該関数の複写先を決定する。
【0035】次に、本実施例の動作の詳細について説明
する。図9は処理選択部112の処理内容である。以
下、本図を用いて処理内容を説明する。 (ステップ1141)処理選択部112は、入力プログ
ラム21からまだ読み込むべき入力がある限り、ステッ
プ1142〜1148を繰り返す。 (ステップ1142)処理選択部112は、入力プログ
ラム21から所在識別子を読み込み、変数locに格納
する。 (ステップ1143)処理選択部112は、入力プログ
ラム21の次の入力が前方参照宣言である場合にはステ
ップ1144〜1145を実行し、関数定義である場合
にはステップ1146〜1148を実行する。 (ステップ1144)処理選択部112は、前方参照宣
言を読み込み、関数管理テーブル1401に該関数のた
めのレコードを追加し、該レコードの関数名フィールド
1401に該関数の名前を、所在フィールド1402に
該関数の所在を、パラメータ形式フィールド1403に
該関数のパラメータ形式情報をそれぞれ格納する。 (ステップ1145)処理選択部112は、該レコード
のスタブ・フィールド1404に“未”を格納する。 (ステップ1146)処理選択部112は、関数管理テ
ーブル1401の該関数定義に対応するレコードの所在
フィールド1402の値が“CLIENT”である場合
にはステップ1147を実行し、“SERVER”であ
る場合にはステップ1148を実行する。 (ステップ1147)処理選択部112は、クライアン
ト関数処理部120を起動する。 (ステップ1148)処理選択部112は、関数複写部
1310を起動する。以上が処理選択部112の処理内
容である。
【0036】上記の構成によれば、入力プログラム中
の、前方参照宣言によって関数の所在を指定することが
可能となるため、関数の所在の一元的な管理することが
可能となる。
【0037】《第四実施例》次に、第四実施例について
説明する。
【0038】第一〜第三の実施例では、クライアント・
プログラム上の関数からサーバ・プログラム上の関数を
呼ぶことは可能であるが、それとは逆にサーバ・プログ
ラム上の関数からクライアント・プログラム上の関数を
呼ぶことは不可能である。しかし、アプリケーションの
種類によってはサーバ・プログラム上の関数からクライ
アント・プログラム上の関数を呼び出すことが必要とな
る場合がある。また、第一〜第三の実施例では、入力プ
ログラムをクライアント・プログラムとサーバ・プログ
ラムの二つのプログラムに分割しているが、サーバ・プ
ログラムをさらに複数のプログラムに分割する場合など
のように、三つ以上のプログラムにアプリケーションを
分割することが必要となる場合がある。そこで、本実施
例では、入力プログラムを二つ以上の任意の複数のプロ
グラムに分割し、それらのプログラム間で互いの関数を
呼び出すためのスタブを、必要に応じて自動的に生成す
ることが可能であるようなプログラム変換部の例を示
す。
【0039】以下図10〜図13を用いて本実施例につ
いて説明する。図10は、本実施例の構成図である。図
10において、11は本発明で提供するプログラム変換
方式を実装したプログラム変換部であり、22はプログ
ラム変換部11の入力である入力プログラム、311、
321、331はプログラム変換部11の出力である出
力プログラムである。入力プログラム22は関数定義2
11、212、…を有し、関数定義211、212、…
はそれぞれ所在識別子2111、2121、…を有す
る。本実施例では所在識別子の値として二つ以上の任意
の複数の値を取ることができるが、例として“CLIE
NT”、“SERVER1”、“SERVER2”の三
つの値を用いる。所在識別子の種類は2つ以上であれば
いくつでもよく、また具体的な値としてはこれら以外の
語や記号を用いても良い。プログラム変換部11は、処
理選択部113と、関数複写部1212と、サーバ・ス
タブ生成部1320と、クライアント・スタブ生成部1
330を有し、処理選択部はさらに関数管理テーブル1
41を有する。出力プログラム311、321、331
は関数複写部1212が追加する関数定義3111、3
211、3311、…と、サーバ・スタブ生成部132
0が生成するサーバ・スタブ3241、3341、…ク
ライアント・スタブ生成部1330が生成するクライア
ント・スタブ3131、3331、…を有する。
【0040】図11は、関数管理テーブル141の構成
図である。関数管理テーブル141には、処理選択部1
13または関数複写部1212が、入力プログラム22
を処理する過程で、新たな名前の関数定義または呼び出
しを見いだす度に、その関数を管理するためのレコード
を追加する。関数管理テーブル141の各レコードは、
以下に説明する1401から14063のフィールドを
有する。1401は関数名フィールドであり、関数名を
格納する。1402は所在フィールドであり、関数の所
在情報を格納する。具体的な値の例として、本実施例で
は“CLIENT”、“SERVER1”、“SERV
ER2”、“未知”を用いる。1403はパラメータ形
式フィールドであり、関数のパラメータ形式情報を格納
する。1405はサーバ・スタブ・フィールドであり、
サーバ・スタブの生成を管理するために、“未”、
“要”、“済”のいずれかの値を格納する。該関数に対
する遠隔手続き呼び出しが入力プログラム22の中に見
いだされず、サーバ・スタブが未だ必要とされていない
場合には“未”を、呼び出しが見いだされたため、パラ
メータ形式が分かり次第サーバ・スタブを作る必要があ
る場合には“要”を、サーバ・スタブの生成が済んでい
る場合には“済”を、それぞれ格納する。14061、
14062、…は出力プログラムごとに設けるクライア
ント・スタブ・フィールドであり、クライアント・スタ
ブの生成を管理するために、“未”、“要”、“済”の
いずれかの値を格納する。各値の意味はサーバ・スタブ
・フィールド1405と同様である。以後では、出力プ
ログラムxに対応するクライアント・スタブ・フィール
ドを、クライアント・スタブ[x]フィールドと表記す
る。
【0041】図11を用いて本実施例の動作の概要につ
いて説明する。本実施例では、関数管理テーブル141
を用いてスタブの生成を管理しながら処理を進める。例
えば関数定義211に対しては、以下のように処理を行
う。まず、処理選択部113は、関数管理テーブル14
1を用いて、関数定義211への呼び出しが記録してい
ないかどうか判定する。関数定義211の所在となる
“CLIENT”以外の所在からの呼び出しが既に記録
されている場合には、その呼び出しを可能にするための
スタブを生成する。次に、処理選択部113は、関数複
写部1212を起動する。関数複写部1212は、関数
定義211を、所在識別子2111の値に基づき、“C
LIENT”に対応する出力プログラム311に複写す
る。複写処理と並行して、関数定義211の中に記述さ
れた関数呼び出しを調べ、調べた結果に応じて以下のい
ずれかの処理を行う。既に関数定義を読み込みが済んで
おり、関数管理テーブル141に記録された関数への呼
び出しであり、関数定義211とは違う所在の関数であ
る場合には、その呼び出しのためにスタブが必要となる
ので、まだスタブが生成されていなければ、スタブを生
成する。未だ関数定義を読み込んでいないために、所在
が不明である関数への呼び出しが見いだされた場合に
は、該関数の関数定義を処理するまでは、スタブが必要
かどうか分からないので、出力プログラム311からそ
の関数への呼び出しがあったことを関数管理テーブル1
41に記録しておく。上記二つ以外の場合には、単に複
写する。
【0042】次に、図12〜図13を用いて本実施例の
動作の詳細について説明する。図12は処理選択部11
3の処理内容を示すPAD図である。以下、本図を用い
て処理内容を説明する。 (ステップ1151)処理選択部113は、入力プログ
ラム22からまだ読み込むべき入力がある限り、ステッ
プ1152〜1163を繰り返す。 (ステップ1152)処理選択部113は、入力プログ
ラム22から所在識別子を読み込み、変数locに格納
する。 (ステップ1153)処理選択部113は、ステップ1
155〜1163を実行する。 (ステップ1154)処理選択部113は、関数複写部
1212を起動する。 (ステップ1155)処理選択部113は、入力プログ
ラム22の中の次の関数定義が関数管理テーブル141
に登録されていればステップ1156〜1162を実行
し、登録されていない場合にはステップ1163を実行
する。 (ステップ1156)処理選択部113は、関数管理テ
ーブル141の該関数に対応するレコードの、クライア
ント・スタブ[loc]フィールドに“未”を格納す
る。 (ステップ1157)処理選択部113は、クライアン
ト・スタブ[i]フィールドが“要”である全ての所在
iについてステップ1158〜1162を実行する。 (ステップ1158)処理選択部113は、サーバ・ス
タブ・フィールド1405が“未”である場合にはステ
ップ1159〜1160を起動する。 (ステップ1159)処理選択部113は、サーバ・ス
タブ生成部1320を起動する。 (ステップ1160)処理選択部113は、サーバ・ス
タブ・フィールド1405に“済”を格納する。 (ステップ1161)処理選択部113は、クライアン
ト・スタブ生成部1330を起動する。 (ステップ1162)処理選択部113は、クライアン
ト・スタブ[i]フィールドに“済”を格納する。 (ステップ1163)処理選択部113は、関数管理テ
ーブル141に該関数に対応するレコードを追加し、該
レコードの関数名フィールド1401には該関数の関数
名を、所在フィールド1402にはlocの値を、パラ
メータ形式フィールド1403には該関数のパラメータ
形式情報を、サーバ・スタブ・フィールド1405と全
てのクライアント・スタブ・フィールドには“未”を、
それぞれ格納する。 以上が処理選択部113の処理内容である。
【0043】図13は関数複写部1212の処理内容を
示すPAD図である。以下、本図を用いて処理内容を説
明する。 (ステップ12131)関数複写部1212は、入力プ
ログラム22から所在識別子を読み込み変数locに格
納する。 (ステップ12132)関数複写部1212は、関数定
義の終わりになるまでステップ12133〜12136
を繰り返す。 (ステップ12133)関数複写部1212は、入力プ
ログラム22から文を一つ読み込む。 (ステップ12134)関数複写部1212は、ステッ
プ12133で読み込んだ文が関数呼び出しを含む場合
には、ステップ12135を実行する。 (ステップ12135)関数複写部1212は、ステッ
プ12137〜12146を実行する。 (ステップ12136)関数複写部1212は、ステッ
プ12133で読み込んだ文を、変数locが指定する
出力プログラムに追加する。 (ステップ12137)関数複写部1212は、該関数
が関数管理テーブル141に登録されていない場合には
ステップ1238を実行し、登録されている場合にはス
テップ12139〜12146を実行する。 (ステップ12138)関数複写部1212は、関数管
理テーブル141に、該関数に対応するレコードを追加
し、該レコードの関数名フィールド1401には該関数
の名前を、所在フィールド1402には“未知”をそれ
ぞれ格納する。 (ステップ12139)関数複写部1212は、該関数
に対応する所在フィールド1402が“未知”である場
合にはステップ12140を実行し、“未知”以外の場
合にはステップ12141〜12146を実行する。 (ステップ12140)関数複写部1212は、該関数
に対応するクライアント・スタブ[loc]フィールド
に“要”を格納する。 (ステップ12141)関数複写部1212は、該関数
に対応するサーバ・スタブ・フィールドが“未”である
場合にはステップ12142〜12143を実行する。 (ステップ12142)関数複写部1212は、サーバ
・スタブ生成部1320を起動する。 (ステップ12143)関数複写部1212は、該関数
に対応するサーバ・スタブ・フィールドに“済”を代入
する。 (ステップ12144)関数複写部1212は、該関数
に対応するクライアント・スタブ[loc]フィールド
が“未”である場合には、ステップ12145〜121
46を実行する。 (ステップ12145)関数複写部1212は、クライ
アント・スタブ生成部1330を起動する。 (ステップ12146)関数複写部1212は、該関数
に対応するクライアント・スタブ[loc]フィールド
に“済”を格納する。
【0044】上述の構成によれば、入力プログラムを二
つ以上の任意の複数のプログラムに分割し、それらのプ
ログラム間で互いの関数を呼び出すためのスタブを、必
要に応じて自動的に生成することが可能である。
【0045】《第五実施例》次に、第五実施例について
説明する。第一〜第四の実施の実施例では、入力プログ
ラム中の関数定義については、各出力プログラムに分配
することが可能であるが、変数については出力プログラ
ムに分配することができない。しかし、アプリケーショ
ンの種類よっては、各関数から共通して使用できる変数
が必要になる場合がある。そこで、本実施例では入力プ
ログラム中に、全関数から共通して参照と更新ができる
変数である大域変数の定義が可能であるようなプログラ
ム変換部の例を提示する。本実施例で示すプログラム変
換部では、入力プログラム中の大域変数についても関数
定義同様に、所在識別子によって分配先の出力プログラ
ムを指定する。そして、分配先のプログラム以外のプロ
グラムからでもそれぞれの変数を操作できるようにする
ためのスタブを、必要に応じて各出力プログラムに追加
することにより、どの出力プログラムからでも任意の大
域変数に対する操作を可能にする。
【0046】以下、図14〜図17を用いて本実施例に
ついて説明する。図14は、本実施例の構成図である。
図14において、23は入力プログラムであり、12は
プログラム変換部であり、312、322、332、…
は出力プログラムである。入力プログラム23は関数定
義211、212、…と大域変数定義231、232、
…を有する。関数定義211、212、…と大域変数定
義231、232、…はそれぞれ、所在識別子211
1、2121、…および2311、2321、…を有す
る。プログラム変換部12は、処理選択部114と、大
域変数複写部134と、関数複写部122と、サーバ・
スタブ生成部1320と、クライアント・スタブ生成部
1330と、変数用サーバ・スタブ生成部1340と、
変数用クライアント・スタブ1350を有し、処理選択
部114は、関数管理テーブル141と大域変数管理テ
ーブル150を有する。出力プログラム312、32
2、332…は、大域変数複写部134が追加する大域
変数定義3221…と、関数複写部122が追加する関
数定義3111…と、サーバ・スタブ生成部1320が
生成して追加する図示しないサーバ・スタブと、クライ
アント・スタブ生成部1330が生成して追加する図示
しないクライアント・スタブと、変数用サーバ・スタブ
生成部1340が生成して追加する変数用サーバスタブ
3261…と、変数用クライアント・スタブ生成部13
50が生成して追加する変数用クライアント・スタブ3
151…を有する。
【0047】図15は、大域変数管理テーブル150の
構成図である。大域変数管理テーブル150には、処理
選択部114が大域変数定義231、232、…を読み
込む度に、その変数を管理するためのレコードを追加す
る。大域変数管理テーブル150の各レコードには、以
下に説明する1501〜15053のフィールドを有す
る。1501は変数名フィールドであり、変数名を格納
する。1502は型フィールドであり、変数の型情報を
格納する。1503は所在フィールドであり、変数の所
在情報を格納する。本実施例では、具体的な値の例とし
て“CLIENT”、“SERVER1”、“SERV
ER2”を用いる。1504はサーバ・スタブ・フィー
ルドであり、該変数を操作するための変数用サーバ・ス
タブの生成を管理するために、“未”、“要”、“済”
のいずれかの値を格納する。15051、15052、
15053、…は、出力プログラム別のクライアント・
スタブ・フィールドであり、クライアント・スタブの生
成を管理するために、“未”、“要”、“済”のいずれ
かの値を格納する。各値の意味は、サーバ・スタブ・フ
ィールド1504と同様である。以後では、出力プログ
ラムxに対するクライアント・スタブ・フィールドを、
クライアント・スタブ[x]フィールドと表記する。
【0048】次に、図14を用いて本実施例の動作の概
要について説明する。本実施例では、関数管理テーブル
141によって関数のためのスタブの生成を管理し、大
域変数管理テーブル150によって大域変数のためのス
タブの生成を管理しながら処理を進める。例えば、入力
プログラム23からの入力が、231のように大域変数
定義である場合には、以下の処理を実行する。まず、処
理選択部114は、大域変数管理テーブルに大域変数定
義231の所在と型情報を記録しておく。次に大域変数
定義複写部134を起動して、所在識別子2311の値
に基づき、“SERVER1”に対応する出力プログラ
ム322に複写する。一方、入力プログラム23からの
入力が、211のように関数定義である場合には、第四
の実施の実施例と同様の処理を実行する。ただし、関数
を複写する際に第四の実施の実施例の処理に加えて、関
数定義211の所在と異なる所在の大域変数定義に対す
る更新と参照を、該変数のスタブ呼び出しに変換する。
【0049】以下では、図16〜図17を用いて、本実
施例の動作の詳細について説明する。図16は、処理選
択部114の処理内容を示すPAD図である。以下、本
図を用いて処理内容を説明する。 (ステップ1171)処理選択部114は、入力プログ
ラム23から、まだ読み込むべき入力がある限りステッ
プ1172〜1184を繰り返す。 (ステップ1172)処理選択部114は、入力プログ
ラム23から所在識別子を読み込み、変数locに格納
する。 (ステップ1173)処理選択部114は、次の入力の
種類が大域変数宣言である場合にはステップ1174〜
1175を実行し、関数定義である場合には、図12に
示したステップ1153と、本図のステップ1176を
実行する。 (ステップ1174)処理選択部114は、入力プログ
ラム23から大域変数定義を読み込み、大域変数管理テ
ーブル150に該変数のためのレコードを追加し、該レ
コードの変数名フィールド1501には該変数の変数名
を、型フィールド1502には該変数の型情報を、所在
フィールド1503には該変数の所在識別子の値を、サ
ーバ・スタブ・フィールドには“未”を、全てのクライ
アント・スタブ・フィールド15051、15052、
…には“未”を、それぞれ格納する。 (ステップ1175)処理選択部114は、大域変数複
写部134を起動する。 (ステップ1176)処理選択部114は、関数複写部
122を起動する。 以上が、処理選択部114の処理内容である。
【0050】図17は、関数複写部122の処理内容を
示すPAD図である。以下、本図を用いて処理内容を説
明する。 (ステップ12201)関数複写部122は、入力プロ
グラム23から所在識別子を読み込み、変数locに代
入する。 (ステップ12202)関数複写部122は、関数定義
の終わりになるまでステップ12203〜12207を
繰り返す。 (ステップ12203)関数複写部122は、入力プロ
グラム23から文を一つ読み込む。 (ステップ12204)関数複写部122は、ステップ
12203で読み込んだ文が関数呼び出しを含む場合に
は、図13に示したステップ12135を実行する。 (ステップ12205)関数複写部122は、ステップ
12203で読み込んだ文が大域変数の更新または参照
を含む場合にはステップ12206を実行する。 (ステップ12206)関数複写部122は、ステップ
12208〜ステップ12214を実行する。 (ステップ12207)関数複写部122は、ステップ
12203で読み込み、ステップ12214で必要に応
じて変換された文をlocが指定する出力プログラムに
追加する。 (ステップ12208)関数複写部122は、大域変数
管理テーブル150の該大域変数に対応するレコードの
サーバ・スタブ・フィールド1504が“未”である場
合にはステップ12209〜12210を実行する。 (ステップ12209)関数複写部122は、変数用サ
ーバ・スタブ生成部1340を起動する。 (ステップ12210)関数複写部122は、該大域変
数に対応するサーバ・スタブ・フィールド1504に
“済”を格納する。 (ステップ12211)関数複写部122は、該大域変
数に対応するクライアント・スタブ・フィールド[lo
c]が“未”である場合にはステップ12212〜12
213を実行する。 (ステップ12212)関数複写部122は、変数用ク
ライアント・スタブ生成部1340を起動する。 (ステップ12213)関数複写部122は、該大域変
数に対応するクライアント・スタブ・フィールド[lo
c]に“済”を格納する。 (ステップ12214)関数複写部122は、ステップ
12203で読み込んだ文中の、該大域変数に対する更
新または参照を、変数用クライアント・スタブの呼び出
しに変換する。
【0051】上述の構成によれば、入力プログラム中の
大域変数定義を、所在識別子によって指定された分配先
の出力プログラムに追加し、分配先のプログラム以外の
プログラムからでもそれぞれの変数を操作できるように
するためのスタブを、必要に応じて各出力プログラムに
追加することができる。その結果、どの出力プログラム
からでも任意の大域変数に対する操作が可能となる。
【0052】
【発明の効果】本発明によれば、インターフェース定義
ファイルを必要とせずにスタブ・コードを生成すること
が可能となる。さらに、アプリケーションの処理を構成
する関数の所在をクライアントとサーバの間で、容易に
移動させることが可能となる。すなわち、プログラム作
成者は、入力プログラム内で処理の記述場所を移動させ
たい関数の所在識別子を変更するだけで、該関数の所在
をクライアント・プログラムとサーバ・プログラムの間
で移動させることが可能となる。その結果、関数の所在
を移動させることによってアプリケーションの性能を向
上させることが容易となる。
【図面の簡単な説明】
【図1】第一実施例の構成を示す図である。
【図2】処理選択部110の処理内容を示すPAD図で
ある。
【図3】クライアント関数処理部120の処理内容を示
すPAD図である。
【図4】サーバ関数処理部130の処理内容を示すPA
D図である。
【図5】関数管理テーブル140の構成を示す図であ
る。
【図6】処理選択部111の処理内容を示すPAD図で
ある。
【図7】は、関数複写部1211の処理内容を示すPA
D図である。
【図8】入力プログラム21の構成を示す図である。
【図9】処理選択部112の処理内容を示すPAD図で
ある。
【図10】第四の実施例の構成を示す図である。
【図11】関数管理テーブル141の構成を示す図であ
る。
【図12】処理選択部113の処理内容を示すPAD図
である。
【図13】関数複写部1212の処理内容を示すPAD
図である。
【図14】第五の実施例の構成を示す図である。
【図15】大域変数管理テーブル150の構成を示す図
である。
【図16】処理選択部114の処理内容を示すPAD図
である。
【図17】関数複写部122の処理内容を示すPAD図
である。
【符号の説明】
10、11、12 プログラム変換部 110〜114 処理選択部 120 クライアント関数処理部 130 サーバ関数処理部 1210、1211、1212、1310、122 関
数複写部 1320 サーバ・スタブ生成部 1330 クライアント・スタブ生成部 1340 変数用サーバ・スタブ生成部 1350 変数用クライアント・スタブ生成部 140、141 関数管理テーブル 150 大域変数管理テーブル 20〜23 入力プログラム 211、212 関数定義 2111、2121 所在識別子 221、222 前方参照宣言 231、232 大域変数定義 310 クライアント・プログラム 320 サーバ・プログラム 311、321、322、331、332 出力プログ
ラム 3111、3211、3311 関数定義 3131、3331 クライアント・スタブ 3241、3341 サーバ・スタブ 3221 大域変数定義 3151 変数用クライアント・スタブ 3261 変数用サーバ・スタブ

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 複数の関数定義を有する入力プログラム
    を入力として、クライアント・プログラムとサーバ・プ
    ログラムを出力とするプログラム変換方式であって、 処理選択手段と、関数複写手段を有するクライアント関
    数処理手段と、関数複写手段とクライアント・スタブ生
    成手段とサーバ・スタブ生成手段を有するサーバ関数処
    理手段からなるプログラム変換部を備え、 前記各関数定義は予め所在識別子が設定されており、 前記処理選択手段は、前記入力プログラムの有する関数
    定義を順次読み込み、該関数定義に設定された所在識別
    子がクライアントを示すとき該関数定義を前記クライア
    ント関数処理手段に出力し、前記所在識別子がサーバを
    示すとき該関数定義を前記サーバ関数処理手段に出力
    し、 前記クライアント関数処理手段は、入力された関数定義
    を前記関数複写手段により前記クライアント・プログラ
    ムに追加処理し、 前記サーバ関数処理手段は、入力された関数定義を前記
    関数複写手段により前記サーバ・プログラムに追加処理
    し、前記クライアント・スタブ生成手段によりクライア
    ント・スタブを生成し前記クライアント・プログラムに
    追加処理し、前記サーバ・スタブ生成手段によりサーバ
    ・スタブを生成し前記サーバ・プログラムに追加処理す
    ることを特徴とするプログラム変換方式。
  2. 【請求項2】 複数の関数定義を有する入力プログラム
    を入力として、クライアント・プログラムとサーバ・プ
    ログラムを出力とするプログラム変換方式であって、 処理選択手段と、関数複写手段を有するクライアント関
    数処理手段と、関数複写手段とクライアント・スタブ生
    成手段とサーバ・スタブ生成手段を有するサーバ関数処
    理手段からなるプログラム変換部を備え、 前記各関数定義は予め所在識別子が設定されており、 前記処理選択手段は、前記入力プログラムの有する関数
    定義を順次読み込み、該関数定義に設定された所在識別
    子がクライアントを示すとき該関数定義を前記クライア
    ント関数処理手段に出力し、前記所在識別子がサーバを
    示すとき該関数定義を前記サーバ関数処理手段に出力
    し、かつ読み込んだ関数定義に基づき各関数定義に対応
    するスタブの生成状況を管理する関数管理テーブルを生
    成し、 前記クライアント関数処理手段は、入力された関数定義
    を前記関数複写手段により前記クライアント・プログラ
    ムに追加処理し、かつ該関数複写手段は入力された関数
    定義中に呼び出すべき前記サーバプログラムに属する関
    数定義があるとき、前記関数管理テーブルを参照し、該
    関数定義に係るスタブが生成されていなければ前記サー
    バ関数処理手段に該関数定義に係るスタブの生成指示を
    出力し、 前記サーバ関数処理手段は、入力された関数定義を前記
    関数複写手段により前記サーバ・プログラムに追加処理
    し、かつ前記スタブの生成指示を受けたとき、前記クラ
    イアント・スタブ生成手段により該生成指示に従いクラ
    イアント・スタブを生成し前記クライアント・プログラ
    ムに追加処理し、前記サーバ・スタブ生成手段により該
    生成指示に従いサーバ・スタブを生成し前記サーバ・プ
    ログラムに追加処理することを特徴とするプログラム変
    換方式。
  3. 【請求項3】 請求項1または請求項2記載のプログラ
    ム変換方式において、 前記複数の関数定義を有する入力プログラムに関数定義
    の他に関数の所在と名前とパラメータ情報とを記述した
    宣言である前方参照宣言を設け、 前記処理選択手段は、前記入力プログラムを順次読み込
    み、先に読み込まれる前記前方参照宣言に基づき関数の
    名前、所在およびパラメータ情報を記録したテーブルを
    生成し、次いで読み込まれる関数定義を該テーブルを参
    照してクライアント関数処理手段あるいはサーバ関数処
    理手段に出力することを特徴とするプログラム変換方
    式。
  4. 【請求項4】 複数の関数定義を有する入力プログラム
    を入力として、該入力プログラムを2以上の任意の複数
    のプログラムに分割し、該分割した複数のプログラム間
    で互いの関数定義を呼び出すためのスタブを生成するプ
    ログラム変換方式であって、 処理選択手段と、関数複写手段と、クライアント・スタ
    ブ生成手段と、サーバ・スタブ生成手段からなるプログ
    ラム変換部を備え、 前記各関数定義は、関数定義が前記分割した複数のプロ
    グラムのいずれに所在するかを示す所在識別子が予め設
    定されており、 前記処理選択手段は、前記入力プログラムの有する関数
    定義を順次読み込み、各関数定義についての、関数名、
    所在、パラメータ情報、サーバ・スタブの生成状況、前
    記分割した複数のプログラム毎におけるクライアント・
    スタブの生成状況を示す関数管理テーブルを生成し、 前記関数複写手段は、前記関数定義を読み込み、該関数
    定義の所在識別子に対応する前記分割したプログラムに
    該関数定義を追加処理し、かつ該関数定義中に呼び出す
    べき他の関数定義があるとき、前記関数管理テーブルを
    参照し、スタブの生成状況に応じて、前記サーバ・スタ
    ブ生成手段によりサーバ・スタブを生成し、クライアン
    ト・スタブ生成手段によりクライアント・スタブを生成
    し、それぞれ対応する前記分割したプログラムに追加処
    理することを特徴とするプログラム変換方式。
  5. 【請求項5】 請求項4記載のプログラム変換方式にお
    いて、 前記複数の関数定義を有する入力プログラムに関数定義
    の他に関数の所在と名前とパラメータ情報とを記述した
    宣言である前方参照宣言を設け、 前記処理選択手段は、前記入力プログラムを順次読み込
    み、先に読み込まれる前記前方参照宣言に基づき前記関
    数テーブルを初期生成することを特徴とするプログラム
    変換方式。
  6. 【請求項6】 請求項4または請求項5記載のプログラ
    ム変換方式において、 前記入力プログラムに任意の関数から参照および更新が
    可能である大域変数定義と、該大域変数定義の所在と名
    前と型を記述した宣言である大域変数宣言を含め、 前記プログラム変換部に大域変数複写手段と、変数用サ
    ーバ・スタブ生成手段と、変数用クライアント・スタブ
    生成手段を設け、 前記各大域変数定義は、大域変数定義が前記分割した複
    数のプログラムのいずれに所在するかを示す所在識別子
    が予め設定されており、 前記処理選択手段は、前記入力プログラムを順次読み込
    み、先に読み込まれる前記大域変数宣言に基づき前記関
    数テーブルを初期生成し、次いで読み込まれる各大域変
    数定義についての、変数名、型、所在、変数用サーバ・
    スタブの生成状況、前記分割した複数のプログラム毎に
    おける変数用クライアント・スタブの生成状況を示す大
    域変数管理テーブルを生成し、 前記大域変数複写手段は、前記大域変数定義を読み込
    み、該大域変数定義の所在識別子に対応する前記分割し
    たプログラムに該大域変数定義を追加処理し、 前記関数複写手段は、前記関数定義を読み込み、該関数
    定義中に更新/参照される大域変数定義があるときは、
    該関数定義を該更新/参照に応じて変換して対応する前
    記分割したプログラムに追加処理し、かつ前記大域変数
    関数管理テーブルを参照し、変数用スタブの生成状況に
    応じて、前記変数用サーバ・スタブ生成手段により変数
    用サーバ・スタブを生成し、変数用クライアント・スタ
    ブ生成手段により変数用クライアント・スタブを生成
    し、それぞれ対応する前記分割したプログラムに追加処
    理することを特徴とするプログラム変換方式。
JP33995195A 1995-12-04 1995-12-04 プログラム変換方式 Pending JPH09160762A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP33995195A JPH09160762A (ja) 1995-12-04 1995-12-04 プログラム変換方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP33995195A JPH09160762A (ja) 1995-12-04 1995-12-04 プログラム変換方式

Publications (1)

Publication Number Publication Date
JPH09160762A true JPH09160762A (ja) 1997-06-20

Family

ID=18332312

Family Applications (1)

Application Number Title Priority Date Filing Date
JP33995195A Pending JPH09160762A (ja) 1995-12-04 1995-12-04 プログラム変換方式

Country Status (1)

Country Link
JP (1) JPH09160762A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170512A (ja) * 2010-02-17 2011-09-01 Nec Corp 転送プログラム生成装置、処理システム、転送プログラム生成方法およびプログラム
JP2012014633A (ja) * 2010-07-05 2012-01-19 Mitsubishi Electric Corp アプリケーション構築装置、アプリケーション構築方法、アプリケーション実行装置及びアプリケーション実行方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170512A (ja) * 2010-02-17 2011-09-01 Nec Corp 転送プログラム生成装置、処理システム、転送プログラム生成方法およびプログラム
JP2012014633A (ja) * 2010-07-05 2012-01-19 Mitsubishi Electric Corp アプリケーション構築装置、アプリケーション構築方法、アプリケーション実行装置及びアプリケーション実行方法

Similar Documents

Publication Publication Date Title
US5517655A (en) Method for monitoring transactions in an object-oriented environment
US5303375A (en) System and method for facilitating selection of running functional process in object-oriented environments
EP0667011B1 (en) Data processing system and operating system
US5734905A (en) User interface in object oriented computer system for performing intuitive object transformations
US6078945A (en) Operating system for use with computer networks incorporating two or more data processors linked together for parallel processing and incorporating improved dynamic load-sharing techniques
JP3489123B2 (ja) アプリケーション結合方法
US6941561B1 (en) Method and apparatus for remotely running objects using data streams and/or complex parameters
JP4855656B2 (ja) 複数のオブジェクトをシリアライズする方法
US6182155B1 (en) Uniform access to and interchange between objects employing a plurality of access methods
US20050216282A1 (en) System and method for business object discovery
EP1202174A2 (en) Stub search loading system and method, server apparatus, client apparatus, and computer-readable recording medium
KR19980086685A (ko) 원격으로 오브젝트를 실행하는 방법
US6353859B1 (en) Object-oriented apparatus and method for controlling accesses to objects in a distributed object environment
US6792611B2 (en) Server system determining server application corresponding to processing request based on information held in server
CN113626071A (zh) 函数注册方法、系统、电子设备及存储介质
US8676842B2 (en) Creating multiple Mbeans from a factory Mbean
JPH09160762A (ja) プログラム変換方式
JP4336363B2 (ja) ビジネスプロセス実行方法、ビジネスプロセス実行システムおよびプログラム
JPH08123699A (ja) 並行処理方法、並行処理システム及び並行処理用プログラムの変換ツール
JP3241214B2 (ja) 分散処理装置及びプロセス実行方法
JP2001331485A (ja) 分散データベース演算処理装置
JP4149624B2 (ja) オブジェクト計算機システム
JPH08153010A (ja) 情報処理方法及び装置及びシステム
JP2001337935A (ja) 分散オブジェクト環境におけるアプリケーションのラッピング方法、その通信管理装置及び記録媒体
JP2002132502A (ja) 言語機能解釈による分散オブジェクト自動生成システム及び方法