JP4183399B2 - 複数言語のコンパイル方法及びシステム - Google Patents

複数言語のコンパイル方法及びシステム Download PDF

Info

Publication number
JP4183399B2
JP4183399B2 JP2001164625A JP2001164625A JP4183399B2 JP 4183399 B2 JP4183399 B2 JP 4183399B2 JP 2001164625 A JP2001164625 A JP 2001164625A JP 2001164625 A JP2001164625 A JP 2001164625A JP 4183399 B2 JP4183399 B2 JP 4183399B2
Authority
JP
Japan
Prior art keywords
file
language
statement
common language
source
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.)
Expired - Fee Related
Application number
JP2001164625A
Other languages
English (en)
Other versions
JP2002024032A5 (ja
JP2002024032A (ja
Inventor
エム. アブラムス、ブラッドレイ
エム. ボスワース、ジョージ
ダブリュー. ブルメ、クリストファ
エイチ. ダスド、パトリック
ディー. ハリー、ブライアン
エス. ミラー、ジェイムス
ピー. モリソン、バンス
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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2002024032A publication Critical patent/JP2002024032A/ja
Publication of JP2002024032A5 publication Critical patent/JP2002024032A5/ja
Application granted granted Critical
Publication of JP4183399B2 publication Critical patent/JP4183399B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers

Description

【0001】
【発明の属する技術分野】
本発明は、プログラムソースの言語をコンパイルする技術に関する。特に、ランタイムライブラリ、及び実行時環境で実行可能なプログラム又はアプリケーションを生成するのに用いられるプログラムソースの言語と独立した環境を生成するためのコンパイラの使用方法に関する。
【0002】
【従来の技術】
コンパイラは、一つの言語、すなわち高水準プログラミング言語のようなソース言語で書かれたアプリケーション又はプログラムを読み取り、当該ソース言語プログラムを第2の言語、すなわちターゲット言語へと変換するコンピュータプログラムである。さらに、コンパイラは、エラーを記録したり、他のファイル又はライブラリをソース言語ファイルによる使用のためにインポートしたりするような、典型的な他のファンクションを実行する。コンパイルプロダクトは、典型的には、特定の動作環境における特定のプロセッサ上で直接実行することができる機械コード言語である。
【0003】
一般に、コンパイルプロセスは2つの部分を含んでいる。それは、解読を行うフロントエンド部分と、組立を行うバックエンド部分である。フロントエンド解読は、ソース言語ファイルを構文解析し、語彙上、文法上又はシンタックス上の問題を調べ、ソース言語ファイルの中間表示ファイルを生成する。組立ステップは、ソース言語ファイルの中間表示ファイルを解析し、中間表示ファイルからターゲット言語ファイルを生成する。バックエンド組立は、初期は特定のターゲットマシンに依存しており、ソースファイルを生成するのに用いられたソース言語と相対的に独立している。一方、フロントエンド解析は、初期は用いられた特定のソース言語に依存しており、ターゲットマシンと相対的に独立している。
【0004】
今日使用されている高水準プログラミング言語には少なくとも3つのタイプがある。最初の言語タイプは、手続言語、ファンクション言語、そしてオブジェクト指向プログラミング言語として分類される。さらに、各々に固有のプログラミング言語は、その言語を使用するソフトウェア開発者により使用される関連するファンクションライブラリを有している。例えば、ほとんど全てのプログラミング言語は、ユーザにファイルやキーボードのような入力デバイスから情報を読み込むこと、及びファイルやディスプレイ又はプリンタのような出力デバイスに情報を書き込むことを許可する入出力ファンクションライブラリを有している。このファンクションライブラリを使用するために、ソース言語ファイルは、コンパイラに希望するライブラリファイルを指示する“include”ステートメント、又は“import”ステートメントを有している。
【0005】
【発明が解決しようとする課題】
コンパイルをしている間は、言語固有のコンパイラがソース言語ファイルを読み込み、ライブラリ宣言ファイルが必要かどうかを判断し、ライブラリ宣言ファイルの読み込みを続行する。重要なことは、ライブラリ宣言ファイルがコンパイラによってハンドリングされるために、ライブラリ宣言ファイルは当該コンパイラのネイティブ言語、すなわちソース言語ファイルと同じ言語で書かれていなければならないことである。例えば、もしユーザがC++でソースレベルプログラムを書き、そのプログラムが“stdio.h”のようなライブラリ宣言ファイルを使用するなら、C++コンパイラがライブラリ宣言ファイルを読み込んで理解できるように、ライブラリ宣言ファイルはC++で書かれていなければならない。実行時には、結果として実行可能なプログラムを、実際にユーザにより書かれたソース言語プログラムによって使用されるライブラリ宣言ファイルからこれらのアイテムの実行を供給するライブラリプログラムファイルとともに実行しなければならない。
【0006】
コンパイラのフロントエンド部に関連する一つの固有の欠点は、ただ一つのタイプのソース言語ファイルだけが特定のフロントエンドとして使用することができるという事実に関連する。つまり、コンパイラは特定のソース言語で書かれたファイルのみをコンパイルし、他のソース言語ファイルを受けつける柔軟性を有していない。さらに、コンパイラによってインポートされたライブラリ宣言ファイルも、特定のコンパイラに関連する特定のソース言語で書かれていなければならない。あいにく、異なるソース言語は、他のプログラミング言語以上のファンクションを実行する点において利益又はアドバンテージを提供し、そのような利益の多くは、特有のライブラリファンクションに関連するものである。したがって、一つの言語のコンパイラは、他の言語で書かれているライブラリ宣言ファイルを使用することができず、ライブラリ宣言ファイルは、ライブラリファンクションが他のソース言語によっても使用できるようにするため、しばしば他のソース言語に翻訳又は更新される。
【0007】
これらの事実等を考慮に入れて、以下に示す本発明がなされたものである。
【0008】
【課題を解決するための手段】
本発明は、受け取った情報を2つの形式、すなわち同一もしくは他のフロントエンドシステムへとフィードバックされるメタデータ及び命令コードへとコンパイルするフロントエンドコンパイラシステムに関するものである。メタデータは、後半のコンパイル工程においてフロントエンドシステムによって使用される命令コードを記述する情報を含んでいる。また、命令コードは、実行可能な命令となるように、プロセッサ上で直接的に実行可能なオブジェクトコード、又はバックエンド実行環境で実行される“中間”タイプの命令コードのような多くの形式をとることができる。異なるフロントエンドは異なるソース言語を読み取り、各フロントエンドは相互のフロントエンドの出力をも読み取ることができることから、システムは、その言語に適用されるフロントエンドを使用する一つのソース言語で生成された特定のファンクションセットが、どの異なる言語に適用されるフロントエンドによって直接利用できるのか示されることになる。こうすることで、開発者は、異なるソース言語で生成されたプログラム、コンポーネント、又は他のエンティティにより直接使用されるファンクションを生成するという一つのタイプの問題に特に良く適合したソース言語を使用することが可能となる。
【0009】
このように、本発明はメタデータと実行可能な命令の情報を生成するフロントエンドコンパイラシステムと、ネイティブソース言語ファイルをコンパイルすることができるのに加えて、この新しい情報をコンパイルすることができるフロントエンドコンパイラシステムの両方に関するものである。本質的には、本発明にかかるフロントエンドシステムは、プロセッサ又は他のバックエンド実行システム上で実行され、他のファイル、例えばターゲットコンピュータシステム又は他のフロントエンドシステム上で実行するための実行ファイルへとコンパイルされる共通言語ファイルを生成する。
【0010】
また、本発明は多数のプログラミング言語を使用し、ファンクションの共通ライブラリを共有する多数のフロントエンドを有するシステムに関するものである。共通ライブラリは、多数の異なるソース言語で使用されている共通言語で示されている。フロントエンドコンパイラシステムは、共通ライブラリとライブラリを使用するソース言語ファイルを構成する共通言語ファイルを読み込む。さらに、フロントエンドシステムは共通言語ファイルを生成する。フロントエンドシステムによって生成された共通言語ファイルは、共通ライブラリの中で使用されることになる。また、共通言語ファイルは、さらに共通言語ファイルを実行可能な形式へとコンパイルし、ファイルを実行するバックエンドシステム又は実行時環境に供給される。実行時には、共通言語ライブラリファイルに対応するライブラリプログラムファイルが、実行中に使用されるオブジェクトとメソッドをレイアウトするために、実行時環境によって使用される。さらに、バックエンド部が特定のマシンをターゲットにすることになる。
【0011】
他の見地によれば、本発明は、複数のフロントエンドコンパイラを有するネイティブソースコード言語で書かれているコンピュータプログラムをコンパイルするシステムに関するものである。各フロントエンドコンパイラは、他のネイティブソースコード言語と関連し、各フロントエンドコンパイラは、ネイティブソースコードに加えて、共通言語情報も使用する。また、各フロントエンドコンパイラは、特定のマシンをターゲットとした実行時環境により使用される共通言語ファイルを生成する。さらに、実行時環境は共通言語ファイルを実行時環境へロードするローダと、共通言語ファイルを検査し、実行時に用いられるクラスとオブジェクトのレイアウトを判断するレイアウトエンジンを有する。
【0012】
さらに他の見地によれば、このシステムの実行時環境は、少なくとも実行するためにメモリに実行可能な命令をロードするローダや、実行時にスタック呼び出しのトラックを維持するスタックウォーカや、メモリ内の命令とデータのレイアウトを判断するレイアウトエンジン、環境のための機密保護サービス、デバッグやプロファイルのような開発者サービス、そして実行時のメモリ管理用のガーベジコレクタのようなメモリ管理サービスのような複数のサービスのうちの一つを提供する。
【0013】
本発明はまた、共通言語ファイルを生成するフロントエンドコンパイラに関するものである。共通言語ファイルは、共通言語命令部における共通言語命令を記述する共通言語命令部とメタデータ部とを有している。フロントエンドコンパイラは、ネイティブソースコードファイルと共通言語ファイルをコンパイルするのに適用される。フロントエンドは共通言語ファイルの全てを受け取り、共通言語ファイルのメタデータ部だけか、メタデータ部と実行可能命令の両方か、いずれかを使用する。あるいは、フロントエンドは、メタデータ部だけを使用のために受け取ることができるように、共通言語ファイルを分割することを要求する。さらに、共通言語ファイルは、手続言語、ファンクション言語又はオブジェクト指向プログラミング言語のような、異なるネイティブソースコード言語に関連する異なるフロントエンドコンパイラにより使用される共通言語ライブラリの一部をなす。このように、共通言語ライブラリは、多数の異なるプログラム言語ファイルの中で使用されるファンクションを記述する。
【0014】
さらなる他の見地によれば、本発明は、共通ライブラリファイルをインポートするコンピュータプログラムをコンパイルする方法に関するものである。この方法は、ソース言語ファイルが共通ライブラリファイルに関するインポートステートメントを有し、共通ライブラリファイルをシンボルテーブルに読み込み、シンボルテーブルを用いて残されているソース言語ファイルをコンパイルするものである。
【0015】
本発明は、コンピュータプロセス、コンピューティングシステムとして、もしくはコンピュータプログラムプロダクトのような製造物として与えられるものであっても良い。コンピュータプログラムプロダクトは、コンピュータシステムによって読み取り可能なコンピュータ記憶媒体であり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードしたものであっても良い。また、コンピュータプログラムプロダクトは、コンピューティングシステムによって読み取り可能な搬送信号を伝達するものであり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードしたものであっても良い。
【0016】
本発明及びその改良形態について、以下に概略を示している添付図面を参照すること、以下に示す本発明の好適な実施形態についての詳細な記載によって、及び添付された請求の範囲によって、より完全に理解することができる。
【0017】
【発明の実施の形態】
一般に、本発明の実施の形態にかかるフロントエンドコンパイルシステム及びプロセスは、同一もしくは他のフロントエンドシステムで読み取られる共通言語ファイルを生成するために、一つより多くのソース言語を構文解析し、解読することを含む。本発明の実施の形態は、共通ライブラリ宣言ファイルを含み、もしくはインポートするソース言語ファイルを読み取り、構文解析することができ、共通ライブラリ宣言ファイルはソース言語ファイルと異なる言語で表記されている。2つの言語ファイル(ソース言語と共通言語)は一緒に処理され、少なくとも2つの部分、すなわちメタデータと、実行可能な命令を有する中間コードとを生成する。かかる2つの部分は、1つのファイル、例えばフロントエンドで生成された共通言語ファイルになるか、もしくは分割される。フロントエンドコンパイラシステムは、他の共通言語で表されている共通ライブラリファイルを読み取り、理解するだけでなく、特定のプログラミング言語で書かれたファイルを理解して、解析できる。
【0018】
本発明を組み込んだ形態であるシステム20のファンクションソフトウェア構成が、図1に示されている。システム20は、ネイティブソースファイル24からの情報のような情報を受け取り、コンパイルするフロントエンド部22を有する。ネイティブソースファイル24は、ソフトウェア開発に使用されている、どのタイプのソース言語ファイルでも良い。フロントエンド22はフロントエンドシステム22にフィードバックできる共通言語ファイル26を生成し、及び/又は実行環境32のような実行環境において実行される。図1に示すように、フロントエンド22の出力はメタデータ28と実行可能な命令30を含んでおり、実行可能な命令30は“命令コード”とも呼ばれる。実行可能な命令30は、直接的にプロセッサにより実行される命令(例えば、オブジェクトもしくはネイティブ機械コード)か、あるいは特定の実行環境で実行される“中間”タイプの命令(例えば、Javaバイトコード、p-code、もしくは他の中間言語)かのいずれかである。ある実施の形態では、実行可能な命令30は、複数の異なるタイプのソース言語のコンセプトを示すのに適応した“共通(一般的という意味)”中間言語を含んでいる。一つのタイプの中間言語だけが、使用されている特定のソース言語にもかかわらず使用できるようにするためである。図1では、フロントエンドシステム22の出力が、メタデータ28と実行可能な命令30の両方の組合せを含む共通言語ファイル26になるように示されている。あるいは、フロントエンドシステム22は2つの分離ファイル(図示せず)を生成し、一つはメタデータ28用に、他方は実行可能な命令30用にすることもできる。他の実施の形態においては、フロントエンドシステム22は、メタデータ28か実行可能な命令30のどちらかのみを生成してもよい。このアプリケーションの環境下では、メタデータは実行可能な命令30を記述するのに役立つ情報を含んでいる。例のみによって(そして限定しない)、このようなメタデータは、実行可能な命令において使用されているシンボルもしくは名前の記述と、実行可能な命令において使用されているデータタイプの情報、もしくはフロントエンドシステム22か実行環境32に役立つ他の様々な情報を含んでいる。メタデータ部28は、フロントエンドシステム22の中にあるメタデータモジュールによって生成され、実行可能な命令30はフロントエンドシステム22の中にあるコードモジュールによって生成される。フロントエンドシステム22は、図1に示すような共通言語ファイル26のように、メタデータ28、実行可能な命令30、又はこれらの組合せのいずれかを読み取り、受け取ることになる。
【0019】
フロントエンドシステム22へフィードバックされるのに加えて、共通言語ファイルは実行環境32へ搬送される。実行環境は、管理された実行時システムか、管理されていない実行環境か、直接的な実行環境か、のいずれかである。本質的に、実行環境は、共通言語ファイル26によって供給される情報を読み取ることができ、使用することができるバックエンドタイプシステムである。実際に、実行環境は、コンパイルされた情報をフロントエンドシステムから受け取り、コンパイルされた情報から実行可能なコードを生成するバックグラウンド部で記述される、より典型的なバックエンドシステムである。
【0020】
本発明の他の実施の形態にかかるシステム34のファンクションソフトウェアの構成を図2に示す。システム34は、ネイティブソース言語ファイル38を読み取り、メタデータ40と実行可能な命令42の両方を生成するフロントエンドシステム36を有する。図2に示すように、メタデータ40と実行可能な命令42は、一つの共通言語ファイル44の中にあっても良い。あるいは、2つの部分40と42が分割ファイルの一部であっても良い。フロントエンドシステム36は図1に示すフロントエンドシステム22と、フロントエンドシステム22と36の両方がメタデータと実行可能な命令を生成する点において似ている。しかし、フロントエンドシステム36は、ネイティブ言語ソースファイル38に加えて、共通言語ファイルを受け取るように構成されているかもしれないし、されていないかもしれない。
【0021】
フロントエンドシステム36により生成される共通言語ファイル44は、フロントエンドシステム46等の、他のフロントエンドシステムによって読み込まれる。フロントエンドシステム46はネイティブ言語ソースファイル48(ネイティブ言語ソースファイル38と同一か異なるかどちらか)だけでなく、共通言語ファイル44を読み込む。さらに、フロントエンドシステム46は、実行環境52へ搬送される中間ファイル50を生成する。中間ファイル50は、共通言語ファイル44及び26(図1)と同じフォーマットを有しても良い。もしくは実行環境52によって使用される実行可能な命令のみを含むものであっても良い。実行環境52は、管理された環境、管理されていない環境、もしくは直接的な実行環境のいずれであっても良い点において、図1に示す実行環境32と似ている。
【0022】
フロントエンドシステム46は、ファイル44及びネイティブ言語ソースファイル48のような両方の共通言語ファイルを受け取ることができる点において、図1に示すフロントエンドシステム22と似ている。しかし、フロントエンドシステム46は、メタデータと実行可能な命令の両方を有する共通言語ファイルを生成するかもしれないし、しないかもしれない点において、フロントエンドシステム22とは異なっている。
【0023】
図2は、本発明の観点から可能ならしめる特定の機能を示している。これまで、様々なソース言語がソフトウェア開発に使用するために創られてきた。一般に、ソース言語は、特定の問題もしくは問題における特定のクラスを解決するのに、特に適応しているコンセプトと機能を表現するために発展してきた。このように、特定の言語は、特定の問題を解決し、特定のコンセプトを表現するのに、特に適応するものである。言語の人気が上がったり下がったりしている間に、すべての問題を解決するのに適応した一つのソース言語を誰も作り出さなかった。一つのフロントエンドの出力は、他のフロントエンドにより直接アクセスされ、使用されることから、システム全体のうち異なる部分は、各々、システムの部分に最も適応したソース言語で書かれている。例えば、Lispで書かれている推理又は推論エンジンは、C++で書かれているプログラムに直接アクセスでき、使用することができる。
【0024】
本発明の他の観点を組み入れた他のシステム54にかかるファンクションソフトウェア構成を図3に示す。システム54は、少なくとも一つのフロントエンド部分を組み入れる。本発明の要件を示すものではなく、単に、多数のもしくは組み合わされたフロントエンドシステムに適用される本発明のコンセプトを示すものであるフロントエンド部56、58、60である。フロントエンド部56、58、60は、ファイル62、64、66のような、おのおの異なるタイプのソース言語ファイルを構文解析し、解読することができる。フロントエンド部56、58、60は、おのおの共通言語ファイル68、70、72を生成する。共通言語ファイル68、70、72は、すべて同一の言語、同一のフォーマットで表される。以下に詳細について説明する。
【0025】
ひとたびコンパイルされると、各ファイル68、70、72は、実行環境74に供給されるようなオプションプロセスを経ても良い。実行環境74は図1及び図2に示される実行環境32及び52に似ている。また、実行環境74は直接実行環境、管理された実行時環境ましくは管理されていない実行時環境のいずれであっても良い。さらに、実行環境はコンパイルされたファイル68、70、72を読み込み、実行することができる、他のどのようなタイプの環境であっても良い。
【0026】
フロントエンド56、58、60は、それぞれのソース言語ファイル62、64、66を読み込んで解析できることに加えて、共通言語に表されているファイルを読み込んで解析することができる。さらに、共通言語で表されているファンクションのライブラリ宣言ファイル76は、フロントエンド部56、58、60により使用するのに利用可能である。ある実施の形態では、共通ライブラリ宣言は、フロントエンド56、58、60のようなシステム54のフロントエンド部によりコンパイルされたファイルを含んでおり、ライブラリ76を通じて、他の開発者にも利用可能となる。本質的には、ライブラリ76で利用可能なファイルは、ファイル68、70、72に類似する共通言語フォーマットである。さらに、共通言語ファイル68、70、72は、図3に示されるように宣言の共通ライブラリ76の一部になっても良い。
【0027】
ソース言語ファイル62、64、66は、特定のフロントエンドに特化したソース言語とシステム54の共通言語の両方に関係する組合せ要素を組み立てても良い。より詳しくは、ソース言語62、64、66が、共通ライブラリ宣言ファイル76の使用を宣言する“include”又は“import”タイプのステートメントを有する。フロントエンドのコンパイル中において、インポートステートメントは、コンパイラに、利用可能なタイプ、クラス、メソッド、及びファイル76からの他の必要な情報を得るように通知し、それによってライブラリ76により提供される全てのファンクションの使用を可能にする。残されたソースファイルは、ライブラリで提供されるファンクションを呼び出して使用するために、ネイティブソース言語構文を使っても良い。本発明の実施の形態において、ライブラリ76は、Pascal、C、C++等のようなプログラミング言語のうち、選択されたグループから利用可能なファンクションの代表的なもの(cross section)を含んでいる間は、特定のプログラミング言語用のライブラリファンクションのスーパーセットになりうる。他の実施の形態においては、異なるライブラリ(図示せず)が特定のファンクションをターゲットにするように生成される。例えば、あるライブラリは、インターネット又はワールドワードウェブのアプリケーション開発者をターゲットにしている。他の例としては、ライブラリが、携帯電話のアプリケーション開発者をターゲットにして生成されていること等も考えられる。
【0028】
実行時には、ファイル68、70、及び/又は72は実行環境74にロードされる。一般に、オプションプロセスはファイル上で実行され、当該プロセスは、ファイル68、70、72のような受け取った共通言語ファイルを翻訳し、解釈し、さもなければ実行環境74で実行可能なオブジェクトコードに変換する。このように、実行環境74は共通言語ファイル68、70、及び/又は72をロードし、これら共通言語ファイルを実行するのに必要な処理を実行する。
【0029】
さらに、実行環境74が実行時環境により管理されている場合には、実行環境74はプログラム実行中に他の多くのサービスを提供する。一例としてシステムがローダを提供し、ローダが実行可能ファイルを受け取って、必要なリファレンスを解釈し、コードをロードする。実行環境はスタックウォーカを提供しても良い。すなわちスタックウォーカは、メソッドコールを管理し、与えられた時点におけるスタック上で連続したメソッドコールの識別子を提供するコードピースである。レイアウトエンジンもまた、提供されても良い。レイアウトエンジンは、メモリ内において、実行されるアプリケーションの一部として、様々なオブジェクト及び他の要素のレイアウトを設定する。さらに、実行環境は、承認されていない資源使用やデバッガやプロファイリングのような他の開発者向けサービスを避けるために、機密保護手段を提供しても良い。管理された実行環境によって提供される他のタイプのサービスは、実行前のコードベリファイ、特定のコードが特定のシステム資源をアクセスする(もしくは実行さえできる)許可を受けているか判断する機密保護機構、及びガーベジコレクションのようなメモリ管理サービスを含んでいる。
【0030】
さらに、実行環境は、共通ライブラリ宣言76の機能を実行するための実際の具体化情報を有する共通ライブラリプログラムファイル(図示せず)を使用する。実行環境74は、オブジェクト固有の組合せを実行するために、従来のローダ/リンカを使用しても良い。実行環境74が、ファイル68、70、72のようなロードされたファイルの様々な要素を理解できるように、実行環境74はロードされたファイルのフォーマットを理解する必要がある。実行時環境は、メタデータのような実行時環境に提供される情報を用いて、実行する前にオブジェクトを形成しても良い。
【0031】
ファイル68、70、72に類似する典型的な共通言語ファイル80のフォーマットを図4に示す。図4に示すフォーマットは、単なる例示であって、限定されるものではなく、共通言語ファイルの他の多くのフォーマットが使用可能である。図4に示すファイル80は、“PE”ファイルであり、共通COFFフォーマットである。ここで、COFFとは、共通オブジェクトファイルフォーマット(Common Object File Format)である。COFFファイルは、ヘッダ82や、セグメント84、86、88、90、92に示す複数セグメントのような、比較的標準化された要素を有する。実際は、ファイル80は、COFFがフォーマットを拡張する方法を定義するものであることから、(ブレーキ94に示すように)より多くのセグメントを有しても良い。図4に示されているセグメントは、準備において、フロントエンドにより生成されたメタデータと実行可能な命令が、上述したように同一ファイルの中に、もしくは異なるファイルの中にあるようにする必要があることを除いては、本発明に特有の実施形態を必ずしも要求されない。図4に示す例では、ファイル80が、プログラムデータ情報として、セクション86の読み書きデータとセクション88の読み取り専用データのように、セクション86と88を使用している。さらに、ファイル80は、現存するネイティブコードを有するセクション90のようなセクションを有しても良い。セクション84と92は共通言語情報に関するものである。
【0032】
セクション84は、セクション92に存在する共通言語命令を記述するメタデータ情報を有する。セクション92は、フロントエンド56、58、60のうちの1つのようなフロントエンドで実行されたコンパイルプロセスにおける現在の中間言語コードでも良い。この中間言語コードもしくは共通言語命令は、ファイルを実行可能な命令にコンパイルし、及び/又はファイルを実行する実行環境で使用される。メタデータ情報は、セクション92の命令におけるタイプ、クラス、メソッド、プロパティ、及びイベント提起の概略を記述することによって、セクション92における命令を記述する。ある実施の形態においては、メタデータセクション84は単に構成のリストをタイプしたものにすぎない。
【0033】
メタデータセクション84は実行時環境によってヘッダ82を通じて、特にヘッダ82に追加された部分98を通じて見つけられる。追加部分98は、ファイル80の中のメタデータセクション84の位置に関する情報を提供する。メタデータセクション84は、実行時環境74に実行時にインスタンス化されたオブジェクトのタイプ、形態、サイズに関する重要な情報を提供する。実行時環境74はこの情報を用い、レイアウトエンジンを用いて、メソッドテーブルを生成し、実行時のオブジェクトに必要なスペースを割り当てる。
【0034】
さらに、メタデータセクション84は、ファイル80のような共通言語ファイルを呼び出すソースファイルのコンパイルプロセスの間、フロントエンド22、46、56、58、60(図1から図3)により使用される情報の一部である。つまり、フロントエンド22、46、56、58、60(図1から図3)は、主に利用可能なファンクション記述に関係していることから、一般にファイル80の残存部分を読み込まず、ファンクションの実行詳細には関係なくシンボルテーブルはロードされ得る。これら実行詳細は共通ライブラリプログラムファイル(図示せず)に保存されており、必要なときに実行環境74にロードされる。本発明のある実施の形態においては、ファイル80が共通ライブラリ宣言76(図3)に追加されると、セクション86、88、90、92は、必要がなくなることから、ファイルから除去される。他の実施の形態においては、フロントエンドシステムは他のセクションの情報を使用しても良いし、それゆえに除去されることもない。
【0035】
図4は、適しているファイルフォーマットの一つのタイプのみを示しており、他のファイルフォーマットもまた使用できる。例えば、フロントエンドがネイティブタイプの実行可能コードとメタデータのみを生成するならば、ファイルのセグメントの数も内容も違ったものになるだろう。他の例によれば、メタデータが自分自身のセグメント(84)に存在するように設計されている。しかし、メタデータはまた、一つあるいは多くの他のセグメントと結合されている。さらに、メタデータは自分自身のセグメントに存在しても良いし、他のセグメント内に散在していても良い。
【0036】
図5及び以下の記述は、本発明を具現化するのに適しているコンピュータ環境についての一般的な記述を提供することを意図するものである。要求されなかったとしても、本発明は、パーソナルコンピュータによって実行されるプログラムモジュールのように、コンピュータで実行可能な命令の一般的なコンテキストの中に記述されるだろう。一般に、プログラムモジュールは、特定のタスクを実行し、又は特定の概要データタイプを具現化するルーチンと、プログラムと、オブジェクトと、構成要素と、データ構造等を含んでいる。さらに、当業者なら、本発明が、携帯型デバイスやマルチプロセッサシステム、マイクロプロセッサを基調としたあるいはプログラム可能な消費家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ等を含む他のコンピュータシステム構成で実施できることを認めるだろう。本発明はまた、通信ネットワークを通じてリンクされているリモートプロセスデバイスによってタスクが実行される分散コンピューティング環境においても実施することができる。分散コンピューティング環境においては、プログラムモジュールは、ローカル及びリモートのメモリ保存デバイスの両方に配置することができる。
【0037】
図5を参照すれば、発明を実施するための典型的なシステム100は、プロセスユニット104と、システムメモリ106と、システムメモリを含む様々なシステム構成要素をプロセスユニット104とつなぐシステムバス108を含む従来のパーソナルコンピュータ102の形態で、一般的な目的のコンピューティングデバイスを含んでいる。システムバス108は様々な形式のバス構成であり、多様なバス体系を使用しているメモリバス、メモリコントローラ、ペリフェラルバス、ローカルバスを含んでいる。システムメモリ106は再生専用メモリ(ROM)110とランダムアクセスメモリ(RAM)112を含んでいる。基本入出力システム(BIOS)114は、起動時のように、パーソナルコンピュータ102における要素間の情報の伝達を助ける基本ルーチンを含んでおり、ROM110に保存されている。
【0038】
パーソナルコンピュータ102は、さらに、ハードディスクの読み出し及び書き込みを行うハードディスクドライブ116、着脱可能な磁気ディスク120の読出し及び書込みを行う磁気ディスクドライブ118、及びCD-ROM又は他の光学媒体のような着脱可能な光ディスク124の読出し及び書込みを行う光ディスクドライブ122を含んでいる。ハードディスクドライブ116、磁気ディスクドライブ118、及び光学ディスクドライブ122は、それぞれ、ハードディスクドライブインタフェース126、磁気ディスクドライブインタフェース128、及び光ディスクドライブインタフェース130によって、システムバス108に接続されている。ドライブ及びその関連コンピュータ読み取り可能媒体が、パーソナルコンピュータ102のコンピュータ読み取り可能命令、データ構造、プログラムモジュール、及び他のデータの不揮発性記憶部を提供している。上述した典型的な環境では、ハードディスク、着脱可能な磁気ディスク120、及び着脱可能な光ディスク124を用いているが、当業者には言うまでもなく、コンピュータによりアクセス可能なデータを保存できる他のタイプのコンピュータ読み取り可能媒体もまた、典型的な実行環境に使用することができる。他のタイプのコンピュータ読み取り可能媒体としては、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、CD、DVD、ランダムアクセスメモリ(RAM)、再生専用メモリ(ROM)等がある。
【0039】
多数のプログラムモジュールが、ハードディスク、磁気ディスク120、光ディスク124、ROM110、又はRAM112に格納され、これらは、オペレーティングシステム132、1つ以上のアプリケーションプログラム134、他のプログラムモジュール136、及びプログラムデータ138を含んでいる。ユーザは、コマンド及び情報を、パーソナルコンピュータ102に、キーボード140、及び(マウスのような)ポインティングデバイス142のような入力デバイスを通じて入力することができる。また、一連の画像を取り込むことができるカメラ144も、システムバス108に接続されている適当なカメラインタフェース146を通じて、パーソナルコンピュータ102への入力デバイスとして含まれる。他の入力デバイス(図示せず)としては、例えば、マイクロフォン、ジョイステック、ゲームパッド、サテライトディッシュ、及びスキャナ等が含まれる。これら及び他の入力デバイスは、システムバス108に接続されているシリアルポートインタフェース148を通じてプロセッシングユニット104に接続されていることが多い。しかし、これらの入力デバイスはまた、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB)等の他のインタフェースによって接続されていても良い。モニタ150、又は他のタイプのディスプレイデバイスもまた、ビデオアダプタ152のようなインタフェースを通じて、システムバス108へとつながれている。モニタに加えて、パーソナルコンピュータは、典型的には、スピーカやプリンタのような他の周辺出力デバイス(図示せず)を含んでいる。
【0040】
パーソナルコンピュータ102は、リモートコンピュータ154のような1つ以上のリモートコンピュータへの論理的な接続を用いてネットワーク化された環境において動作することができる。図5には、メモリ記憶デバイス156だけが示されているが、リモートコンピュータ154は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア(peer)デバイス、又は他の共通ネットワークノードであり、典型的にパーソナルコンピュータ102との関連で上述した要素の多くまたはすべてを含むものである。図3に描かれている論理的な接続は、ローカルエリアネットワーク(LAN)158、及びワイドエリアネットワーク(WAN)160を含んでいる。このようなネットワーク環境は、オフィス、企業規模コンピュータネットワーク、イントラネット、及びインターネットにおいて珍しいものではない。
【0041】
LANネットワーク環境で用いるときには、パーソナルコンピュータ102は、ネットワークインタフェース、又はアダプタ162を通じてローカルエリアネットワーク158に接続される。WANネットワーク環境で用いるときには、パーソナルコンピュータ102は、典型的に、インターネットのようなワイドエリアネットワーク160による通信を確立するためのモデム164、もしくは他の手段を含んでいる。モデム164は、内蔵でも外付けでもよく、シリアルポートインタフェース148を通じて、システムバス108と接続されている。ネットワーク化された環境において、パーソナルコンピュータ102に関連して描かれたプログラムモジュール、又はその一部は、リモートメモリ記憶デバイスに保存されてもよい。図示されたネットワーク接続は一例であって、コンピュータ間の通信リンク確立のために他の手段を用いることも認められる。
【0042】
ここまで論じてきたオペレーション環境の一例によれば、記述セクションの残存部分は、発明の実施の形態にかかるオペレーションモジュールの記述専用となる。本発明の様々な実施の形態における論理オペレーションは、(1)コンピュータシステム上で実行する一連のコンピュータ具現化ステップ又はプログラムモジュールとして、及び/又は(2)コンピューティングシステムの内部で接続されたハードウェアもしくは論理モジュールとして、具現化される。具現化は、発明を具現化するコンピューティングシステムの実行要求に依存する選択行為である。よって、上述された本発明の実施の形態を実現する論理オペレーションは、オペレーション、ステップもしくはモジュールとして選択的に参照される。
【0043】
フロントエンドシステム22(図1)、フロントエンドシステム46(図2)、又はフロントエンド56、58、60(図3)のように共通言語ファイルを読み込むためのフロントエンドシステムにより実行される、オペレーションの手続流れ200の例を図6に示す。流れ図は、読込オペレーション202から始まり、各々ファイル24、48、62、64、66のようなネイティブソースファイルの最初のステートメントを読み込むことになる。読込オペレーション202に続いて、解析モジュール204が、適当な言葉が使用されているか、すなわち語彙の解析や、適当な文法であるかについて、ステートメントを解析する。
【0044】
語彙及び文法解析に続いて、エラーが無い場合には、判断オペレーション206がステートメントがインポートであるか否か、又は共通言語ファイルもしくはライブラリをインポートすることを試みるステートメントを含んでいるか否かを判断する。特にインポートコマンドが、このファイルのタイプを指示するのに使用されているかもしれないし、又はインポートファンクションを試みた後、実際のライブラリが共通言語ライブラリであるか否かを判断するために解析される。メソッドは、ファイルが共通言語ライブラリであることを検出する能力を与えるためにフロントエンド機能に提供される。
【0045】
もし、ライブラリが共通言語ライブラリであるならば、Yes枝へ進み、探索オペレーション208へ進む。探索オペレーション208は、本質的にファイルを捜しだし、現行のコンパイルのためのシンボルテーブルにファイルをロードするプロセスを開始する。一度探し出されたら、読込オペレーション210が共通ライブラリファイルの最初の一行を読み込む。これは、ファイルのメタデータセクションを見つけ、メタデータセクションの最初の一行を見つけるために共通言語ファイルのヘッダの解析を要求できる。重要なことは、読み込まれた共通ライブラリの中の最初の情報が、例えばセクション84(図4)のようなメタデータ部分であることである。上述したメタデータは、フロントエンドにシンボルテーブルをロードする能力を与えるタイプ、メソッド、アーギュメント等を記載する情報である。メソッドはフロントエンドが共通言語ファイルを読むことができるように、フロントエンド機能に提供されても良い。
【0046】
次に、組立オペレーション212は、読み込まれたメタデータの一行に基づいて、シンボルテーブルを組み立て、もしくはロードする。組立オペレーション212に続いて、テストオペレーション214が、現在の行が最後の行かどうかを決めることによって、メタデータ情報により多くの行があるか否かを判断する。メタデータ情報により多くの行があるならば、現在の行は最後の行ではなく、Yes枝へ進み、読込オペレーション210へ戻って次の行を読み込む。流れは、シンボルテーブルを組み立てるために、メタデータ情報のすべての行を読むように効果的にループする。最後の行がシンボルテーブルに保存されたら、テストオペレーション214によりNo枝へ進み、読込オペレーション202へ戻る。読込オペレーション202はオリジナルのソースコードファイルの次の行を読み込むことになる。
【0047】
もし、判断オペレーション206が、共通言語ライブラリとしてのステートメントを含まないと判断したならば、No枝へ進み、モジュール216へ進む。モジュール216は、ステートメントを解析し、情報をシンボルテーブルへロードするか、あるいは出力モジュールに情報を提供するかを判断する。つまり、ファイルの全てのステートメントにとって、シンボルテーブルはロードされるか、出力タイプステートメントが生成されるかのいずれかである。モジュール216は流れのこの面を提供する。
【0048】
現行のステートメントによるモジュール216の完成により、判断行為218は、現行ステートメントがソースコードファイルの中で最後のステートメントであるか否かを判断する。このオペレーションは、ファイルマーカの最後をチェックするだけでもよい。もし、ステートメントがファイルの最後のステートメントでなかったら、流れは枝Noへ進み、読取オペレーション202へ戻り、次のステートメントが読み込まれる。もし、判断行為218による判断として、ステートメントがファイルの最後のステートメントであれば、流れは枝Yesへ進み、生成オペレーション220へ進む。
【0049】
生成オペレーション220は、モジュール216により提供される出力ステートメントを処理する。そして、中間言語ファイルを生成する。このステップは、コンパイラに全く共通のオペレーションであり、すなわちコンパイラは、ある種のデータ構造又は中間言語ファイルを生成する。しかし、生成オペレーション220は、ファイル68、70、72(図3)のような出力ファイルの一部として、メタデータ情報をも提供する。そして、このメタデータは、フロントエンド22、46、56、58、60(図1から図3)で使用されているのと同一タイプのメタデータ情報である。
【0050】
一度生成オペレーション220が完了すると、流れは終了222へ進む。結果としてのファイルは、メタデータ情報と共通言語命令の両方を含む共通言語ファイルである。さらに、本発明の実施の形態においては、結果としてのファイルフォーマットが図4に示されている。共通言語ファイルは、他のフロントエンドシステム22、46、56、58、60(図1から図3)か、実行環境74(図3)のような実行環境か、どちらかによって使用される。
【0051】
図7は、他の実施の形態にかかるフロントエンド部のオペレーション流れ図を示す。本質的には、プロセスは、図6と連結して上述されているプロセスと同様であるが、流れ300がオペレーション304において、新しい読込ステートメントが、オペレーション306で発生する語彙又は文法解析を行う前に、インポートステートメントで有るか否かを判断する点で異なる。つまり、オペレーション302は、上述されているオペレーション202と、新しいステートメントが解析のために読み込まれる点において類似している。そして、判断ステップ304が、ステートメントが共通ライブラリのインポートステートメントと関連しているか否かを判断する。もし関連しているならば、オペレーション308、310、312、314が実行され、ライブラリからシンボルテーブルへと情報がロードされる。もし関連していないならば、オペレーション306、316、318が、ソースファイルの残存部分をシンボルテーブルか出力ステージのいずれかへロードする。さらに、オペレーション320は、上述したオペレーション220に類似しており、共通言語ファイルを生成する。共通言語ファイルは、他のフロントエンドシステム22、46、56、58、60(図1から図3)か、実行環境74(図3)のような実行環境か、いずれかによって使用される。
【0052】
さらに他の実施の形態によれば(図示せず)、ライブラリファイル名はコマンドラインオプションとして追加できる。この場合、コンパイラは、ソース言語ファイルを構文解析する前に、メタデータ情報をシンボルテーブルにロードする。
【0053】
Pascal、COBOL、C++等のような現存するソース言語のための現存するフロントエンドコンパイラを変更するためには、フロントエンドシステム22(図1)と同じ機能を有するように、2つのステップを実行する必要がある。最初に、コンパイラのソース言語の構文が、ソース言語が他のファイルを“import”するようになっているか否かを判断するために検査されるべきである。もしそうならば、まだそのように適合されていなければ、インポート能力は、中間ファイルもしくは共通言語タイプファイルをインポートできるように変更されるべきである。もし、ソース言語が“import”ファンクションを有していない場合には、ソース構文は、インポートファンクションを実施できるように拡張されるべきである。そして、現存するフロントエンドコンパイラシステムは、少なくとも中間ファイルのメタデータ部を読み込んで、適当にメタデータをハンドリングできるように変更されるべきである。つまり、フロントエンドは、共通言語ファイルを構文解析でき、メタデータのタイプとメソッド情報を、適当な形式の特定のシンボルテーブルに変換することができる。シンボルテーブルに追加された各新しいクラスにとって、共通言語ファイルは、新しいクラスによってサポートされるメソッドとして読み込まれなければならない。もし、出力中の共通言語ファイルの実行可能な命令を直接使用したいならば、フロントエンドはまた、実行可能な命令を読み込んでハンドリングできるよう適当に変更される必要もあるかもしれない。
【0054】
現存するコンパイラを、中間共通言語ファイルを使用することができるように変更するのに加えて、フロントエンドシステムは、共通言語ファイルを生成するように変更することができる。大部分の現存するコンパイラは、機械語又は他のファイルを生成するバックエンド部分を有する。一般に、コンパイラを共通言語ファイルを生成するように変更するためには、バックエンドが、機械コードや生成されてきたものの代わりに、共通言語を生成するように変更される。さらに、バックエンドが、共通言語命令に沿ってメタデータを追加するように変更される。
【0055】
上述したシステム及び方法によって、多くの異なるプログラミング言語を使用する開発者によって使用される共通言語ライブラリを生成することができるようになる。また、開発者は、一つの言語に特有の問題あるいは他の言語についての他の問題を解決し、そして、他の言語でもってアプリケーション全体を書くことができるようになる。本質的に、本システムは、共通言語ファイルを生成する一つのソース言語コンパイラから、共通言語ファイルを使用する他のソース言語コンパイラまでの、ライブラリについての情報を伝達するために、共通言語ファイルを使用する。一つのライブラリは、ライブラリが各々の新しいプログラミング言語で再書き込みする必要がないように、多くの言語にわたって共有される。さらに、共通言語は、実行時環境が前もって、実行時に使用される異なるオブジェクトのレイアウトを決めておけるように、命令を記述するメタデータを有する。あらに、このシステムは、実行時に先だってメソッドとフィールドのレイアウトを特定する言語を、随意にハンドリングするよう構成することができる。
【0056】
本発明は、構成の特徴及び/又は方法論的なステップで特定された言語において記述されているが、添付される請求の範囲で定義される発明は、特に記載された特徴又はステップに限定される必要はない。例として、他のソース言語も、最初のソース言語及び共通言語と共同で、フロントエンド部に含まれている。それゆえ、特定された特徴及びステップは請求の範囲に記載された発明を具現化するのに適した形態として開示されている。
【0057】
【発明の効果】
以上のように本発明にかかるシステム及び方法によれば、多くの異なるプログラミング言語を使用する開発者によって使用される共通言語ライブラリを生成することができるようになる。また、開発者は、一つの言語に特有の問題あるいは他の言語についての他の問題を解決し、そして、他の言語でもってアプリケーション全体を書くことができるようになる。
【図面の簡単な説明】
【図1】 本発明のフロントエンド部を組み入れたソフトウェア環境の機能構成を示す。
【図2】 本発明のフロントエンド部の他の実施の形態にかかるソフトウェア環境の機能構成を示す。
【図3】 本発明の他の実施の形態にかかるソフトウェア環境の機能構成を示す。共通ライブラリを生成するために多数の共通言語ファイルを用いる場合を示す。
【図4】 図1、図2及び図3に示すフロントエンド部を用いて生成される結果としての中間言語ファイルのフォーマットを示す。
【図5】 本発明の実施の形態の実行中に使用されるコンピュータタイプにおけるコンピュータの代表例のブロックダイアグラムである。
【図6】 図4に示す中間言語ファイルを生成するオペレーションの特徴を示す流れ図である。
【図7】 図4に示す中間言語ファイルを生成する他の実施の形態にかかるオペレーションの特徴を示す流れ図である。
【符号の説明】
22、36、46 フロントエンドシステム
24、38、48 ネイティブ言語ソースファイル
26、44、68、70、72 共通言語ファイル
28、40、84 メタデータ
30、42、92 実行可能命令
32、52、74 実行環境
50 中間ファイル
56 手続言語用フロントエンド
58 ファンクション言語用フロントエンド
60 オブジェクト指向言語用フロントエンド
62 手続言語ソースファイル
64 ファンクション言語ソースファイル
66 オブジェクト指向言語ソースファイル
76 共通ライブラリ宣言
82 ヘッダ
86 データ読込/書込
88 データ読込専用
90 ネイティブコード
102 パーソナルコンピュータ
104 プロセッシングユニット
106 システムメモリ
108 システムバス
110 ROM
112 RAM
114 BIOS
116 ハードディスクドライブ
118 磁気ディスクドライブ
120 着脱可能記憶媒体
122 光ディスクドライブ
124 光ディスク
126 ハードディスクドライブインタフェース
128 磁気ディスクドライブインタフェース
130 光ディスクドライブインタフェース
132 オペレーティングシステム
134 アプリケーションプログラム
136 プログラムモジュール
138 プログラムデータ
140 キーボード
142 マウス
144 カメラ
146 カメラインタフェース
148 シリアルポートインタフェース
150 モニタ
152 ビデオアダプタ
154 リモートコンピュータ
162 ネットワークインタフェース
164 モデム

Claims (7)

  1. コンピュータシステムの処理ユニットを、前記処理ユニットにおいて動作するバックエンドとしての実行環境で使用され、メタデータ情報及び実行可能な命令を含む共通言語ファイルを生成するフロントエンドコンパイラとして機能させるためのプログラムであって、
    前記メタデータ情報を生成するためにソースファイルからのステートメントをコンパイルするメタデータモジュール、及び
    前記実行可能な命令を生成するためにソースファイルからのステートメントをコンパイルするコードモジュール
    として前記コンピュータシステムの前記処理ユニットを機能させるためのプログラムであり、
    前記メタデータ情報と前記実行可能な命令とが、第1の言語のソースファイルをコンパイルした結果であり、
    前記フロントエンドコンパイラは、第2の言語のソースファイルをコンパイルした結果として別のフロントエンドコンパイラによって生成される前記共通言語ファイルのメタデータ情報を使用し、
    前記第1の言語のソースファイルからコンパイルされた前記メタデータ情報と前記実行可能な命令とを、前記第2の言語のソースファイルから前記別のフロントエンドコンパイラによって生成された前記共通言語ファイルのメタデータ情報と組み合わせて、前記バックエンドとしての実行環境へ前記フロントエンドコンパイラから出力される共通言語ファイルを形成し、
    前記共通言語ファイルが前記ソースファイルのソース言語から独立してい
    ログラム。
  2. ネイティブソース言語で書かれたコンピュータプログラムをコンパイルするコンピュータシステムの処理ユニットにおいて動作する方法であって、前記コンピュータプログラムが、前記処理ユニットによって共通言語ファイルがインポートされるインポートステートメントを有する前記方法において、
    前記コンピュータシステムの前記処理ユニットにおいて前記コンピュータプログラムを構文解析する工程と、
    構文解析中に各々のステートメントを検査し、前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるか否かを前記処理ユニットによって決定する工程と、
    前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるならば、前記共通言語ファイルを前記処理ユニットに記憶されたシンボルテーブルに読み込む工程と、
    前記ステートメントがネイティブ言語シンボルテーブルエントリに関連するならば、前記シンボルテーブルにその情報を前記処理ユニットによって追加する工程と、
    前記ステートメントが出力生成と関連するならば、前記ステートメントを前記処理ユニットにおいて動作する出力モジュールに前記処理ユニットによって供給する工程と、
    前記処理ユニットにおいて動作する前記出力モジュールによって、前記のインポートされた共通言語ファイルを使用して、前記ステートメントとメタデータ情報とからなる別の共通言語ファイルを生成する工程と、
    前記別の共通言語ファイルを前記コンピュータシステムの前記処理ユニットにおいて動作する実行環境へ前記処理ユニットによって出力して、前記別の共通言語ファイルから実行可能コードを生成する工程と、
    を含み、前記別の共通言語ファイルが前記コンピュータプログラムネイティブソース言語から独立している方法。
  3. 前記共通言語ファイルが、異なるソース言語によって前記コンピュータシステムへ前記処理ユニットによりインポートされる、請求項2に記載の方法。
  4. 前記共通言語ファイルが、手続言語ソースファイルとオブジェクト指向言語ソースファイルとによって前記コンピュータシステムへ前記処理ユニットによりインポートされる、請求項2に記載の方法。
  5. 前記別の共通言語ファイルが前記のインポートされた共通言語ファイルとは異なる、請求項2に記載の方法。
  6. 前記処理ユニットにより前記共通言語ファイルをシンボルテーブルへ読み込む工程が、前記処理ユニットにより前記メタデータ情報を前記シンボルテーブルに読み込む工程をさらに含む、請求項2に記載の方法。
  7. ネイティブソース言語で書かれ、共通言語ファイルをインポートするインポートステートメントを有するコンピュータプログラムをコンパイルするためにコンピュータシステムを動作させるプログラムを記録したコンピュータ読み取り可能な記憶媒体であって、
    前記プログラムが前記コンピュータシステムに、
    前記コンピュータプログラムを構文解析し、
    構文解析中に各々のステートメントを検査し、前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるか否かを決定し、
    前記ステートメントが前記共通言語ファイルに関連するインポートステートメントであるならば、前記共通言語ファイルをシンボルテーブルに読み込み、
    前記ステートメントがネイティブ言語シンボルテーブルエントリに関連するならば、前記シンボルテーブルにその情報を追加し、
    前記ステートメントが出力生成と関連するならば、前記ステートメントを出力モジュールに供給し、
    前記出力モジュールによって、前記のインポートされた共通言語ファイルを使用して、前記ステートメントとメタデータ情報とからなり且つ前記コンピュータプログラムのネイティブソース言語から独立している別の共通言語ファイルを生成し、
    前記別の共通言語ファイルを前記コンピュータシステム上の実行可能な環境へ出力し、前記別の共通言語ファイルから実行可能コードを生成する、
    工程を実行させる、コンピュータ読み取り可能な記憶媒体。
JP2001164625A 2000-06-21 2001-05-31 複数言語のコンパイル方法及びシステム Expired - Fee Related JP4183399B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/598105 2000-06-21
US09/598,105 US6836883B1 (en) 2000-06-21 2000-06-21 Method and system for compiling multiple languages

Publications (3)

Publication Number Publication Date
JP2002024032A JP2002024032A (ja) 2002-01-25
JP2002024032A5 JP2002024032A5 (ja) 2007-02-01
JP4183399B2 true JP4183399B2 (ja) 2008-11-19

Family

ID=24394255

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001164625A Expired - Fee Related JP4183399B2 (ja) 2000-06-21 2001-05-31 複数言語のコンパイル方法及びシステム

Country Status (3)

Country Link
US (2) US6836883B1 (ja)
EP (1) EP1178404B1 (ja)
JP (1) JP4183399B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56136454U (ja) * 1980-03-17 1981-10-16

Families Citing this family (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7013340B1 (en) * 2000-05-18 2006-03-14 Microsoft Corporation Postback input handling by server-side control objects
US6836883B1 (en) * 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
EP1174791B1 (en) 2000-07-10 2017-09-27 Microsoft Technology Licensing, LLC Unified data type system and method
US7293261B1 (en) * 2001-04-25 2007-11-06 Microsoft Corporation Language-neutral representation of software code elements
WO2002101511A2 (en) * 2001-06-13 2002-12-19 Rivar Technologies, Inc. System and method for integrated web-based software code environment
US7546606B2 (en) 2001-10-18 2009-06-09 Bea Systems, Inc. System and method using a connector architecture for application integration
US7552222B2 (en) 2001-10-18 2009-06-23 Bea Systems, Inc. Single system user identity
US7516447B2 (en) 2002-02-22 2009-04-07 Bea Systems, Inc. Methods and apparatus for building, customizing and using software abstractions of external entities
US8135772B2 (en) 2002-05-01 2012-03-13 Oracle International Corporation Single servlets for B2B message routing
US7155438B2 (en) 2002-05-01 2006-12-26 Bea Systems, Inc. High availability for event forwarding
US7519976B2 (en) 2002-05-01 2009-04-14 Bea Systems, Inc. Collaborative business plug-in framework
US7257645B2 (en) 2002-05-01 2007-08-14 Bea Systems, Inc. System and method for storing large messages
US7350184B2 (en) * 2002-05-02 2008-03-25 Bea Systems, Inc. System and method for enterprise application interactions
US7484224B2 (en) 2002-05-02 2009-01-27 Bae Systems, Inc. Adapter deployment without recycle
US7493628B2 (en) 2002-05-02 2009-02-17 Bea Systems, Inc. Shared common connection factory
US7676538B2 (en) 2002-05-02 2010-03-09 Bea Systems, Inc. Systems and methods for application view transactions
US7222148B2 (en) 2002-05-02 2007-05-22 Bea Systems, Inc. System and method for providing highly available processing of asynchronous service requests
US20030212982A1 (en) * 2002-05-09 2003-11-13 International Business Machines Corporation Message compiler for internationalization of application programs
US6988099B2 (en) * 2002-06-27 2006-01-17 Bea Systems, Inc. Systems and methods for maintaining transactional persistence
US7171657B2 (en) * 2002-09-09 2007-01-30 Sun Microsystems, Inc. Method and apparatus for importing static members of a class
US7877681B2 (en) 2002-12-05 2011-01-25 Borland Software Corporation Automatic context management for web applications with client side code execution
EP1588230A4 (en) * 2003-01-10 2008-05-07 Nexaweb Technologies Inc NETWORK ORIENTED COMPUTING SYSTEM AND METHOD
US7650591B2 (en) 2003-01-24 2010-01-19 Bea Systems, Inc. Marshaling and un-marshaling data types in XML and Java
US7584474B2 (en) 2003-02-25 2009-09-01 Bea Systems, Inc. Systems and methods for transaction chaining
US7293038B2 (en) 2003-02-25 2007-11-06 Bea Systems, Inc. Systems and methods for client-side filtering of subscribed messages
US7774697B2 (en) 2003-02-25 2010-08-10 Bea Systems, Inc. System and method for structuring distributed applications
US20040167915A1 (en) * 2003-02-25 2004-08-26 Bea Systems, Inc. Systems and methods for declaratively transforming data objects between disparate representations
US7752599B2 (en) * 2003-02-25 2010-07-06 Bea Systems Inc. Systems and methods extending an existing programming language with constructs
US7539985B2 (en) 2003-02-26 2009-05-26 Bea Systems, Inc. Systems and methods for dynamic component versioning
US8032860B2 (en) * 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US7650276B2 (en) 2003-02-26 2010-01-19 Bea Systems, Inc. System and method for dynamic data binding in distributed applications
US7076772B2 (en) * 2003-02-26 2006-07-11 Bea Systems, Inc. System and method for multi-language extensible compiler framework
US7707564B2 (en) 2003-02-26 2010-04-27 Bea Systems, Inc. Systems and methods for creating network-based software services using source code annotations
US7636722B2 (en) 2003-02-28 2009-12-22 Bea Systems, Inc. System and method for describing application extensions in XML
US7444620B2 (en) 2003-02-28 2008-10-28 Bea Systems, Inc. Systems and methods for a common runtime container framework
US7650592B2 (en) 2003-03-01 2010-01-19 Bea Systems, Inc. Systems and methods for multi-view debugging environment
US7143398B2 (en) * 2003-03-13 2006-11-28 Che-An Chang Application infa operating system
US7634763B2 (en) * 2003-07-15 2009-12-15 Microsoft Corporation Extensible multi-language compilation
US7890604B2 (en) 2004-05-07 2011-02-15 Microsoft Corproation Client-side callbacks to server events
US9026578B2 (en) 2004-05-14 2015-05-05 Microsoft Corporation Systems and methods for persisting data between web pages
US20060041940A1 (en) * 2004-08-21 2006-02-23 Ko-Cheng Fang Computer data protecting method
US7376935B2 (en) * 2004-10-25 2008-05-20 Microsoft Corporation Design-time system and method to enable programming assistance across languages and compilation boundaries
US7707547B2 (en) * 2005-03-11 2010-04-27 Aptana, Inc. System and method for creating target byte code
US7712082B2 (en) * 2005-03-24 2010-05-04 Microsoft Corporation Profiler stackwalker
US8141036B2 (en) * 2005-07-07 2012-03-20 Oracle International Corporation Customized annotation editing
DE102005033597A1 (de) * 2005-07-19 2007-02-01 Giesecke & Devrient Gmbh Erzeugung und Ausführung von Programmen
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US20070150864A1 (en) * 2005-12-26 2007-06-28 Goh Chee Ying Josiah Visual-Based Object Oriented Programming Language & System
US20070174824A1 (en) * 2006-01-23 2007-07-26 Microsoft Corporation Techniques for generating and executing browser-hosted applications
US7827523B2 (en) * 2006-02-22 2010-11-02 Yahoo! Inc. Query serving infrastructure providing flexible and expandable support and compiling instructions
US7971182B1 (en) * 2006-05-09 2011-06-28 Vmware, Inc. Application environment specifications for provisioning application specific runtime environments using undefined symbols
US8079027B2 (en) * 2006-09-08 2011-12-13 Via Technologies, Inc. Programming language translation systems and methods
US7921416B2 (en) 2006-10-20 2011-04-05 Yahoo! Inc. Formal language and translator for parallel processing of data
US10353797B2 (en) * 2006-12-29 2019-07-16 International Business Machines Corporation Using memory tracking data to inform a memory map tool
US8577937B1 (en) 2007-05-09 2013-11-05 Vmware, Inc. Repository including exclusion list
US8347263B1 (en) 2007-05-09 2013-01-01 Vmware, Inc. Repository including installation metadata for executable applications
US11262996B2 (en) 2007-05-09 2022-03-01 Vmware, Inc. Repository including exclusion list
US8250524B2 (en) * 2007-12-21 2012-08-21 Microsoft Corporation Contract programming for code error reduction
US9141377B2 (en) * 2008-02-19 2015-09-22 International Business Machines Corporation Visualization of code units across disparate systems
US8863115B2 (en) * 2008-03-20 2014-10-14 Sap Ag Execution of program code having language-level integration of program models
US8533672B2 (en) * 2008-03-20 2013-09-10 Sap Ag Extending the functionality of a host programming language
US8533673B2 (en) * 2008-03-20 2013-09-10 Sap Ag Language-level integration of programming models
US20090262722A1 (en) * 2008-04-21 2009-10-22 Honeywell International Inc. Method to Calculate Transitive Closure of Multi-Path Directed Network Based on Declarative MetaData
US9639375B2 (en) * 2008-08-28 2017-05-02 Red Hat, Inc. Generation of language bindings for libraries using data from compiler generated debug information
US20100088686A1 (en) * 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
US8776032B2 (en) * 2009-01-29 2014-07-08 Microsoft Corporation Automatic region-based verification of garbage collectors
US8782607B2 (en) 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8156093B2 (en) * 2009-03-10 2012-04-10 Microsoft Corporaton Memory object sharing for just in time compiled data
US8250216B2 (en) 2009-11-24 2012-08-21 At&T Intellectual Property I, L.P. Method and apparatus for programming session initiation protocol back-to-back user agents
US9959103B2 (en) * 2010-11-19 2018-05-01 Microsoft Technology Licensing, Llc Code deployment assistance
US9223769B2 (en) 2011-09-21 2015-12-29 Roman Tsibulevskiy Data processing systems, devices, and methods for content analysis
US8782638B2 (en) * 2011-11-18 2014-07-15 Compuware Corporation Execution pathway for interfacing with legacy programs in a mainframe environment
KR101349628B1 (ko) * 2011-12-07 2014-01-09 한국과학기술연구원 연산자를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
US9104781B2 (en) 2012-08-28 2015-08-11 Microsoft Technology Licensing, Llc Obtaining metadata set by imperative statement
US9588741B2 (en) 2013-03-15 2017-03-07 United Parcel Service Of America, Inc. Methods, apparatuses and computer program products for improving productivity for building applications
CN104252391B (zh) * 2013-06-28 2017-09-12 国际商业机器公司 用于在分布式计算系统中管理多个作业的方法和装置
CN105793818B (zh) 2013-12-06 2019-09-17 起元科技有限公司 源代码翻译
US9158505B2 (en) * 2014-01-09 2015-10-13 Microsoft Technology Licensing, Llc Specifying compiled language code in line with markup language code
US9329844B2 (en) 2014-05-30 2016-05-03 Apple Inc. Programming system and language for application development
GB2527060B (en) * 2014-06-10 2021-09-01 Arm Ip Ltd Method and device for updating software executed from non-volatile memory
DE102015105436A1 (de) * 2015-04-09 2016-10-13 Beckhoff Automation Gmbh Übersetzungsmodul, Verarbeitungsmodul und Steuerungssystem
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
US11537368B2 (en) * 2017-06-03 2022-12-27 Apple Inc. Integrating machine learning models into an interpreted software development environment
US11354165B1 (en) * 2017-07-13 2022-06-07 Workday, Inc. Automated cluster execution support for diverse code sources
EP3534252A1 (en) * 2018-03-02 2019-09-04 Nxp B.V. Method and system for providing a processing device with executable machine code
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
CN112015427A (zh) * 2020-08-21 2020-12-01 广州欢网科技有限责任公司 多种编译环境的搭建方法、装置及电子设备
CN112100307B (zh) * 2020-09-25 2023-07-07 北京奇艺世纪科技有限公司 数据处理方法、寻路处理方法、装置及电子设备
CN113703779B (zh) * 2021-09-06 2024-04-16 王喆 一种跨平台的多语言编译方法和超轻量物联网虚拟机
CN114706590B (zh) * 2022-05-05 2023-06-13 北京万昇智能科技有限公司 Plc应用包生成方法、plc应用执行方法及相关装置和系统

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS4847737A (ja) 1971-10-12 1973-07-06
IL100989A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Analysis of inductive expressions in multilingual mehadoptimization
US5659753A (en) * 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
JP2811990B2 (ja) * 1991-04-19 1998-10-15 三菱電機株式会社 プログラム処理装置及びプログラム処理方法
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
US5923882A (en) * 1995-08-29 1999-07-13 Silicon Graphics, Inc. Cross-module optimization for dynamically-shared programs and libraries
US6336161B1 (en) * 1995-12-15 2002-01-01 Texas Instruments Incorporated Computer configuration system and method with state and restoration from non-volatile semiconductor memory
US6067413A (en) 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
US6058455A (en) * 1997-07-02 2000-05-02 International Business Corporation RAID system having a selectable unattended mode of operation with conditional and hierarchical automatic re-configuration
US6560699B1 (en) * 1999-10-20 2003-05-06 Cisco Technology, Inc. Constraint-based language configuration files for updating and verifying system constraints
US6836883B1 (en) * 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
EP1588230A4 (en) * 2003-01-10 2008-05-07 Nexaweb Technologies Inc NETWORK ORIENTED COMPUTING SYSTEM AND METHOD

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56136454U (ja) * 1980-03-17 1981-10-16

Also Published As

Publication number Publication date
EP1178404B1 (en) 2014-04-16
US20040261065A1 (en) 2004-12-23
JP2002024032A (ja) 2002-01-25
EP1178404A3 (en) 2004-06-16
US7735071B2 (en) 2010-06-08
US6836883B1 (en) 2004-12-28
EP1178404A2 (en) 2002-02-06

Similar Documents

Publication Publication Date Title
JP4183399B2 (ja) 複数言語のコンパイル方法及びシステム
JP4514105B2 (ja) 拡張ランタイムホスティング
EP1258805B1 (en) Placing exception throwing instruction in compiled code
US20170228223A1 (en) Unified data type system and method
US7013458B2 (en) Method and apparatus for associating metadata attributes with program elements
US7051322B2 (en) Software analysis framework
US8464207B2 (en) System and method for tracking software changes
US8850414B2 (en) Direct access of language metadata
US9170787B2 (en) Componentization of compiler functionality
US20090328016A1 (en) Generalized expression trees
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US9134973B2 (en) Dynamic compiling and loading at runtime
US20090320007A1 (en) Local metadata for external components
US9141356B2 (en) Process for generating dynamic type
US20100042982A1 (en) Optimization of imperative implementation of compositional content
CN1149477C (zh) 用于在运行时提高函数的执行性能的方法和计算系统
Parnin et al. Improving change descriptions with change contexts
US8978007B2 (en) Static metadata in dynamic programs
Husák et al. PeachPie: Mature PHP to CLI compiler
US9720660B2 (en) Binary interface instrumentation
Gharaibeh et al. Coping with API Evolution for Running, Mission-Critical Applications Using Virtual Execution Environment
Hurley A CLR Back-end for a FLOSS Eiffel
Petřek Optimizing performance of software connectors code generator
Trofin et al. Using Runtime Information for Adapting Enterprise Java Beans Application Servers
Savidis Integrated implementation of dynamic untyped object‐based operator overloading

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20061115

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061120

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061213

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061213

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20061213

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20061226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070404

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070706

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071026

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20071206

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20080201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080711

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080902

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110912

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4183399

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120912

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130912

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees