(57)【特許請求の範囲】
【請求項１】
コンピュータシステムの処理ユニットを、前記処理ユニットにおいて動作するバックエンドとしての実行環境で使用され、メタデータ情報及び実行可能な命令を含む共通言語ファイルを生成するフロントエンドコンパイラとして機能させるためのプログラムであって、
前記メタデータ情報を生成するためにソースファイルからのステートメントをコンパイルするメタデータモジュール、及び、
前記実行可能な命令を生成するためにソースファイルからのステートメントをコンパイルするコードモジュール、
として前記コンピュータシステムの前記処理ユニットを機能させるためのプログラムであり、
前記メタデータ情報と前記実行可能な命令とが、第１の言語のソースファイルをコンパイルした結果であり、
前記フロントエンドコンパイラは、第２の言語のソースファイルをコンパイルした結果として別のフロントエンドコンパイラによって生成される前記共通言語ファイルのメタデータ情報を使用し、
前記第１の言語のソースファイルからコンパイルされた前記メタデータ情報と前記実行可能な命令とを、前記第２の言語のソースファイルから前記別のフロントエンドコンパイラによって生成された前記共通言語ファイルのメタデータ情報と組み合わせて、前記バックエンドとしての実行環境へ前記フロントエンドコンパイラから出力される共通言語ファイルを形成し、
前記共通言語ファイルが前記ソースファイルのソース言語から独立している
プログラム。
【請求項２】
ネイティブソース言語で書かれたコンピュータプログラムをコンパイルするコンピュータシステムの処理ユニットにおいて動作する方法であって、前記コンピュータプログラムが、前記処理ユニットによって共通言語ファイルがインポートされるインポートステートメントを有する前記方法において、
前記コンピュータシステムの前記処理ユニットにおいて前記コンピュータプログラムを構文解析する工程と、
構文解析中に各々のステートメントを検査し、前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるか否かを前記処理ユニットによって決定する工程と、
前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるならば、前記共通言語ファイルを前記処理ユニットに記憶されたシンボルテーブルに読み込む工程と、
前記ステートメントがネイティブ言語シンボルテーブルエントリに関連するならば、前記シンボルテーブルにその情報を前記処理ユニットによって追加する工程と、
前記ステートメントが出力生成と関連するならば、前記ステートメントを前記処理ユニットにおいて動作する出力モジュールに前記処理ユニットによって供給する工程と、
前記処理ユニットにおいて動作する前記出力モジュールによって、前記のインポートされた共通言語ファイルを使用して、前記ステートメントとメタデータ情報とからなる別の共通言語ファイルを生成する工程と、
前記別の共通言語ファイルを前記コンピュータシステムの前記処理ユニットにおいて動作する実行環境へ前記処理ユニットによって出力して、前記別の共通言語ファイルから実行可能コードを生成する工程と、
を含み、前記別の共通言語ファイルが前記コンピュータプログラムのネイティブソース言語から独立している方法。
【請求項３】
前記共通言語ファイルが、異なるソース言語によって前記コンピュータシステムへ前記処理ユニットによりインポートされる、請求項２に記載の方法。
【請求項４】
前記共通言語ファイルが、手続言語ソースファイルとオブジェクト指向言語ソースファイルとによって前記コンピュータシステムへ前記処理ユニットによりインポートされる、請求項２に記載の方法。
【請求項５】
前記別の共通言語ファイルが前記のインポートされた共通言語ファイルとは異なる、請求項２に記載の方法。
【請求項６】
前記処理ユニットにより前記共通言語ファイルをシンボルテーブルへ読み込む工程が、前記処理ユニットにより前記メタデータ情報を前記シンボルテーブルに読み込む工程をさらに含む、請求項２に記載の方法。
【請求項７】
ネイティブソース言語で書かれ、共通言語ファイルをインポートするインポートステートメントを有するコンピュータプログラムをコンパイルするためにコンピュータシステムを動作させるプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、
前記プログラムが前記コンピュータシステムに、
前記コンピュータプログラムを構文解析し、
構文解析中に各々のステートメントを検査し、前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるか否かを決定し、
前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるならば、前記共通言語ファイルをシンボルテーブルに読み込み、
前記ステートメントがネイティブ言語シンボルテーブルエントリに関連するならば、前記シンボルテーブルにその情報を追加し、
前記ステートメントが出力生成と関連するならば、前記ステートメントを出力モジュールに供給し、
前記出力モジュールによって、前記のインポートされた共通言語ファイルを使用して、前記ステートメントとメタデータ情報とからなり且つ前記コンピュータプログラムのネイティブソース言語から独立している別の共通言語ファイルを生成し、
前記別の共通言語ファイルを前記コンピュータシステム上の実行可能な環境へ出力し、前記別の共通言語ファイルから実行可能コードを生成する、
工程を実行させる、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムソースの言語をコンパイルする技術に関する。特に、ランタイムライブラリ、及び実行時環境で実行可能なプログラム又はアプリケーションを生成するのに用いられるプログラムソースの言語と独立した環境を生成するためのコンパイラの使用方法に関する。
【０００２】
【従来の技術】
コンパイラは、一つの言語、すなわち高水準プログラミング言語のようなソース言語で書かれたアプリケーション又はプログラムを読み取り、当該ソース言語プログラムを第２の言語、すなわちターゲット言語へと変換するコンピュータプログラムである。さらに、コンパイラは、エラーを記録したり、他のファイル又はライブラリをソース言語ファイルによる使用のためにインポートしたりするような、典型的な他のファンクションを実行する。コンパイルプロダクトは、典型的には、特定の動作環境における特定のプロセッサ上で直接実行することができる機械コード言語である。
【０００３】
一般に、コンパイルプロセスは２つの部分を含んでいる。それは、解読を行うフロントエンド部分と、組立を行うバックエンド部分である。フロントエンド解読は、ソース言語ファイルを構文解析し、語彙上、文法上又はシンタックス上の問題を調べ、ソース言語ファイルの中間表示ファイルを生成する。組立ステップは、ソース言語ファイルの中間表示ファイルを解析し、中間表示ファイルからターゲット言語ファイルを生成する。バックエンド組立は、初期は特定のターゲットマシンに依存しており、ソースファイルを生成するのに用いられたソース言語と相対的に独立している。一方、フロントエンド解析は、初期は用いられた特定のソース言語に依存しており、ターゲットマシンと相対的に独立している。
【０００４】
今日使用されている高水準プログラミング言語には少なくとも３つのタイプがある。最初の言語タイプは、手続言語、ファンクション言語、そしてオブジェクト指向プログラミング言語として分類される。さらに、各々に固有のプログラミング言語は、その言語を使用するソフトウェア開発者により使用される関連するファンクションライブラリを有している。例えば、ほとんど全てのプログラミング言語は、ユーザにファイルやキーボードのような入力デバイスから情報を読み込むこと、及びファイルやディスプレイ又はプリンタのような出力デバイスに情報を書き込むことを許可する入出力ファンクションライブラリを有している。このファンクションライブラリを使用するために、ソース言語ファイルは、コンパイラに希望するライブラリファイルを指示する“include”ステートメント、又は“import”ステートメントを有している。
【０００５】
【発明が解決しようとする課題】
コンパイルをしている間は、言語固有のコンパイラがソース言語ファイルを読み込み、ライブラリ宣言ファイルが必要かどうかを判断し、ライブラリ宣言ファイルの読み込みを続行する。重要なことは、ライブラリ宣言ファイルがコンパイラによってハンドリングされるために、ライブラリ宣言ファイルは当該コンパイラのネイティブ言語、すなわちソース言語ファイルと同じ言語で書かれていなければならないことである。例えば、もしユーザがＣ＋＋でソースレベルプログラムを書き、そのプログラムが“stdio.h”のようなライブラリ宣言ファイルを使用するなら、Ｃ＋＋コンパイラがライブラリ宣言ファイルを読み込んで理解できるように、ライブラリ宣言ファイルはＣ＋＋で書かれていなければならない。実行時には、結果として実行可能なプログラムを、実際にユーザにより書かれたソース言語プログラムによって使用されるライブラリ宣言ファイルからこれらのアイテムの実行を供給するライブラリプログラムファイルとともに実行しなければならない。
【０００６】
コンパイラのフロントエンド部に関連する一つの固有の欠点は、ただ一つのタイプのソース言語ファイルだけが特定のフロントエンドとして使用することができるという事実に関連する。つまり、コンパイラは特定のソース言語で書かれたファイルのみをコンパイルし、他のソース言語ファイルを受けつける柔軟性を有していない。さらに、コンパイラによってインポートされたライブラリ宣言ファイルも、特定のコンパイラに関連する特定のソース言語で書かれていなければならない。あいにく、異なるソース言語は、他のプログラミング言語以上のファンクションを実行する点において利益又はアドバンテージを提供し、そのような利益の多くは、特有のライブラリファンクションに関連するものである。したがって、一つの言語のコンパイラは、他の言語で書かれているライブラリ宣言ファイルを使用することができず、ライブラリ宣言ファイルは、ライブラリファンクションが他のソース言語によっても使用できるようにするため、しばしば他のソース言語に翻訳又は更新される。
【０００７】
これらの事実等を考慮に入れて、以下に示す本発明がなされたものである。
【０００８】
【課題を解決するための手段】
本発明は、受け取った情報を２つの形式、すなわち同一もしくは他のフロントエンドシステムへとフィードバックされるメタデータ及び命令コードへとコンパイルするフロントエンドコンパイラシステムに関するものである。メタデータは、後半のコンパイル工程においてフロントエンドシステムによって使用される命令コードを記述する情報を含んでいる。また、命令コードは、実行可能な命令となるように、プロセッサ上で直接的に実行可能なオブジェクトコード、又はバックエンド実行環境で実行される“中間”タイプの命令コードのような多くの形式をとることができる。異なるフロントエンドは異なるソース言語を読み取り、各フロントエンドは相互のフロントエンドの出力をも読み取ることができることから、システムは、その言語に適用されるフロントエンドを使用する一つのソース言語で生成された特定のファンクションセットが、どの異なる言語に適用されるフロントエンドによって直接利用できるのか示されることになる。こうすることで、開発者は、異なるソース言語で生成されたプログラム、コンポーネント、又は他のエンティティにより直接使用されるファンクションを生成するという一つのタイプの問題に特に良く適合したソース言語を使用することが可能となる。
【０００９】
このように、本発明はメタデータと実行可能な命令の情報を生成するフロントエンドコンパイラシステムと、ネイティブソース言語ファイルをコンパイルすることができるのに加えて、この新しい情報をコンパイルすることができるフロントエンドコンパイラシステムの両方に関するものである。本質的には、本発明にかかるフロントエンドシステムは、プロセッサ又は他のバックエンド実行システム上で実行され、他のファイル、例えばターゲットコンピュータシステム又は他のフロントエンドシステム上で実行するための実行ファイルへとコンパイルされる共通言語ファイルを生成する。
【００１０】
また、本発明は多数のプログラミング言語を使用し、ファンクションの共通ライブラリを共有する多数のフロントエンドを有するシステムに関するものである。共通ライブラリは、多数の異なるソース言語で使用されている共通言語で示されている。フロントエンドコンパイラシステムは、共通ライブラリとライブラリを使用するソース言語ファイルを構成する共通言語ファイルを読み込む。さらに、フロントエンドシステムは共通言語ファイルを生成する。フロントエンドシステムによって生成された共通言語ファイルは、共通ライブラリの中で使用されることになる。また、共通言語ファイルは、さらに共通言語ファイルを実行可能な形式へとコンパイルし、ファイルを実行するバックエンドシステム又は実行時環境に供給される。実行時には、共通言語ライブラリファイルに対応するライブラリプログラムファイルが、実行中に使用されるオブジェクトとメソッドをレイアウトするために、実行時環境によって使用される。さらに、バックエンド部が特定のマシンをターゲットにすることになる。
【００１１】
他の見地によれば、本発明は、複数のフロントエンドコンパイラを有するネイティブソースコード言語で書かれているコンピュータプログラムをコンパイルするシステムに関するものである。各フロントエンドコンパイラは、他のネイティブソースコード言語と関連し、各フロントエンドコンパイラは、ネイティブソースコードに加えて、共通言語情報も使用する。また、各フロントエンドコンパイラは、特定のマシンをターゲットとした実行時環境により使用される共通言語ファイルを生成する。さらに、実行時環境は共通言語ファイルを実行時環境へロードするローダと、共通言語ファイルを検査し、実行時に用いられるクラスとオブジェクトのレイアウトを判断するレイアウトエンジンを有する。
【００１２】
さらに他の見地によれば、このシステムの実行時環境は、少なくとも実行するためにメモリに実行可能な命令をロードするローダや、実行時にスタック呼び出しのトラックを維持するスタックウォーカや、メモリ内の命令とデータのレイアウトを判断するレイアウトエンジン、環境のための機密保護サービス、デバッグやプロファイルのような開発者サービス、そして実行時のメモリ管理用のガーベジコレクタのようなメモリ管理サービスのような複数のサービスのうちの一つを提供する。
【００１３】
本発明はまた、共通言語ファイルを生成するフロントエンドコンパイラに関するものである。共通言語ファイルは、共通言語命令部における共通言語命令を記述する共通言語命令部とメタデータ部とを有している。フロントエンドコンパイラは、ネイティブソースコードファイルと共通言語ファイルをコンパイルするのに適用される。フロントエンドは共通言語ファイルの全てを受け取り、共通言語ファイルのメタデータ部だけか、メタデータ部と実行可能命令の両方か、いずれかを使用する。あるいは、フロントエンドは、メタデータ部だけを使用のために受け取ることができるように、共通言語ファイルを分割することを要求する。さらに、共通言語ファイルは、手続言語、ファンクション言語又はオブジェクト指向プログラミング言語のような、異なるネイティブソースコード言語に関連する異なるフロントエンドコンパイラにより使用される共通言語ライブラリの一部をなす。このように、共通言語ライブラリは、多数の異なるプログラム言語ファイルの中で使用されるファンクションを記述する。
【００１４】
さらなる他の見地によれば、本発明は、共通ライブラリファイルをインポートするコンピュータプログラムをコンパイルする方法に関するものである。この方法は、ソース言語ファイルが共通ライブラリファイルに関するインポートステートメントを有し、共通ライブラリファイルをシンボルテーブルに読み込み、シンボルテーブルを用いて残されているソース言語ファイルをコンパイルするものである。
【００１５】
本発明は、コンピュータプロセス、コンピューティングシステムとして、もしくはコンピュータプログラムプロダクトのような製造物として与えられるものであっても良い。コンピュータプログラムプロダクトは、コンピュータシステムによって読み取り可能なコンピュータ記憶媒体であり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードしたものであっても良い。また、コンピュータプログラムプロダクトは、コンピューティングシステムによって読み取り可能な搬送信号を伝達するものであり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードしたものであっても良い。
【００１６】
本発明及びその改良形態について、以下に概略を示している添付図面を参照すること、以下に示す本発明の好適な実施形態についての詳細な記載によって、及び添付された請求の範囲によって、より完全に理解することができる。
【００１７】
【発明の実施の形態】
一般に、本発明の実施の形態にかかるフロントエンドコンパイルシステム及びプロセスは、同一もしくは他のフロントエンドシステムで読み取られる共通言語ファイルを生成するために、一つより多くのソース言語を構文解析し、解読することを含む。本発明の実施の形態は、共通ライブラリ宣言ファイルを含み、もしくはインポートするソース言語ファイルを読み取り、構文解析することができ、共通ライブラリ宣言ファイルはソース言語ファイルと異なる言語で表記されている。２つの言語ファイル（ソース言語と共通言語）は一緒に処理され、少なくとも２つの部分、すなわちメタデータと、実行可能な命令を有する中間コードとを生成する。かかる２つの部分は、１つのファイル、例えばフロントエンドで生成された共通言語ファイルになるか、もしくは分割される。フロントエンドコンパイラシステムは、他の共通言語で表されている共通ライブラリファイルを読み取り、理解するだけでなく、特定のプログラミング言語で書かれたファイルを理解して、解析できる。
【００１８】
本発明を組み込んだ形態であるシステム２０のファンクションソフトウェア構成が、図１に示されている。システム２０は、ネイティブソースファイル２４からの情報のような情報を受け取り、コンパイルするフロントエンド部２２を有する。ネイティブソースファイル２４は、ソフトウェア開発に使用されている、どのタイプのソース言語ファイルでも良い。フロントエンド２２はフロントエンドシステム２２にフィードバックできる共通言語ファイル２６を生成し、及び／又は実行環境３２のような実行環境において実行される。図１に示すように、フロントエンド２２の出力はメタデータ２８と実行可能な命令３０を含んでおり、実行可能な命令３０は“命令コード”とも呼ばれる。実行可能な命令３０は、直接的にプロセッサにより実行される命令（例えば、オブジェクトもしくはネイティブ機械コード）か、あるいは特定の実行環境で実行される“中間”タイプの命令（例えば、Javaバイトコード、p-code、もしくは他の中間言語）かのいずれかである。ある実施の形態では、実行可能な命令３０は、複数の異なるタイプのソース言語のコンセプトを示すのに適応した“共通（一般的という意味）”中間言語を含んでいる。一つのタイプの中間言語だけが、使用されている特定のソース言語にもかかわらず使用できるようにするためである。図１では、フロントエンドシステム２２の出力が、メタデータ２８と実行可能な命令３０の両方の組合せを含む共通言語ファイル２６になるように示されている。あるいは、フロントエンドシステム２２は２つの分離ファイル（図示せず）を生成し、一つはメタデータ２８用に、他方は実行可能な命令３０用にすることもできる。他の実施の形態においては、フロントエンドシステム２２は、メタデータ２８か実行可能な命令３０のどちらかのみを生成してもよい。このアプリケーションの環境下では、メタデータは実行可能な命令３０を記述するのに役立つ情報を含んでいる。例のみによって（そして限定しない）、このようなメタデータは、実行可能な命令において使用されているシンボルもしくは名前の記述と、実行可能な命令において使用されているデータタイプの情報、もしくはフロントエンドシステム２２か実行環境３２に役立つ他の様々な情報を含んでいる。メタデータ部２８は、フロントエンドシステム２２の中にあるメタデータモジュールによって生成され、実行可能な命令３０はフロントエンドシステム２２の中にあるコードモジュールによって生成される。フロントエンドシステム２２は、図１に示すような共通言語ファイル２６のように、メタデータ２８、実行可能な命令３０、又はこれらの組合せのいずれかを読み取り、受け取ることになる。
【００１９】
フロントエンドシステム２２へフィードバックされるのに加えて、共通言語ファイルは実行環境３２へ搬送される。実行環境は、管理された実行時システムか、管理されていない実行環境か、直接的な実行環境か、のいずれかである。本質的に、実行環境は、共通言語ファイル２６によって供給される情報を読み取ることができ、使用することができるバックエンドタイプシステムである。実際に、実行環境は、コンパイルされた情報をフロントエンドシステムから受け取り、コンパイルされた情報から実行可能なコードを生成するバックグラウンド部で記述される、より典型的なバックエンドシステムである。
【００２０】
本発明の他の実施の形態にかかるシステム３４のファンクションソフトウェアの構成を図２に示す。システム３４は、ネイティブソース言語ファイル３８を読み取り、メタデータ４０と実行可能な命令４２の両方を生成するフロントエンドシステム３６を有する。図２に示すように、メタデータ４０と実行可能な命令４２は、一つの共通言語ファイル４４の中にあっても良い。あるいは、２つの部分４０と４２が分割ファイルの一部であっても良い。フロントエンドシステム３６は図１に示すフロントエンドシステム２２と、フロントエンドシステム２２と３６の両方がメタデータと実行可能な命令を生成する点において似ている。しかし、フロントエンドシステム３６は、ネイティブ言語ソースファイル３８に加えて、共通言語ファイルを受け取るように構成されているかもしれないし、されていないかもしれない。
【００２１】
フロントエンドシステム３６により生成される共通言語ファイル４４は、フロントエンドシステム４６等の、他のフロントエンドシステムによって読み込まれる。フロントエンドシステム４６はネイティブ言語ソースファイル４８（ネイティブ言語ソースファイル３８と同一か異なるかどちらか）だけでなく、共通言語ファイル４４を読み込む。さらに、フロントエンドシステム４６は、実行環境５２へ搬送される中間ファイル５０を生成する。中間ファイル５０は、共通言語ファイル４４及び２６（図１）と同じフォーマットを有しても良い。もしくは実行環境５２によって使用される実行可能な命令のみを含むものであっても良い。実行環境５２は、管理された環境、管理されていない環境、もしくは直接的な実行環境のいずれであっても良い点において、図１に示す実行環境３２と似ている。
【００２２】
フロントエンドシステム４６は、ファイル４４及びネイティブ言語ソースファイル４８のような両方の共通言語ファイルを受け取ることができる点において、図１に示すフロントエンドシステム２２と似ている。しかし、フロントエンドシステム４６は、メタデータと実行可能な命令の両方を有する共通言語ファイルを生成するかもしれないし、しないかもしれない点において、フロントエンドシステム２２とは異なっている。
【００２３】
図２は、本発明の観点から可能ならしめる特定の機能を示している。これまで、様々なソース言語がソフトウェア開発に使用するために創られてきた。一般に、ソース言語は、特定の問題もしくは問題における特定のクラスを解決するのに、特に適応しているコンセプトと機能を表現するために発展してきた。このように、特定の言語は、特定の問題を解決し、特定のコンセプトを表現するのに、特に適応するものである。言語の人気が上がったり下がったりしている間に、すべての問題を解決するのに適応した一つのソース言語を誰も作り出さなかった。一つのフロントエンドの出力は、他のフロントエンドにより直接アクセスされ、使用されることから、システム全体のうち異なる部分は、各々、システムの部分に最も適応したソース言語で書かれている。例えば、Lispで書かれている推理又は推論エンジンは、Ｃ＋＋で書かれているプログラムに直接アクセスでき、使用することができる。
【００２４】
本発明の他の観点を組み入れた他のシステム５４にかかるファンクションソフトウェア構成を図３に示す。システム５４は、少なくとも一つのフロントエンド部分を組み入れる。本発明の要件を示すものではなく、単に、多数のもしくは組み合わされたフロントエンドシステムに適用される本発明のコンセプトを示すものであるフロントエンド部５６、５８、６０である。フロントエンド部５６、５８、６０は、ファイル６２、６４、６６のような、おのおの異なるタイプのソース言語ファイルを構文解析し、解読することができる。フロントエンド部５６、５８、６０は、おのおの共通言語ファイル６８、７０、７２を生成する。共通言語ファイル６８、７０、７２は、すべて同一の言語、同一のフォーマットで表される。以下に詳細について説明する。
【００２５】
ひとたびコンパイルされると、各ファイル６８、７０、７２は、実行環境７４に供給されるようなオプションプロセスを経ても良い。実行環境７４は図１及び図２に示される実行環境３２及び５２に似ている。また、実行環境７４は直接実行環境、管理された実行時環境ましくは管理されていない実行時環境のいずれであっても良い。さらに、実行環境はコンパイルされたファイル６８、７０、７２を読み込み、実行することができる、他のどのようなタイプの環境であっても良い。
【００２６】
フロントエンド５６、５８、６０は、それぞれのソース言語ファイル６２、６４、６６を読み込んで解析できることに加えて、共通言語に表されているファイルを読み込んで解析することができる。さらに、共通言語で表されているファンクションのライブラリ宣言ファイル７６は、フロントエンド部５６、５８、６０により使用するのに利用可能である。ある実施の形態では、共通ライブラリ宣言は、フロントエンド５６、５８、６０のようなシステム５４のフロントエンド部によりコンパイルされたファイルを含んでおり、ライブラリ７６を通じて、他の開発者にも利用可能となる。本質的には、ライブラリ７６で利用可能なファイルは、ファイル６８、７０、７２に類似する共通言語フォーマットである。さらに、共通言語ファイル６８、７０、７２は、図３に示されるように宣言の共通ライブラリ７６の一部になっても良い。
【００２７】
ソース言語ファイル６２、６４、６６は、特定のフロントエンドに特化したソース言語とシステム５４の共通言語の両方に関係する組合せ要素を組み立てても良い。より詳しくは、ソース言語６２、６４、６６が、共通ライブラリ宣言ファイル７６の使用を宣言する“include”又は“import”タイプのステートメントを有する。フロントエンドのコンパイル中において、インポートステートメントは、コンパイラに、利用可能なタイプ、クラス、メソッド、及びファイル７６からの他の必要な情報を得るように通知し、それによってライブラリ７６により提供される全てのファンクションの使用を可能にする。残されたソースファイルは、ライブラリで提供されるファンクションを呼び出して使用するために、ネイティブソース言語構文を使っても良い。本発明の実施の形態において、ライブラリ７６は、Pascal、Ｃ、Ｃ＋＋等のようなプログラミング言語のうち、選択されたグループから利用可能なファンクションの代表的なもの（cross section）を含んでいる間は、特定のプログラミング言語用のライブラリファンクションのスーパーセットになりうる。他の実施の形態においては、異なるライブラリ（図示せず）が特定のファンクションをターゲットにするように生成される。例えば、あるライブラリは、インターネット又はワールドワードウェブのアプリケーション開発者をターゲットにしている。他の例としては、ライブラリが、携帯電話のアプリケーション開発者をターゲットにして生成されていること等も考えられる。
【００２８】
実行時には、ファイル６８、７０、及び／又は７２は実行環境７４にロードされる。一般に、オプションプロセスはファイル上で実行され、当該プロセスは、ファイル６８、７０、７２のような受け取った共通言語ファイルを翻訳し、解釈し、さもなければ実行環境７４で実行可能なオブジェクトコードに変換する。このように、実行環境７４は共通言語ファイル６８、７０、及び／又は７２をロードし、これら共通言語ファイルを実行するのに必要な処理を実行する。
【００２９】
さらに、実行環境７４が実行時環境により管理されている場合には、実行環境７４はプログラム実行中に他の多くのサービスを提供する。一例としてシステムがローダを提供し、ローダが実行可能ファイルを受け取って、必要なリファレンスを解釈し、コードをロードする。実行環境はスタックウォーカを提供しても良い。すなわちスタックウォーカは、メソッドコールを管理し、与えられた時点におけるスタック上で連続したメソッドコールの識別子を提供するコードピースである。レイアウトエンジンもまた、提供されても良い。レイアウトエンジンは、メモリ内において、実行されるアプリケーションの一部として、様々なオブジェクト及び他の要素のレイアウトを設定する。さらに、実行環境は、承認されていない資源使用やデバッガやプロファイリングのような他の開発者向けサービスを避けるために、機密保護手段を提供しても良い。管理された実行環境によって提供される他のタイプのサービスは、実行前のコードベリファイ、特定のコードが特定のシステム資源をアクセスする（もしくは実行さえできる）許可を受けているか判断する機密保護機構、及びガーベジコレクションのようなメモリ管理サービスを含んでいる。
【００３０】
さらに、実行環境は、共通ライブラリ宣言７６の機能を実行するための実際の具体化情報を有する共通ライブラリプログラムファイル（図示せず）を使用する。実行環境７４は、オブジェクト固有の組合せを実行するために、従来のローダ／リンカを使用しても良い。実行環境７４が、ファイル６８、７０、７２のようなロードされたファイルの様々な要素を理解できるように、実行環境７４はロードされたファイルのフォーマットを理解する必要がある。実行時環境は、メタデータのような実行時環境に提供される情報を用いて、実行する前にオブジェクトを形成しても良い。
【００３１】
ファイル６８、７０、７２に類似する典型的な共通言語ファイル８０のフォーマットを図４に示す。図４に示すフォーマットは、単なる例示であって、限定されるものではなく、共通言語ファイルの他の多くのフォーマットが使用可能である。図４に示すファイル８０は、“PE”ファイルであり、共通COFFフォーマットである。ここで、COFFとは、共通オブジェクトファイルフォーマット(Common Object File Format)である。COFFファイルは、ヘッダ８２や、セグメント８４、８６、８８、９０、９２に示す複数セグメントのような、比較的標準化された要素を有する。実際は、ファイル８０は、COFFがフォーマットを拡張する方法を定義するものであることから、（ブレーキ９４に示すように）より多くのセグメントを有しても良い。図４に示されているセグメントは、準備において、フロントエンドにより生成されたメタデータと実行可能な命令が、上述したように同一ファイルの中に、もしくは異なるファイルの中にあるようにする必要があることを除いては、本発明に特有の実施形態を必ずしも要求されない。図４に示す例では、ファイル８０が、プログラムデータ情報として、セクション８６の読み書きデータとセクション８８の読み取り専用データのように、セクション８６と８８を使用している。さらに、ファイル８０は、現存するネイティブコードを有するセクション９０のようなセクションを有しても良い。セクション８４と９２は共通言語情報に関するものである。
【００３２】
セクション８４は、セクション９２に存在する共通言語命令を記述するメタデータ情報を有する。セクション９２は、フロントエンド５６、５８、６０のうちの１つのようなフロントエンドで実行されたコンパイルプロセスにおける現在の中間言語コードでも良い。この中間言語コードもしくは共通言語命令は、ファイルを実行可能な命令にコンパイルし、及び／又はファイルを実行する実行環境で使用される。メタデータ情報は、セクション９２の命令におけるタイプ、クラス、メソッド、プロパティ、及びイベント提起の概略を記述することによって、セクション９２における命令を記述する。ある実施の形態においては、メタデータセクション８４は単に構成のリストをタイプしたものにすぎない。
【００３３】
メタデータセクション８４は実行時環境によってヘッダ８２を通じて、特にヘッダ８２に追加された部分９８を通じて見つけられる。追加部分９８は、ファイル８０の中のメタデータセクション８４の位置に関する情報を提供する。メタデータセクション８４は、実行時環境７４に実行時にインスタンス化されたオブジェクトのタイプ、形態、サイズに関する重要な情報を提供する。実行時環境７４はこの情報を用い、レイアウトエンジンを用いて、メソッドテーブルを生成し、実行時のオブジェクトに必要なスペースを割り当てる。
【００３４】
さらに、メタデータセクション８４は、ファイル８０のような共通言語ファイルを呼び出すソースファイルのコンパイルプロセスの間、フロントエンド２２、４６、５６、５８、６０（図１から図３）により使用される情報の一部である。つまり、フロントエンド２２、４６、５６、５８、６０（図１から図３）は、主に利用可能なファンクション記述に関係していることから、一般にファイル８０の残存部分を読み込まず、ファンクションの実行詳細には関係なくシンボルテーブルはロードされ得る。これら実行詳細は共通ライブラリプログラムファイル（図示せず）に保存されており、必要なときに実行環境７４にロードされる。本発明のある実施の形態においては、ファイル８０が共通ライブラリ宣言７６（図３）に追加されると、セクション８６、８８、９０、９２は、必要がなくなることから、ファイルから除去される。他の実施の形態においては、フロントエンドシステムは他のセクションの情報を使用しても良いし、それゆえに除去されることもない。
【００３５】
図４は、適しているファイルフォーマットの一つのタイプのみを示しており、他のファイルフォーマットもまた使用できる。例えば、フロントエンドがネイティブタイプの実行可能コードとメタデータのみを生成するならば、ファイルのセグメントの数も内容も違ったものになるだろう。他の例によれば、メタデータが自分自身のセグメント（８４）に存在するように設計されている。しかし、メタデータはまた、一つあるいは多くの他のセグメントと結合されている。さらに、メタデータは自分自身のセグメントに存在しても良いし、他のセグメント内に散在していても良い。
【００３６】
図５及び以下の記述は、本発明を具現化するのに適しているコンピュータ環境についての一般的な記述を提供することを意図するものである。要求されなかったとしても、本発明は、パーソナルコンピュータによって実行されるプログラムモジュールのように、コンピュータで実行可能な命令の一般的なコンテキストの中に記述されるだろう。一般に、プログラムモジュールは、特定のタスクを実行し、又は特定の概要データタイプを具現化するルーチンと、プログラムと、オブジェクトと、構成要素と、データ構造等を含んでいる。さらに、当業者なら、本発明が、携帯型デバイスやマルチプロセッサシステム、マイクロプロセッサを基調としたあるいはプログラム可能な消費家電、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等を含む他のコンピュータシステム構成で実施できることを認めるだろう。本発明はまた、通信ネットワークを通じてリンクされているリモートプロセスデバイスによってタスクが実行される分散コンピューティング環境においても実施することができる。分散コンピューティング環境においては、プログラムモジュールは、ローカル及びリモートのメモリ保存デバイスの両方に配置することができる。
【００３７】
図５を参照すれば、発明を実施するための典型的なシステム１００は、プロセスユニット１０４と、システムメモリ１０６と、システムメモリを含む様々なシステム構成要素をプロセスユニット１０４とつなぐシステムバス１０８を含む従来のパーソナルコンピュータ１０２の形態で、一般的な目的のコンピューティングデバイスを含んでいる。システムバス１０８は様々な形式のバス構成であり、多様なバス体系を使用しているメモリバス、メモリコントローラ、ペリフェラルバス、ローカルバスを含んでいる。システムメモリ１０６は再生専用メモリ（ROM）１１０とランダムアクセスメモリ（RAM）１１２を含んでいる。基本入出力システム（BIOS）１１４は、起動時のように、パーソナルコンピュータ１０２における要素間の情報の伝達を助ける基本ルーチンを含んでおり、ROM１１０に保存されている。
【００３８】
パーソナルコンピュータ１０２は、さらに、ハードディスクの読み出し及び書き込みを行うハードディスクドライブ１１６、着脱可能な磁気ディスク１２０の読出し及び書込みを行う磁気ディスクドライブ１１８、及びCD-ROM又は他の光学媒体のような着脱可能な光ディスク１２４の読出し及び書込みを行う光ディスクドライブ１２２を含んでいる。ハードディスクドライブ１１６、磁気ディスクドライブ１１８、及び光学ディスクドライブ１２２は、それぞれ、ハードディスクドライブインタフェース１２６、磁気ディスクドライブインタフェース１２８、及び光ディスクドライブインタフェース１３０によって、システムバス１０８に接続されている。ドライブ及びその関連コンピュータ読み取り可能媒体が、パーソナルコンピュータ１０２のコンピュータ読み取り可能命令、データ構造、プログラムモジュール、及び他のデータの不揮発性記憶部を提供している。上述した典型的な環境では、ハードディスク、着脱可能な磁気ディスク１２０、及び着脱可能な光ディスク１２４を用いているが、当業者には言うまでもなく、コンピュータによりアクセス可能なデータを保存できる他のタイプのコンピュータ読み取り可能媒体もまた、典型的な実行環境に使用することができる。他のタイプのコンピュータ読み取り可能媒体としては、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ＣＤ、ＤＶＤ、ランダムアクセスメモリ（RAM）、再生専用メモリ（ROM）等がある。
【００３９】
多数のプログラムモジュールが、ハードディスク、磁気ディスク１２０、光ディスク１２４、ROM１１０、又はRAM１１２に格納され、これらは、オペレーティングシステム１３２、１つ以上のアプリケーションプログラム１３４、他のプログラムモジュール１３６、及びプログラムデータ１３８を含んでいる。ユーザは、コマンド及び情報を、パーソナルコンピュータ１０２に、キーボード１４０、及び（マウスのような）ポインティングデバイス１４２のような入力デバイスを通じて入力することができる。また、一連の画像を取り込むことができるカメラ１４４も、システムバス１０８に接続されている適当なカメラインタフェース１４６を通じて、パーソナルコンピュータ１０２への入力デバイスとして含まれる。他の入力デバイス（図示せず）としては、例えば、マイクロフォン、ジョイステック、ゲームパッド、サテライトディッシュ、及びスキャナ等が含まれる。これら及び他の入力デバイスは、システムバス１０８に接続されているシリアルポートインタフェース１４８を通じてプロセッシングユニット１０４に接続されていることが多い。しかし、これらの入力デバイスはまた、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（USB）等の他のインタフェースによって接続されていても良い。モニタ１５０、又は他のタイプのディスプレイデバイスもまた、ビデオアダプタ１５２のようなインタフェースを通じて、システムバス１０８へとつながれている。モニタに加えて、パーソナルコンピュータは、典型的には、スピーカやプリンタのような他の周辺出力デバイス（図示せず）を含んでいる。
【００４０】
パーソナルコンピュータ１０２は、リモートコンピュータ１５４のような１つ以上のリモートコンピュータへの論理的な接続を用いてネットワーク化された環境において動作することができる。図５には、メモリ記憶デバイス１５６だけが示されているが、リモートコンピュータ１５４は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア（peer）デバイス、又は他の共通ネットワークノードであり、典型的にパーソナルコンピュータ１０２との関連で上述した要素の多くまたはすべてを含むものである。図３に描かれている論理的な接続は、ローカルエリアネットワーク（LAN）１５８、及びワイドエリアネットワーク（WAN）１６０を含んでいる。このようなネットワーク環境は、オフィス、企業規模コンピュータネットワーク、イントラネット、及びインターネットにおいて珍しいものではない。
【００４１】
LANネットワーク環境で用いるときには、パーソナルコンピュータ１０２は、ネットワークインタフェース、又はアダプタ１６２を通じてローカルエリアネットワーク１５８に接続される。WANネットワーク環境で用いるときには、パーソナルコンピュータ１０２は、典型的に、インターネットのようなワイドエリアネットワーク１６０による通信を確立するためのモデム１６４、もしくは他の手段を含んでいる。モデム１６４は、内蔵でも外付けでもよく、シリアルポートインタフェース１４８を通じて、システムバス１０８と接続されている。ネットワーク化された環境において、パーソナルコンピュータ１０２に関連して描かれたプログラムモジュール、又はその一部は、リモートメモリ記憶デバイスに保存されてもよい。図示されたネットワーク接続は一例であって、コンピュータ間の通信リンク確立のために他の手段を用いることも認められる。
【００４２】
ここまで論じてきたオペレーション環境の一例によれば、記述セクションの残存部分は、発明の実施の形態にかかるオペレーションモジュールの記述専用となる。本発明の様々な実施の形態における論理オペレーションは、（１）コンピュータシステム上で実行する一連のコンピュータ具現化ステップ又はプログラムモジュールとして、及び／又は（２）コンピューティングシステムの内部で接続されたハードウェアもしくは論理モジュールとして、具現化される。具現化は、発明を具現化するコンピューティングシステムの実行要求に依存する選択行為である。よって、上述された本発明の実施の形態を実現する論理オペレーションは、オペレーション、ステップもしくはモジュールとして選択的に参照される。
【００４３】
フロントエンドシステム２２（図１）、フロントエンドシステム４６（図２）、又はフロントエンド５６、５８、６０（図３）のように共通言語ファイルを読み込むためのフロントエンドシステムにより実行される、オペレーションの手続流れ２００の例を図６に示す。流れ図は、読込オペレーション２０２から始まり、各々ファイル２４、４８、６２、６４、６６のようなネイティブソースファイルの最初のステートメントを読み込むことになる。読込オペレーション２０２に続いて、解析モジュール２０４が、適当な言葉が使用されているか、すなわち語彙の解析や、適当な文法であるかについて、ステートメントを解析する。
【００４４】
語彙及び文法解析に続いて、エラーが無い場合には、判断オペレーション２０６がステートメントがインポートであるか否か、又は共通言語ファイルもしくはライブラリをインポートすることを試みるステートメントを含んでいるか否かを判断する。特にインポートコマンドが、このファイルのタイプを指示するのに使用されているかもしれないし、又はインポートファンクションを試みた後、実際のライブラリが共通言語ライブラリであるか否かを判断するために解析される。メソッドは、ファイルが共通言語ライブラリであることを検出する能力を与えるためにフロントエンド機能に提供される。
【００４５】
もし、ライブラリが共通言語ライブラリであるならば、Yes枝へ進み、探索オペレーション２０８へ進む。探索オペレーション２０８は、本質的にファイルを捜しだし、現行のコンパイルのためのシンボルテーブルにファイルをロードするプロセスを開始する。一度探し出されたら、読込オペレーション２１０が共通ライブラリファイルの最初の一行を読み込む。これは、ファイルのメタデータセクションを見つけ、メタデータセクションの最初の一行を見つけるために共通言語ファイルのヘッダの解析を要求できる。重要なことは、読み込まれた共通ライブラリの中の最初の情報が、例えばセクション８４（図４）のようなメタデータ部分であることである。上述したメタデータは、フロントエンドにシンボルテーブルをロードする能力を与えるタイプ、メソッド、アーギュメント等を記載する情報である。メソッドはフロントエンドが共通言語ファイルを読むことができるように、フロントエンド機能に提供されても良い。
【００４６】
次に、組立オペレーション２１２は、読み込まれたメタデータの一行に基づいて、シンボルテーブルを組み立て、もしくはロードする。組立オペレーション２１２に続いて、テストオペレーション２１４が、現在の行が最後の行かどうかを決めることによって、メタデータ情報により多くの行があるか否かを判断する。メタデータ情報により多くの行があるならば、現在の行は最後の行ではなく、Yes枝へ進み、読込オペレーション２１０へ戻って次の行を読み込む。流れは、シンボルテーブルを組み立てるために、メタデータ情報のすべての行を読むように効果的にループする。最後の行がシンボルテーブルに保存されたら、テストオペレーション２１４によりNo枝へ進み、読込オペレーション２０２へ戻る。読込オペレーション２０２はオリジナルのソースコードファイルの次の行を読み込むことになる。
【００４７】
もし、判断オペレーション２０６が、共通言語ライブラリとしてのステートメントを含まないと判断したならば、No枝へ進み、モジュール２１６へ進む。モジュール２１６は、ステートメントを解析し、情報をシンボルテーブルへロードするか、あるいは出力モジュールに情報を提供するかを判断する。つまり、ファイルの全てのステートメントにとって、シンボルテーブルはロードされるか、出力タイプステートメントが生成されるかのいずれかである。モジュール２１６は流れのこの面を提供する。
【００４８】
現行のステートメントによるモジュール２１６の完成により、判断行為２１８は、現行ステートメントがソースコードファイルの中で最後のステートメントであるか否かを判断する。このオペレーションは、ファイルマーカの最後をチェックするだけでもよい。もし、ステートメントがファイルの最後のステートメントでなかったら、流れは枝Noへ進み、読取オペレーション２０２へ戻り、次のステートメントが読み込まれる。もし、判断行為２１８による判断として、ステートメントがファイルの最後のステートメントであれば、流れは枝Yesへ進み、生成オペレーション２２０へ進む。
【００４９】
生成オペレーション２２０は、モジュール２１６により提供される出力ステートメントを処理する。そして、中間言語ファイルを生成する。このステップは、コンパイラに全く共通のオペレーションであり、すなわちコンパイラは、ある種のデータ構造又は中間言語ファイルを生成する。しかし、生成オペレーション２２０は、ファイル６８、７０、７２（図３）のような出力ファイルの一部として、メタデータ情報をも提供する。そして、このメタデータは、フロントエンド２２、４６、５６、５８、６０（図１から図３）で使用されているのと同一タイプのメタデータ情報である。
【００５０】
一度生成オペレーション２２０が完了すると、流れは終了２２２へ進む。結果としてのファイルは、メタデータ情報と共通言語命令の両方を含む共通言語ファイルである。さらに、本発明の実施の形態においては、結果としてのファイルフォーマットが図４に示されている。共通言語ファイルは、他のフロントエンドシステム２２、４６、５６、５８、６０（図１から図３）か、実行環境７４（図３）のような実行環境か、どちらかによって使用される。
【００５１】
図７は、他の実施の形態にかかるフロントエンド部のオペレーション流れ図を示す。本質的には、プロセスは、図６と連結して上述されているプロセスと同様であるが、流れ３００がオペレーション３０４において、新しい読込ステートメントが、オペレーション３０６で発生する語彙又は文法解析を行う前に、インポートステートメントで有るか否かを判断する点で異なる。つまり、オペレーション３０２は、上述されているオペレーション２０２と、新しいステートメントが解析のために読み込まれる点において類似している。そして、判断ステップ３０４が、ステートメントが共通ライブラリのインポートステートメントと関連しているか否かを判断する。もし関連しているならば、オペレーション３０８、３１０、３１２、３１４が実行され、ライブラリからシンボルテーブルへと情報がロードされる。もし関連していないならば、オペレーション３０６、３１６、３１８が、ソースファイルの残存部分をシンボルテーブルか出力ステージのいずれかへロードする。さらに、オペレーション３２０は、上述したオペレーション２２０に類似しており、共通言語ファイルを生成する。共通言語ファイルは、他のフロントエンドシステム２２、４６、５６、５８、６０（図１から図３）か、実行環境７４（図３）のような実行環境か、いずれかによって使用される。
【００５２】
さらに他の実施の形態によれば（図示せず）、ライブラリファイル名はコマンドラインオプションとして追加できる。この場合、コンパイラは、ソース言語ファイルを構文解析する前に、メタデータ情報をシンボルテーブルにロードする。
【００５３】
Pascal、COBOL、C++等のような現存するソース言語のための現存するフロントエンドコンパイラを変更するためには、フロントエンドシステム２２（図１）と同じ機能を有するように、２つのステップを実行する必要がある。最初に、コンパイラのソース言語の構文が、ソース言語が他のファイルを“import”するようになっているか否かを判断するために検査されるべきである。もしそうならば、まだそのように適合されていなければ、インポート能力は、中間ファイルもしくは共通言語タイプファイルをインポートできるように変更されるべきである。もし、ソース言語が“import”ファンクションを有していない場合には、ソース構文は、インポートファンクションを実施できるように拡張されるべきである。そして、現存するフロントエンドコンパイラシステムは、少なくとも中間ファイルのメタデータ部を読み込んで、適当にメタデータをハンドリングできるように変更されるべきである。つまり、フロントエンドは、共通言語ファイルを構文解析でき、メタデータのタイプとメソッド情報を、適当な形式の特定のシンボルテーブルに変換することができる。シンボルテーブルに追加された各新しいクラスにとって、共通言語ファイルは、新しいクラスによってサポートされるメソッドとして読み込まれなければならない。もし、出力中の共通言語ファイルの実行可能な命令を直接使用したいならば、フロントエンドはまた、実行可能な命令を読み込んでハンドリングできるよう適当に変更される必要もあるかもしれない。
【００５４】
現存するコンパイラを、中間共通言語ファイルを使用することができるように変更するのに加えて、フロントエンドシステムは、共通言語ファイルを生成するように変更することができる。大部分の現存するコンパイラは、機械語又は他のファイルを生成するバックエンド部分を有する。一般に、コンパイラを共通言語ファイルを生成するように変更するためには、バックエンドが、機械コードや生成されてきたものの代わりに、共通言語を生成するように変更される。さらに、バックエンドが、共通言語命令に沿ってメタデータを追加するように変更される。
【００５５】
上述したシステム及び方法によって、多くの異なるプログラミング言語を使用する開発者によって使用される共通言語ライブラリを生成することができるようになる。また、開発者は、一つの言語に特有の問題あるいは他の言語についての他の問題を解決し、そして、他の言語でもってアプリケーション全体を書くことができるようになる。本質的に、本システムは、共通言語ファイルを生成する一つのソース言語コンパイラから、共通言語ファイルを使用する他のソース言語コンパイラまでの、ライブラリについての情報を伝達するために、共通言語ファイルを使用する。一つのライブラリは、ライブラリが各々の新しいプログラミング言語で再書き込みする必要がないように、多くの言語にわたって共有される。さらに、共通言語は、実行時環境が前もって、実行時に使用される異なるオブジェクトのレイアウトを決めておけるように、命令を記述するメタデータを有する。あらに、このシステムは、実行時に先だってメソッドとフィールドのレイアウトを特定する言語を、随意にハンドリングするよう構成することができる。
【００５６】
本発明は、構成の特徴及び／又は方法論的なステップで特定された言語において記述されているが、添付される請求の範囲で定義される発明は、特に記載された特徴又はステップに限定される必要はない。例として、他のソース言語も、最初のソース言語及び共通言語と共同で、フロントエンド部に含まれている。それゆえ、特定された特徴及びステップは請求の範囲に記載された発明を具現化するのに適した形態として開示されている。
【００５７】
【発明の効果】
以上のように本発明にかかるシステム及び方法によれば、多くの異なるプログラミング言語を使用する開発者によって使用される共通言語ライブラリを生成することができるようになる。また、開発者は、一つの言語に特有の問題あるいは他の言語についての他の問題を解決し、そして、他の言語でもってアプリケーション全体を書くことができるようになる。
【図面の簡単な説明】
【図１】  本発明のフロントエンド部を組み入れたソフトウェア環境の機能構成を示す。
【図２】  本発明のフロントエンド部の他の実施の形態にかかるソフトウェア環境の機能構成を示す。
【図３】  本発明の他の実施の形態にかかるソフトウェア環境の機能構成を示す。共通ライブラリを生成するために多数の共通言語ファイルを用いる場合を示す。
【図４】  図１、図２及び図３に示すフロントエンド部を用いて生成される結果としての中間言語ファイルのフォーマットを示す。
【図５】  本発明の実施の形態の実行中に使用されるコンピュータタイプにおけるコンピュータの代表例のブロックダイアグラムである。
【図６】  図４に示す中間言語ファイルを生成するオペレーションの特徴を示す流れ図である。
【図７】  図４に示す中間言語ファイルを生成する他の実施の形態にかかるオペレーションの特徴を示す流れ図である。
【符号の説明】
２２、３６、４６  フロントエンドシステム
２４、３８、４８  ネイティブ言語ソースファイル
２６、４４、６８、７０、７２  共通言語ファイル
２８、４０、８４  メタデータ
３０、４２、９２  実行可能命令
３２、５２、７４  実行環境
５０  中間ファイル
５６  手続言語用フロントエンド
５８  ファンクション言語用フロントエンド
６０  オブジェクト指向言語用フロントエンド
６２  手続言語ソースファイル
６４  ファンクション言語ソースファイル
６６  オブジェクト指向言語ソースファイル
７６  共通ライブラリ宣言
８２  ヘッダ
８６  データ読込／書込
８８  データ読込専用
９０  ネイティブコード
１０２  パーソナルコンピュータ
１０４  プロセッシングユニット
１０６  システムメモリ
１０８  システムバス
１１０  ＲＯＭ
１１２  ＲＡＭ
１１４  ＢＩＯＳ
１１６  ハードディスクドライブ
１１８  磁気ディスクドライブ
１２０  着脱可能記憶媒体
１２２  光ディスクドライブ
１２４  光ディスク
１２６  ハードディスクドライブインタフェース
１２８  磁気ディスクドライブインタフェース
１３０  光ディスクドライブインタフェース
１３２  オペレーティングシステム
１３４  アプリケーションプログラム
１３６  プログラムモジュール
１３８  プログラムデータ
１４０  キーボード
１４２  マウス
１４４  カメラ
１４６  カメラインタフェース
１４８  シリアルポートインタフェース
１５０  モニタ
１５２  ビデオアダプタ
１５４  リモートコンピュータ
１６２  ネットワークインタフェース
１６４  モデム
【図１】
0004183399.tif 000002
【図２】
0004183399.tif 000003
【図３】
0004183399.tif 000004
【図４】
0004183399.tif 000005
【図５】
0004183399.tif 000006
【図６】
0004183399.tif 000007
【図７】
0004183399.tif 000008