(57)【特許請求の範囲】
【請求項１】
各々関連した制御コンピュータを有する複数の交換機を含み、前記制御コンピュータが分散制御システムとして相互接続されて配置され、かつ前記制御コンピュータのための制御プログラムをコンパイルする装置を含む遠隔通信ネットワークであって、コンパイルする装置が、
現在のシステム評価パラメータを記憶する記憶装置と、
第１の部分および第２の部分を有するコンパイラとを含み、
第１の部分がオリジナルソースプログラムの中のコメントに応答するために配列されており、前記コメントが要求されたシステム評価のための少なくとも１つの指定された基準を含み、
対応する現在の評価パラメータを読み出すために、少なくとも１つの指定された基準にしたがって前記記憶装置にアクセスし、前記対応する現在の評価パラメータにしたがって、前記要求されたシステム評価が前記オリジナルソースプログラムによって満たされることができるかどうかを評価し、否定的な評価結果の場合には、
適切な追加のソースプログラムステートメントおよびコンパイラ指令を生成し、かつ前記追加のソースプログラムステートメントおよびコンパイラ指令を前記オリジナルソースプログラムに組み入れることにより修正ソースプログラムを生成することにより、
第２部分が、実行可能なコードを生成するために、オリジナルソースプログラムの中の実行可能なステートメント、あるいは、前記否定的な評価結果の場合には、前記修正されたソースプログラムの中の実行可能なステートメントに応答するために配列されている、
遠隔通信ネットワーク。
【請求項２】
前記制御コンピュータが関連するデータ読みおよび/または書き制御プログラムと一緒に対象レコードに制御データを記憶するように配列され、前記要求されたシステム評価のための少なくとも１つの指定された基準が、制御プログラムによって達成される実行時間に関係する請求項１に記載の遠隔通信ネットワーク。
【請求項３】
実行時間が最小実行時間、平均実行時間および最大実行時間の１つ以上を含む請求項２に記載の遠隔通信ネットワーク。
【請求項４】
前記制御コンピュータが関連するデータ読みおよび/または書き制御プログラムと一緒に対象レコードに制御データを記憶するように配列され、前記要求されたシステム評価のための少なくとも１つの指定された基準が、システムに期待された対象レコードの数に関係する請求項１に記載の遠隔通信ネットワーク。
【請求項５】
前記制御コンピュータが関連するデータ読みおよび/または書き制御プログラムと一緒に対象レコードに制御データを記憶するように配列され、前記要求されたシステム評価のための少なくとも１つの指定された基準は、前記制御データを記憶している対象レコードがアクセスされそうなシステム内のアクセスポイントの数に関係する請求項１に記載の遠隔通信ネットワーク。
【請求項６】
前記制御コンピュータが関連するデータ読みおよび/または書き制御プログラムと一緒に対象レコードに制御データを記憶するように配列され、前記要求されたシステム評価のための少なくとも１つの指定された基準が、データレコードあるいはその一部にアクセスすることを許されたユーザのカテゴリに関係する請求項１に記載の遠隔通信ネットワーク。
【請求項７】
前記制御コンピュータが関連するデータ読みおよび/または書き制御プログラムと一緒に対象レコードに制御データを記憶するように配列され、前記要求されたシステム評価のための少なくとも１つの指定された基準が、オブジェクトのクラスの利用可能性に関係する請求項１に記載の遠隔通信ネットワーク。
【請求項８】
複数の相互接続されたコンピュータを含む分散コンピューティングシステムで実行するコードを生成する方法であって、
コードの構造を定義する実行可能なステートメントを含むオリジナルソースプログラム、および要求されたシステム評価のための少なくとも１つの指定された基準を含むコメントを生成し、
前記分散コンピューティングシステムの記憶装置から適切なシステム評価パラメータにアクセスし、前記記憶装置は現在のシステム評価パラメータを含んでおり、
前記現在のシステム評価パラメータにしたがって、前記要求されたシステム評価が前記オリジナルソースプログラムにより満たされることができるかどうかを評価し、
否定的な評価結果の場合には、適切な追加のソースプログラムステートメントおよびコンパイラ指令を生成し、かつ前記追加のソースプログラムステートメントおよびコンパイラ指令を前記オリジナルソースプログラムに組み入れることにより修正ソースプログラムを生成し、
前記分散コンピューティングシステムで実行するための実行可能なコードを生成するために、前記オリジナルソースプログラムの中の実行可能なステートメント、あるいは、否定的な評価結果の場合には、前記修正ソースプログラムに応答するステップを含む方法。
【請求項９】
前記分散コンピューティングシステムは複数の交換機を含む遠隔通信ネットワークのための制御システムであり、前記各コンピュータが前記交換機のそれぞれの１つを制御する請求項８に記載の方法。
【発明の詳細な説明】
本発明は分散処理、とくに、しかしこれのみに限定されないが、遠隔通信ネットワークの制御のための分散処理に関する。より詳しくは本発明は分散型プロセッサ、すなわち好ましくは（必ずではないが）オブジェクト指向形式で構成されたプロセッサ上に構成された制御システムを発展させ、かつ更新することに関する。
遠隔通信ネットワークは、広帯域幅で遅延の少ない情報流を支援する必要が増加している。必要とされる帯域幅は、毎秒キロビットから毎秒メガビット、さらに応用によっては毎秒ギガビット（とくに例えばビデオ・オン・デマンド；アニメーションで表した共用シミュレーション、および分散コンピューティング）で高速に処理を行う帯域幅である。
“インテリジェントネットワーク”の機能、例えば特定の番号への呼の再方向付けを行うために、コンピュータプログラムは、スイッチングセンタに接続された多数（例えば、１００まで）のホストコンピュータで実行される。特定のクライアントにサービスを提供するやり方では、特定のクライアントに関してホストコンピュータに記憶したデータ（例えば、クライアントへの呼をルート設定する特定の番号）に依存する。したがって、数十または数百のホストコンピュータ上に何百万もの加入者の記録があってもよい。
文献（"Twenty-twenty vision-software architectures for intelligence in the 21st century",P.A.Martin,BT Technology Journal Vol.13 No.2,1995年4月）において、本発明の発明者は、必要な分散処理を実行するオブジェクト指向方法の使用を提案した。
オブジェクト指向の方法は、例えばE.L.CusacKおよびE.S.Cordingleyによって編集された文献（"Object oriented technology",BT Technology Journal Vol.11 No.3,1993年7月）に記載されている。オブジェクト指向という用語は常に正確に使用されてはいないが、本明細書ではオブジェクト指向の計算とは、データを“抽象した（encapsulated）”形で記憶する計算技術であり、なおこのデータとは、発呼プログラムまたはルーチンによって直接にアクセスするのではなく、データの読取り、書込み、およびコンパイルできるプログラムの限られた部分によってのみアクセスできるデータである。データおよびそれに関係するコンピュータコードの記録を、“オブジェクト（object）”と呼ぶ。オブジェクトとの間の通信は概して“メッセージ伝達（message passing）”であり；オブジェクトへの呼をデータ値へ送り、オブジェクト内に含まれるプログラムの１つのオペレーション（動作）を呼出し、次にデータ値を戻すことである。
プログラマは、オブジェクト指向方法を使用したいとき、種々の言語を利用できる。これらの中で、現在最も一般的な言語はＣ＋＋である。
分散処理は、幾つかの点で単一のプロセッサのオペレーションと異なる。第１に、他のプログラムまたはデータが発呼プログラムとして同じホストコンピュータ上にまたは異なるコンピュータ上に位置するか否かに依存して、異なるアクセス方法を要求することができる。プログラムまたはデータのロケーションはさらに、それが別のプログラムから到達できる速度にも影響を与える。加えて、１または複数のホストコンピュータは、他のコンピュータが起動した状態であるのに故障する可能性がある。
分散コンピューティングは通常、“クライアント−サーバ”構成を使用して行われる。“クライアント−サーバ”構成では１コンピュータ上の“クライアント”のプログラムが他のコンピュータ上の“サーバ”プログラムに照会して、機能を実行するか、またはクライアントプログラムによって必要なデータを戻す。
オブジェクト指向方法は、分散処理には広く応用されてこなかった。この状況は、文献（"Object oriented programming systems";Blair G.,Pitman Publishing,London,1991年，（ISBN 0-273-03132-5）およびとくにChapter 9,223-243頁;"Distriuted systems and objects";David Hutchison and Jonathan Walpole）に要約が記載されている。先の試みでは、既存のコンピュータ言語に新しいシンタックスを全体的に付加するか、または新しいコンピュータ言語を生成して、分散処理を扱う従来のオブジェクト指向のプログラム作成を拡げた。
第１の態様で本発明は、遠隔通信システムを制御する複数のホストコンピュータの分散型処理で使用するコードを生成するコンパイラ（プレコンパラ）であり、他のコンパイラによってコンパイルできる第１のステートメントを含む計算言語で書込まれたソースプログラムを受取るようにされているコンパイラと、前記システムの動作基準を含み、かつ前記他のコンパイラによって無視される、第２のステートメントで動作するように構成されており、マルチプロセッサ用のプログラムに適合させるコンパイラまたはプレコンパイラとを含む。好ましくは、第２のステートメントはコメントフィールドにある。
都合よく、本発明のこの態様は、より一般的なコンパイラで使用できるプレコンパイラを含むが、書直されたコンパイラに本発明の機能を直接的に組込めることが認識される。
こうして本発明の態様にしたがって、マルチプロセッサシステム上で本発明のコンパイラによってコンパイルされる前に、プログラムの作成者が単一のプロセッサ上で通常のコンパイラによってソースコードをコンパイルし、テストして、マルチプロセッサ環境に専用の第２のステートメントが単一のホストコンパイラによって無視されるようにすることができる。これによって、プログラマはそれを実時間でテストする必要なくプログラムの基本的な動作を確認できる。
別の態様では、本発明は分散型オブジェクトシステム用のコンパイラを準備し、システムの動作基準の機能要件を入力して、コンパイル中に翻訳して、機能または要件が満たされていることを保証する。
例えば、システムの動作基準として応答時間、オブジェクト数、またはデータの結合度がある。
好ましくはこの態様では、各オブジェクトまたはオブジェクトクラス、あるいはその両方を記憶することができる。
都合よく、機能要件は、上述の第１の態様に記載された第２のステートメントを使用して特定される。
以下で本発明の他の態様および実施形態を開示する。
ここで本発明の実施形態を添付の図面を引用して例示的に記載する。
図１は、本発明の実施形態の遠隔通信システムの要素を示すブロック図である。
図２は、図１のシステムの別の実施形態を示すブロック図である。
図３は、図１および２のシステムの一部を形成しているホストコンピュータの要素を示すブロック図である。
図４は、図１および２のシステムの一部を形成しているコンパイラの要素を示すブロック図である。
図５は、図４のコンパイラ装置の動作を示すフローチャートである。
図６は、図５で実行される処理段の結果を示す図である。
図７ａは、図１の一部を形成しているインテリジェンスドメイン内に保持されるデータ構造を表す図である。
図７ｂは、図１の一部を形成しているトランスポートドメイン内に保持されるデータ構造を表す図である。
図８は、図７ａの１つの構成要素のメモリ内のデータ構造を表す。
図９は、図４のコンパイラ装置に応用できるソースコードを示す。
図１０は、図１０乃至１４を含むプレコンパイラプロセスの一部を示すフローチャートである。
図１１は、プロセスの別の部分である。
図１２は、プロセスの別の部分である。
図１３は、プロセスの別の部分である。
図１４は、プロセスの別の部分である。
図１を参照すると、本発明にしたがって生成された遠隔通信システムは、複数のスイッチングセンタまたは交換局（Ｘに似た記号）2a、2bを含み、2a、2bは遠隔通信チャンネル４（例えば、マイクロウエーブリンク、光ファイバーケーブル、同軸銅線ケーブルまたは前記の何れかに搭載されているバーチャル回路）によって相互接続されて、トランスポートドメイン６を構成している。トランスポートドメイン６にはインテリジェンスドメイン８が接続されており、該インテリジェンスドメイン８は複数のホストコンピュータ10ａ、10ｂを含み、10ａ、10ｂはシグナリングリンク12ａ、12ｂ、12ｃを介して相互接続され、さらにスイッチングセンタ2a、2bともシグナリング通信する。例えばシグナリングシステム７（SS7）のようなプロトコルを使用して２つのドメインを相互接続することができる。
ホストコンピュータ10ａ、10ｂは、一緒に結合された疎結合された分散型制御システムを構成し、メッセージング方法を使用してのみ通信できるが、共用メモリ方法を使用しては通信できない。
例えば電話装置14ａ、14ｂであるエンドユーザ端末装置または機器、および例えばビデオプレーヤ16である広帯域通信装置でエンドユーザドメン18を構成し、エンドユーザドメイン18はローカルループ接続20ａ、20ｂ、20ｃ（例えば光ファイバ、セルラ無線、または撚線対銅線ケーブルリンク）を介してトランスポートドメイン６に接続されている。
さらにサービスプロバイダドメイン22も準備されており、これはサービス（例えばビデオサービス）を提供する装置、例えばビデオプレーヤ24およびコンピュータ端末26を含み、ローカルループ接続28ａ、28ｂ、28ｃ、例えばＩＳＤＮチャンネルまたは他の広帯域リンクを介してトランスポートドメイン６に接続されている。
周知のやり方では、エンドユーザ端末装置14または16を使用して、トランスポートドメイン６を介してサービスプロバイダドメイン22へ要求を送る。その結果、トランスポートドメイン６を通ってチャンネルが設定され、サービスプロバイダドメイン22は（例えば実時間のビデオフィルム、または電子フォーマットのデータファイルを送ることによって）チャンネルを介してエンドユーザドメイン18へサービスを送る。
通常の簡単な従来の電話サービス（ＰＯＴＳ）では、トランスポートドメイン６はエンドユーザドメイン18で生成されたダイヤルされた番号によってのみ制御され、トランスポート経路を設定する。しかしながら現在、トランスポートドメインについての“インテリジェントネットワーク”の制御はインテリジェンスドメイン８によって行われている。インテリジェンスドメイン８はトランスポートドメインからダイヤルされた番号またはダイヤルした番号、あるいはその両方を受取り、ダイヤルされた番号またはダイヤルした番号、あるいはその両方にしたがってある呼処理を実行する。インテリジェンスドメインは通常番号変換サービスを行い、ダイヤルされた電話番号を変換して、別の番号へ呼前送りサービスを提供する。この場合、ダイヤルされた番号はホストコンピュータ10の１つの上で記憶された記録に対応し、この番号へはリンク12の１つで信号に応答してアクセスし、対応する再方向付け番号を発生する。
一般的に、トランスポートドメイン６におけるイベントの発生（例えばエンドユーザドメイン18からの呼の開始）に応答して、インテリジェンスドメインは制御情報を供給して、トランスポートドメイン６を制御する。
トランスポートドメイン６内には他のデータも記憶されている。この実施形態では各呼に対する課金用データをインテリジェンスドメインに記憶して、各クライアントに定期的に課金することができる。
図２を参照すると、インテリジェンスドメイン８はさらにコンパイラ装置30を含み、コンパイラ装置30はネットワークサーバ11ａ乃至11ｃを介してホストコンピュータ10に接続されており、コンパイラ装置30、ホストコンピュータ10、およびサーバ11間では広域網（ＷＡＮ）が延びている。
サーバはさらに、インターネット32に含まれる１または複数のWorld Wide Web（ＷＷＷ）サーバコンピュータ、したがって（例えば、ローカルパケットスイッチングノードを介して）インターネットに接続された編集端末15ａ乃至15ｄにも接続されている。
図３を参照すると、各ホストコンピュータ10は、通信ハードウエア100を含むメインフレームまたはサーバ11を含み、通信ハードウエア100はＷＡＮを介してサーバ11；プロセッサ102；メモリ104と接続しており、メモリ104はランダムアクセスメモリの形態の高速アクセスメモリおよび磁気または光ディスクドライブの形態のオフラインメモリの両方を含む。
メモリ装置104内には、オペレーティングシステム106（例えば、ＵＮＩＸ（ＴＭ））；オブジェクトマネージャプログラム108；およびクラスコード110とオブジェクトデータとを含むオブジェクトモデルが格納されており、これらの全ては後でより詳細に記載する。
各編集端末15はパーソナルコンピュータから成り、共通の電話のソケットモデムを介してユーザ構内で対応する電話装置14によって接続できる。
したがって各編集端末15はプロセッサ、スクリーン出力装置、入力装置（例えば、キーボード（またはカーソール制御装置、例えばマウス））、およびグラフィカルユーザ環境（例えば、ウィンドウズ（ＴＭ））と通信プログラムとオブジェクトブラウザプログラムとを含むメモリ装置（ＲＯＭ、ＲＡＭ、およびハードディスク）を含む。
図４を参照すると、コンパイラ装置は、ＷＡＮサーバ11に接続された通信インターフェイス回路基板300；プロセッサ302；高速アクセスメモリ（ＲＡＭ）および大容量メモリ（例えば、ハードディスクドライブ）を含み、オペレーティングシステム（例えば、ＵＮＩＸ（ＴＭ））を記憶するメモリ装置304（別個に示していない）；ネイティブＣ＋＋コンパイラプログラム312（例えば、サンマイクロシステムから販売されているＳｕｎＰＲＯ）；プレコンパイラ316（後述でより詳細に記載する）；および標準機能と定義（サブプログラムまたはサブルーチンを特定するもの）を記憶して新しいプログラムに組込むライブラリ314を含む。
Ｃ＋＋コンパイラは従来のように、再配置可能な二進コードをコンパイルするコンパイラ、および二進コードをライブラリ314に記憶した二進コードルーチンと連結させ、実行のために連結されたコードをメモリアドレススペースに配置するリンカプログラム312bを含む。このようなコンパイラは概してさらにプレプロセッサを含むのが普通で、プレプロセッサはコンパイラの指令を、例えば“ｉｎｃｌｕｄｅ（インクルード）”ステートメントに変換して、追加のコードで読取るか、またはコンパイルの際に別の動作を行う。
さらに準備されているものは：Ｃ＋＋プログラムを定める入力ソースコード（例えば、入力装置320を介して入力されるか、または通信回路300を介してダウンロードされるか、またはメモリ装置304内に含まれるディスクドライブを介してロードされる）を記憶するメモリ領域308；Ｃ＋＋コンパイラ312によって（すなわち、コンパイラプログラムの制御のもとで起動するプロセッサ302によって）生成される実行可能なコードを記憶するメモリ領域310である。さらに領域318も含まれ、分散したプロセッサ10の数；各プロセッサ10の有効記憶メモリの容量；プロセッサ10などの動作速度に関するシステムデータを記憶する。
プロセッサ302は、ソースメモリ308内のソースコードのＣ＋＋コンパイラ312、またはソースメモリ308内のソースコードのＣ＋＋コンパイラ312の前のプレコンパイラ316の何れかによって選択的に起動して、実行可能な、コードメモリ310内で実行可能なコードを生成するようにされている。
Ｃ＋＋コンパイラ312の場合、生成されるコードは適切な単一のプロセッサで実行されることになる。実施形態では、プロセッサ302はそれ自身、このやり方でＣ＋＋コンパイラによって直接に生成されるコードを実行できるようにされており、ユーザはプログラムがほぼ期待通りに起動するか否かを即座にテストできる。
対照的に、プレコンパイラ316は最初に（コードを実行するホスト10を含む分散型システムに関するシステムデータを考慮に入れて）ソースメモリ308でソースコードを処理し、ソースメモリ308内で修正したソースコードを生成し、次にコンパイラ312が実行可能なコードメモリ310内で生成された実行可能なコードにコンパイルする。しかしながらこの実行可能なコードは、多数の分散型ホストコンピュータ10で実行するためのものであるので、コンパイラ装置30で実行可能である必要はない。
図５を参照すると、監督プログラム307の制御のもとでのコンパイラ30の概略的な動作は次のようになる。
段階202で、ソースコードは、（例えば、入力装置320を介して）ソースコードメモリ308へ入力される。段階204で、人間のオペレータがソースメモリ308内でソースコードを編集するかを決めることができ、編集されたテキストは（例えば、通常のテキストプロセッサを使用して）ソースメモリ308へ入力される。
この編集が完了すると、段階206でユーザはソースコードをローカルでテストするか否かを選択できる。ユーザがテストすることを選択したときは、段階208でプロセッサはソースコードメモリ308内でソースコードのＣ＋＋コンパイラ312を実行して、実行可能なコードメモリ310内で実行可能なコードを生成し、段階210でプロセッサ302は実行可能なコードを実行する。シミュレーションプログラムを準備して、意味のない動作を捕え妨げて、例えば出力スクリーン322上に表示するというような動作に代え、何が発生しているかをユーザが確認できるようにすることができる。
実行中にエラーが発生した場合は、段階212でユーザは段階204に戻るこを決めて、ソースコードメモリ308でソースコードを編集することができる。ソースコードが変更不要であると考えられるときは、段階214でソースコードメモリ308内のソースコードにプレコンパイラ316を適用して、修正されたコードを生成し、次に段階216で修正されたコードはＣ＋＋コンパイラによってコンパイルされて、実行可能なコードメモリ310で実行可能なコードを生成する。次に段階218でこれはＷＡＮサーバ11を介して分散型ホストコンピュータ10へ送られる。これは図６に線図で示されている。
ここでインテリジェンスドメイン内で使用されるデータモデルを簡単に記載する。以下で各“オブジェクト”は多数のデータフィールドを含むデータ記録であり、そのオブジェクトに対応するコードによってのみアクセスできる（すなわち、１対多数の関係では、ある１クラスのオブジェクトに関係する同じコードがそのクラスの全てのオブジェクトに実際にアクセスできるという意味である）。
通常のように、オブジェクトはクラスにまとめられていて、同じクラスのオブジェクトは異なるデータを含むが、同じフォーマットである。各オブジェクトは１または複数のサブルーチン（一般的に“方法”または“機能”とよばれている）とも関係付けられ、このサブルーチンはデータに作用して、それを行う唯一の手段を一般的には構成する。
同じクラスの異なるオブジェクトと関係付けられたサブルーチンが対応するデータを受取り、戻すときのフォーマットは同じである（すなわち、同じクラスの全てのオブジェクトは共通のインターフェイスをもつ）。事実、Ｃ＋＋ではサブルーチンは、同じクラスの全てのオブジェクトに対して１度だけ示されるので（すなわち、サブルーチンに対してコードは１度だけ記憶される）、コードおよびオブジェクトは１対多数の関係である。したがってコードは、各オブジェクトではなく、オブジェクトのクラスと関係付けられる。
オブジェクトの各クラスは、オブジェクト指向のプログラム作成ではより大きなクラスを細分したもの（サブディビジョン）であってもよい。この場合、より包括的なクラス（“スーパークラス”）と関係付ける代りに、コードを記憶することもできる。オブジェクトマネージャ108は、各オブジェクトを構成するデータのロケーションリストを含み、オブジェクトを呼出す（インボケーション）（すなわち、呼ぶ（コール））度に、オブジェクトマネージャはクラスコードメモリ領域110内の相関サブルーチンコードにアクセスし、オブジェクトメモリ領域112内の相関するオブジェクトのデータアドレスをこのコードに与える。
図７ａを参照すると、この実施形態ではインテリジェンスドメインのホストコンピュータ10内に準備されたオブジェクトは、新しいクライアントがアクセス（申込みを）するときに生成され；クライアントが自発的にネットワークから離れるかまたは接続を外すときに壊され、クライアントの要求が変わるときに編集される複数のクライアントオブジェクト500（１つのクライアントオブジェクトは数千万人の各クライアントに関するデータを保持している。INC TODR DATAはその中には一日の時間のルート決定データを含む意）：それぞれ各呼の開始時に生成され、呼が終了した後に壊される複数の呼オブジェクト600a乃至600c：それぞれクライアント端末装置の項目に関係し、最初にクライアント端末装置をネットワークへ接続するときに生成される複数の通信装置オブジェクト700a乃至700cを含む。
図７ｂを参照すると、この実施形態ではトランスポートドメイン６のスイッチングセンタ（Ｘに似た記号）2a、2b…はさらにオブジェクト800a乃至800bおよび900a乃至900fを記憶したホストコンピュータを含み、オブジェクト800a乃至800bおよび900a乃至900fはそれぞれスイッチングセンタ内のスイッチおよびスイッチのポートを表している。したがって、各スイッチオブジェクト800はあらゆる瞬間の対応するスイッチの状態の記録を含み；これらのオブジェクトはメモリ内に恒久的に存在し、スイッチングセンタ２に存在する物理的な装置に対して１対１のマッピングを行って、ポートまたはスイッチングオブジェクトへの書込みは各ポートまたはスイッチの状態を変え、ポートまたはスイッチオブジェクトへの読取りは対応する物理的装置の実際の状態を正確に反映する。
図９は、図８のデータに対応するクラスタイプ（クライアント）を表示するＣ＋＋ソースコード100を示す。Ｃ＋＋ソースコード100はＣ＋＋コンパイラ312によって起動されるステートメントを含む部分1000ａ、およびＣ＋＋コンパイラ312によって無視されるコメントステートメントを含む部分1000ｂから成る。
しかしながら本発明の実施形態にしたがうと、コメントステートメント部分1000ｂはプレコンパイラ316によって起動される。各コメントステートメント1002ｂ乃至1012ｂは'//'記号の後に示され、コンパイラ312にその次にくるテキストを無視するように命令している。
コメントフィールドの内容は完全にプログラマ用の文書となることが意図されており、したがってＣ＋＋コンパイラ312によって完全に無視される。本発明の実施形態では、プレコンパイラ316はコメントステートメントを翻訳するようにされている。
本発明の実施形態では、コメントフィールドのテキストは、分散型システムを構成するオブジェクトに関係する機能（または動作）仕様データを含む。とくに、仕様データは次の項目、すなわち：
（ａ）所定のクラス内の予想されるオブジェクト数（対応するメモリスペース容量の合計）、
（ｂ）有効度（アベイラビリティ）−すなわちオブジェクトがアクセスに利用できるアクセス瞬間の割合、
（ｃ）アクセシビリティ−すなわちオブジェクト（またはその中の特定のデータ）を呼ぶことができる異なるアクセスポイントの数（例えば、オブジェクトにアクセスするのに必要な端末またはメインフレームの数）、
（ｄ）セキュリティ−種々のユーザが種々のデータに対してもつアクセス権（すなわち、種々のユーザがすべてのデータにアクセスできるか否か、アクセスできるときは、種々のユーザが読取るか、書込むか、または両方を行うことができるか否か）、
（ｅ）同時処理（concurrency）−すなわち所定のオブジェクトまたはプロセスを同時に呼出すことができる他のプロセスの数、および、
（ｆ）タイムリネス（時宜の程度）−すなわちプロセスを完了する最大時間、平均時間、および／または最小時間を特定するデータを含む。
種々の応用に対するこれらの機能基準の一般的な値を次に示す。
0003878217.tif 000002
図９を再び参照すると、ステートメント1002ａは“クライアント”と呼ばれるオブジェクトクラスを定め、ステートメント1002ｂはこのクラスのオブジェクトが９９．９９％の時間で有効（利用可能）でなければならないことを明記している。
ステートメント1004ａは“名前（name）”と呼ばれる３２バイトのアレイを定め、ステートメント1004ｂはクライアント支援サービス（ＣＳＳ）プロセスが内容に対する読取りおよび書込みアクセスを行わなければならず、他のプロセスが読取りアクセスのみを行なわなければならず（したがってクライアント支援サービススタッフのみが、単一のクライアントに関係しているクラスクライアントのオブジェクトに記憶された加入者名を変更できる）。
ステートメント1008ａは機能“クライアント”を定め、ステートメント1008ｂはクライアント支援サービスがアクセスを行うことを特定する。ステートメント1006ｂは機能“クライアント”に対する最小、平均、および最大ランタイム（ミリ秒）を特定する。
ステートメント1010ａはprintBill呼ばれる取消し機能（void function）（すなわち、無結果に帰する機能）を表して、クライアントオブジェクトに対する請求書をプリントし、ステートメント1010ｂは対応する最小、平均、および最大応答時間を特定する。
最後にステートメント1012ａは、呼を処理しなければならないときに呼出されるcallDeliverdと呼ばれるボイド機能を表し、ステートメント1012ｂはこの機能の最小、平均、および最大応答時間を特定する。
したがってそれが表すように、図９のコードは実行可能なＣ＋＋ステートメント1000ａおよびコメント1000ｂを含み、Ｃ＋＋プログラムとしてコンパイルされて、普通に実行されることになり、コンパイラ312はコメントステートメント1000ｂによって定められる機能の仕様に注意を払わない。
他方で、プレコンパイラ316によって処理されるときは、機能規準1000ｂは、新しいコンパイルできるＣ＋＋コードを生成する際、およびコンパイラに対する指令を生成する際に影響を与える。これは以下で詳細に記載する。
オブジェクトの大きさ／数（Size/Number of objects）
オブジェクトの各クラスを大きさのステートメントと関係付けて、期待されるクラスのオブジェクト数または、必要なメモリスペースの対応する容量の何れかを示すことができる。全体的に、本発明の好ましい実施形態では、ステートメントを予測されるオブジェクト数に翻訳し（その理由は翻訳するとプログラマにとって一層自然になるからである）、そのクラスの表された種々の大きさのデータタイプの和で表されたオブジェクト数を乗算することによって、これを必要なメモリの大きさに変換するようにされている。
図１０を参照すると、プレコンパイラは、段階2002でクラスと関係付けられた何等かの大きさのステートメントを読取り、各ステートメントをメモリスペースの大きさ（メガバイト）に変換して、全てのこのようなメモリ大きさの和を構成するようにされている。
こうして計算されたオブジェクトモデルの合計大きさは、単一メガバイトＵＮＩＸプロセスに適合するのに十分に小さいとき、プレコンパイラはコンパイラに対する指令を書込んで、単一プロセスに対してコードをコンパイルする（段階2006）。これにより全てのオブジェクトが同じアドレス空間内にあるので、コンパイラは基準によってオブジェクトをデータに送ることができるとき、これは使用できるアドレスの仕方を簡単にする。
さもなければ、段階2008でプレコンパイラ316は指令をコンパイラに書込んで、コードを多数のＵＮＩＸプロセスにコンパイルする。段階2010では、プレコンパイラ316は、コードをコンパイルすることになる目標のホストプロセッサの最小数を選択できる。
選択段階2004および2010は、どのくらい多くのメモリを各ホスト10で使用できるかを示すシステムデータメモリ318に記憶したデータにしたがって実行することができる。
他の実施形態では、こうして計算したオブジェクトメモリの大きさを使用して、他の方法でアドレッシング方法を制御できる；例えばオブジェクトモデルの大きさを使用して、コンパイラに命令して、メモリアドレッシング（同じメモリスペース内に全てのメモリを配置できるとき）か；ファイルのアドレス動作（オブジェクト数がより多いとき）またはオブジェクトＵＩＤを使用するか；あるいはバーチャルメモリポインタを使用するかを選択できる。
有効度（Availability）
特定のオブジェクトの高い有効度を保証する１つの特定の方法は、オブジェクトの多数のコピーを作成する（さらに、もちろん全てのコピー内のデータが同じである限り更新する）ことである。所定のオブジェクトの有効度は、そのオブジェクトが応答するのにかかる時間にほぼ逆比例する。したがって望ましいオブジェクトのコピー数は、オブジェクトの有効度および平均応答時間の比にほぼ比例することが好ましい。
したがって、図１１を参照すると、段階3002でプレコンパイラ316はオブジェクトクラスの必要な有効度を読取り、段階2004でオブジェクトのクラスに対して示された平均動作時間を読取るようにされている。
次に、段階3006でプレコンパイラは必要な有効度を与えるのと並行に存在するオブジェクトのコピー数を選択し、段階3008でプレコンパイラはそのクラス（そのクラスの新しいオブジェクトを例示する）に対する構成コードを拡張して、必要なコピー数をランタイム中に（異なるホスト10において）同時に生成する。
段階3006で選択する数は概して１であり（この場合段階3008でプレコンパイラ316は付加的なコードを書込まず）、したがってクラスの応答時間および必要な有効度に基づいて、データの結合性を維持し、高い有効度が要求されるところでは、上記のように２以上のコピーを選択する。
別の実施形態では、目標のアクセス時間を参照し、それにしたがって所望の数のレプリカオブジェクトを生成するのではなく、所定数のレプリカオブジェクト（例えば、２）を選択して、オブジェクトへのアクセス時間（以下でより詳しく記載した規定の最小および最大時間内で）を変更して、これに順応することができる。
アクセシビリティ（Accessibility）
異なるホストコンピュータ10がＷＡＮ11、12において異なるポイントに接続されるとき、幾つかの特定のホストコンピュータ10から特定の端末15またはホスト10への通信経路は他への通信経路よりも短くなる。このデータはシステムデータメモリ318に記憶される。したがってホスト10のオブジェクトを記憶するのに有効であり、ホスト10はオブジェクトにアクセスする端末に接続されている。
図１２を参照すると、段階4002でプレコンパイラ316は、各データ表示に対して、識別子（例えば、ユーザ、クライアント支援、サービスプロバイダ、請求書発行、または規則性）およびそのクラスのオブジェクトにアクセスする端末15の数を読取り、段階4004で、システムデータメモリ318に記憶したデータを使用して、そのクラスの新しいオブジェクトを記憶して、これらの端末へ最良のアクセスを行なう。
段階4006でプレコンパイラ316が新しいソースコードを付加することによって、コンパイラは異なるホストコンピュータ10に対してコンパイルされるオブジェクトマネージャ108を変更して、段階4004で選択した特定のホスト10に接続されたクラスの新しいオブジェクトを生成する全ての要求をオブジェクト108に送ることができる。
セキュリティ（Security）
段階4008では、プレコンパイラ316は新しいソースコードを付加して、特定のデータ項目を変更する機能を呼出すオブジェクトまたはプロセスの識別子をテストし、ユーザの期待されるカテゴリにしたがって識別子があるところにのみアクセスできるようにする。したがって例えば人事データは人事の端末のみによって読取りまたは書込むことができる。
同時処理（Concurrency）
オブジェクトのデータに対する多数の同時処理アクセスが可能であるとき、第１のオブジェクトは別のオブジェクトにアクセスし、このアクセスも同時に行うことができるが、一致しない状態で行われることもある。したがって好ましい実施形態では、不一致を回避する幾つかの手段を準備する。図１３を参照すると、段階5002では、プレコンパイラ316は各クラスごとに、そのクラスにアクセスできる同時処理プロセス数を読取り；同時処理情報を含まないとき、または同時処理プロセス数が明らかに１つであると記載されているときは、段階5004でさらに動作は行われない。段階5004で所定のオブジェクトクラスに対して同時処理プロセス数が所定数を越えているとき（２、またはそれ以上のとき）、段階5006ではこのクラスに対して同時処理制御方法、すなわちこの実施形態では簡単なロッキングプロセスを選択し、１つのオブジェクトにアクセスした後、第１のオブジェクトが終了するまで、別のオブジェクトにアクセスできないようにする。
段階5008では、付加的なソースコードを元のソースコードに付加し、コンパイラは関係するクラスのコードに対してロッキング段階に付加する。
タイムリネス（Timeliness）
各ホスト10は、マルチタスク処理オペレーティングシステム106を使用して、異なるオブジェクトの多数の処理を並列して実行する。
図１４を参照すると、段階6002でプレコンパイラは各クラスと関係付けられたランタイムを読取る。全平均ランタイムの総計に依存して、段階6004で各ホストコンピュータ10のシステムデータメモリ318に記録されたメモリ量にしたがって、プレコンパイラは各ホストコンピュータ10のキャッシュの大きさを確立するコンパイラの指令を含み、有効メモリ内の総計必要アクセス時間に逆比例するキャッシュの大きさを準備する。
段階6006で、各クラスの定義ごとに、短い平均または最大ランタイムを特定するか否かをテストし、テストするときは、段階6008でクラスごとに平均ランタイムに逆比例する優先加重を選択し、段階6010で関係するクラスに対して定められたコードにソースコードを付加して、クラス（クラス内の特定の機能または動作）を呼出してから所定の時間が経過したか否かをテストするタイマを構成し、所定の時間を経過した場合、動作を中止する。
選択した加重値を加重値リストに書込む。加重値リストは各ホスト10ごとにオブジェクトマネージャ108が使用するコンパイラによってコンパイルされており、加重値リストにしたがって各オブジェクトを実行する優先度を設定すると、相対的に長い平均応答時間をもつオブジェクトは比較的に短い優先待機時間のオブジェクトと一致し、オペレーティングシステム106によって“バックグランド”タスクとして処理される。
要約
したがって、プレコンパイラ316の動作後に、ソースコードメモリ308に記憶した拡張ソースコードは付加的なソースコードおよびコンパイラの指令を含み、次の規準、すなわち、
（ａ）付加的なコードまたはデータをクラスコード110へ付加すること；
（ｂ）全てのホストコンピュータ10に対してオブジェクトマネージャコード108を変更すること；
（ｃ）コンパイラに命令して、異なるホストコンピュータ10に対してオブジェクトマネージャの別々のバージョンを生成することの何れかによって機能または動作を実行する。
この拡張したソースコードにしたがって、コンパイラは入力ソースコード内の各表示されたクラスのクラスコード110を含む実行可能なコードファイルを生成し、さらに各ホストコンピュータ10に対してオブジェクトマネージャ108を含むことができる。
各ホストコンピュータ10に対してオブジェクトマネージャ108のコードをコンパイルするのではなく、その代わりに各ホストコンピュータ10ごとにオブジェクトマネージャ108が使用するデータファイルを供給して、その動作を変更することが好ましい。
したがって遠隔通信システムを変更するとき、例えば新しいホストコンピュータを付加して、またはホストコンピュータで使用可能なメモリを拡張して得られるシステム情報を変更するか、または１または複数のオブジェクトクラスの機能を変更するので、上述のローカルテストの後で、上述のように、プレコンパイルまたはコンパイル処理を繰り返して、新しい実行可能なファイルを広域網を介して各ホスト10へ送る。
新しいホストコンピュータを、他のホストコンピュータを変更せずにシステムに付加するとき、予めコンパイルした実行可能なファイルのコピーを広域網を介して新しいホストコンピュータへ供給するだけで、既存のホストコンピュータのやり方で新しいホストコンピュータを起動することができる。
したがって、第１の形式のコンパイラによって無視されるステートメント（例えば、コメントステートメント）にシステムに特定の要件を与えることによって、それを解放する前にシステムの基本的な機能動作の簡単なローカルテストを行って、システムを使用時に変更するときにホストコンピュータ10の可能なダウン時間が最小になるまで低減することが分かる。
他の実施形態および変更
上述から明らかなように、多くの変更および代替が可能である。例えば、上述の理由から、本発明で通常のＣ＋＋コンパイラと共働するプレコンパイラを準備するのが好都合であるが、本発明をさらに従来なかったコンパイラと結合することも等しく可能である（事実、プレコンパイラとコンパイラの結合はまさにこれを表していると考えられる）。
本質的に、本発明は分散型環境で準備するものとして、Ｃ＋＋のみではなく、他のオブジェクト指向の言語、例えばスモールトーク（Smalltalk）（ＴＭ）も使用可能である。より一般的には、オブジェクト指向でない言語で、分散型でないシステムに同様の方法を使用することも可能である。
本発明では遠隔通信システム内にコンパイラ装置を含むと記載したが、実際にはコンパイラシステムは異なる管轄区域にあって、国際的な遠隔通信ネットワークを介してホストコンピュータをリンクできることが認識される；したがって、コンパイラ装置を使用する遠隔通信システムと結合したコンパイラ装置と別々のコンパイラ装置を本発明の技術的範囲に含める。
当然、遠隔通信以外の応用、例えば共用分散コンピューティングも含むことができる。
多くの他の代替および変更も当業者には明白である。したがって本発明は、添付の請求の範囲によって含まれているか否かに関わらず、本明細書に記載した幾つかのまたは全ての課題を包含することを意図している。
本出願と同じ日付で、同じタイトルで出願した我々の他の英国特許出願第9600823.0号は、本発明で使用可能であり、引用によって全体的に組込まれる。
とくに、タイプモデルを生成するために本明細書に記載した機構は、各オブジェクトの付加的なデータフィールドを含むように拡張されることが好ましく、この付加的なデータフィールドは、本発明にしたがって認識された機能的動作データを引用し、次に各オブジェクトマネージャ108によって使用されるコンパイルされた実行可能なコードの一部分として供給される。この方法では、同じ実行可能なプログラムを各ホストコンピュータ10に供給して、メモリ318に記憶したシステム情報を使用する必要を無くすことができる。
【図１】
0003878217.tif 000003
【図２】
0003878217.tif 000004
【図３】
0003878217.tif 000005
【図４】
0003878217.tif 000006
【図５】
0003878217.tif 000007
【図６】
0003878217.tif 000008
【図７ａ】
0003878217.tif 000009
【図７ｂ】
0003878217.tif 000010
【図８】
0003878217.tif 000011
【図９】
0003878217.tif 000012
【図１０】
0003878217.tif 000013
【図１１】
0003878217.tif 000014
【図１２】
0003878217.tif 000015
【図１３】
0003878217.tif 000016
【図１４】
0003878217.tif 000017