JP3802058B2 - ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ - Google Patents

ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ Download PDF

Info

Publication number
JP3802058B2
JP3802058B2 JP50875996A JP50875996A JP3802058B2 JP 3802058 B2 JP3802058 B2 JP 3802058B2 JP 50875996 A JP50875996 A JP 50875996A JP 50875996 A JP50875996 A JP 50875996A JP 3802058 B2 JP3802058 B2 JP 3802058B2
Authority
JP
Japan
Prior art keywords
compressed representation
source code
compilation unit
code module
computer system
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 - Lifetime
Application number
JP50875996A
Other languages
English (en)
Other versions
JPH10507016A (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.)
Graphics Properties Holdings Inc
Original Assignee
Silicon Graphics Inc
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 Silicon Graphics Inc filed Critical Silicon Graphics Inc
Publication of JPH10507016A publication Critical patent/JPH10507016A/ja
Application granted granted Critical
Publication of JP3802058B2 publication Critical patent/JP3802058B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/48Incremental compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

発明の分野
本発明は、一般的にはコンパイル・ユニット(単位)をコンパイルすることに関し、より具体的には、コンパイル・ユニットのコンポーネントが互換性のない形で変更されたときのみコンパイル・ユニットを再コンパイルすることに関する。
関連技術
ソフトウェア・コンパイル・ユニットは、「メイン」ソフトウェア・プログラムと1つまたは2つ以上のヘッダ・ファイルを含んでいるのが代表的である。ヘッダ・ファイルは「メイン」プログラムに置かれている(またはヘッダ・ファイル自体に置かれている)該当のソフトウェア・ステートメントを使用して明示的にコンパイル・ユニットの中に組み込まれている。例えば、周知のCコンピュータ・プログラミング言語では、ヘッダ・ファイルをコンパイル・ユニットに組み込むために「インクルード("include")」ステートメントが使用されている。例えば、次のステートメントは、
#include "a.h"
"a.h"と名付けたヘッダ・ファイルをコンパイル・ユニットに組み入れるために「メイン」プログラムの中に挿入されている。これらはインクルード・ステートメントを使用してコンパイル・ユニットに挿入されるので、ヘッダ・ファイルは「インクルード・ファイル(include file)」とも呼ばれている。なお、本明細書では、これらの用語(つまり、「ヘッダ・ファイル」と「インクルード・ファイル」)は同じ意味をもつものとして使用されている。
従来は、「メイン」プログラムはコンパイル・ユニットがコンパイルされると、常にそのヘッダ・ファイルのすべてと一緒にコンパイルされている。周知のUNIXシステムでは、そのコンポーネント部分のいずれかが(つまり、「メイン」プログラムおよび/またはヘッダ・ファイルのいずれか)が変更されたときだけ、"make"ユーティリティがコンパイル・ユニットをコンパイルするように動作している。
しかるに、そのコンポーネント部分の1つまたは2つ以上が、コンパイル・ユニットがコンパイルされた最後の時刻以後に変更されなかった場合でも、コンパイル・ユニットを再コンパイルしないで済むことがよくある。例えば、コンパイル・ユニットのコンポーネントのフォーマットだけが変更された場合は、コンパイル・ユニットを再コンパイルする必要はない。しかし、従来は、そのコンポーネント部分になんらかの変更が行なわれると、常にコンパイル・ユニットが再コンパイルされている。従って、従来のコンパイラは不要なコンパイル・オペレーションを行なっていた。その結果、従来のコンパイラによるシステム資源の利用は非効率的であった。
発明の概要
要約して説明すると、本発明は、複数のソース・コード・モジュールからなるコンパイル・ユニット(compilation unit)を条件付きでコンピュータシステムに再コンパイル(conditional recompilation)させコンパイラを利用するシステムおよび方法を目的としている。本発明はコンパイラによって、ソース・コード・モジュールの1つを選択し、選択されたソース・コード・モジュールの新しい圧縮表現(new condensed representation)を生成する必要があるかどうか判断することによって動作する。次に、本発明はコンパイラによって、必要があれば選択されたソース・コード・モジュールの新しい圧縮表現を生成する。そして、本発明はコンパイラによって、選択されたソース・コード・モジュールの新しい圧縮表現と選択されたソース・コード・モジュールの元の圧縮表現(old condensed representation)との間に変更があるかどうかを判別する。これらの変更の各々は、互換性のある変更(compatible change)または互換性のない変更(incompatible change)のどちらかに分類される。互換性のない変更とは、コンパイル・ユニットの再コンパイルを必要とする変更である。互換性のある変更とは、コンパイル・ユニットの再コンパイルを必要としない変更である。本発明によれば、コンパイル・ユニットの再コンパイルは、変更のいずれかが互換性のない変更であると分類されたときだけ行なわれる。
本発明のその他の特徴および利点は、本発明の種々実施例のオペレーションおよび構造と共に、添付図面を参照して以下で詳しく説明する。なお、添付図面において、同一または機能的に類似のエレメントは類似の参照符号を付けて示されている。
【図面の簡単な説明】
以下、添付図面を参照して本発明を説明する。図面において、
図1は本発明の好適実施例によるコンピュータ・システムを示すブロック図である。
図2、図3A〜図3C、および図4〜図7は、図1のコンピュータ・システムの記憶デバイスにストアできるファイルのタイプと、そのようなファイルの好ましいフォーマットを示す図である。
図8〜図10は本発明の好ましいオペレーションを示すフローチャートである。
図11〜図14は本発明のオペレーションを説明するために使用されるタイムラインである。
図15は図14に示すタイムラインに関する解析の要約テーブルである。
好適実施例の詳細な説明
図1は本発明の好適実施例によるコンピュータ・システム102を示すブロック図である。好ましくは、コンピュータ・システム102は、シリコン・グラフィックス(Silicon Graphics)社(Mountain View, CA)製のIrix 5.2オペレーティング・システムが稼働しているインディ・ワークステーション(Indy Workstation)が使用されているが、これとは別に、他の適当なコンピュータ・システムを使用することも可能である。コンピュータ・システム102はバス106に接続されたプロセッサ104を搭載している。好ましくは、プロセッサ104はSilicon Graphics社製のMIPS R4000シリーズCPUであるが、これとは別に、他の適当なCPUを使用することも可能である。
バス106には記憶デバイス108も接続されており、これはランダムアクセスメモリ(random access memory - RAM)、リードオンリメモリ(read only memory - ROM)、二次記憶デバイス(secondary storage device)(ハードディスクなど)、またはこれらのデバイスの任意の組合せにすることが可能である。
プロセッサ104はコントロール・ロジック110に従って動作する。このようなコントロール・ロジック(control logic)110は好ましくは、ソフトウェア・コンパイラ112やコンパイラ・プリプロセッサ(compiler pre-processor)114のように、記憶デバイス108にストア(格納)された1つまたは2つ以上のコンピュータ・プログラムを表している。従って、プロセッサ104は、このようなコンピュータ・プログラムに含まれる命令に従って動作する。このようなコンピュータ・プログラムは好ましくはC、C++、Pascalおよび/またはアセンブラで書かれているが、これとは別に、他の適当なコンピュータ・プログラミング言語を使用することも可能である。
なお、ソフトウェア・コンパイラ112とコンパイラ・プリプロセッサ114は単一のコンピュータ・プログラムの部分を表している場合もあれば、異種のコンピュータ・プログラムを表している場合もある。同様に、コントロール・ロジック110はハードウェア・ステートマシン(hardware state machine)で実現されている場合もある。
ある実施例では、本発明は、コントロール・ロジック110がそこに記録されているコンピュータが読取り可能な媒体(computer readable media)を備えたコンピュータ・プログラム・プロダクトになっている。コントロール・ロジック110は公知の手段を使用して記憶デバイス108にロードされ、プロセッサ104によって実行される。
記憶デバイス108にはソース・ファイル116もストアされている。図2に示すように、ソース・ファイル116は、例えば、「メイン」ソース・ファイル202(図2では、"main.c"と名付けられている)を含んでいる。「メイン」ソース・ファイル202の例の一部は図4に示されている。この例示の「メイン」ソース・ファイル202は3つの「インクルード("include")」ステートメントを含んでいるが、これらのステートメントは公知のように実行されてインクルード・ファイル"a.h"、"b.h"、および"c.h"のコードを「メイン」ソース・ファイル202に組み込むように働く。
再び図1を参照するに、記憶デバイス108はヘッダ・ファイル120(インクルード・ファイルおよびソース・コード・モジュールとも呼ばれる)もストアしている。図3Bに示すように、ヘッダ・ファイル120は"a.h"、"b.h"、"c.h"、"d.h"および"e.h"ヘッダ・ファイルを含んでいるが、これらのヘッダ・ファイルは、それぞれ、参照符号304,306,308,310、および312で示されている。"a.h"ヘッダ・ファイルのように、例示のヘッダ・ファイルの部分は図5に示されている。この例示の"a.h"ヘッダ・ファイル304は種々の宣言(declaration)ステートメント(図5には、<first declaration>および<second declaration>と名付けられている)を含んでいる。また、この例示の"a.h"ヘッダ・ファイル304は2つの「インクルード」ステートメントも含んでおり、これらのステートメントは公知のように実行されて、"d.h"ヘッダ・ファイル310と"e.h"ヘッダ・ファイル312のコードを"a.h"ヘッダ・ファイル304に組み込むように働く。以上から理解されるように、ヘッダ・ファイル120がソース・コード・モジュールを表わしているのは、これらがソース・コード(例えば、バイナリ・コードではなく)を含んでいるからである。
再び図1を参照するに、記憶デバイス108には、事前コンパイル済み(precompiled)ヘッダ・ファイル122もストアされている。この分野の当業者ならば理解されるように、事前コンパイル済みヘッダ・ファイルはヘッダ・ファイルの圧縮バイナリ表現(condensed, binary representation)になっている。好ましくは、事前コンパイル済みヘッダ・ファイルの形態は、コンパイラがコンパイル時の期間にソース・ステートメントを内部表現するために使用する形態と同一になっている。このような事前コンパイル済みヘッダ・ファイルは、事前コンパイル済みヘッダ・ファイルに含まれる宣言の、コンパイラによる内部処理の多くが事前に行なわれているので(事前コンパイル済みファイルの作成時に)、コンパイラへの読込みがオリジナル・ヘッダ・ファイルよりも高速化されている。図3Cに示すように、事前コンパイル済みヘッダ・ファイルは、それぞれが"a.h"、"b.h"、"c.h"、および"d.h"ヘッダ・ファイル304,306,308,310に対応している"a.x"、"b.x"、"c.x"、および"d.x"事前コンパイル済みヘッダ・ファイル314,316,318,320を含んでいる。
図6は"a.x"ファイル314のように、事前コンパイル済みヘッダ・ファイルの例を示している。"a.x"ファイル314はフィールド606と610を含み、これらのフィールドは、"a.h"ヘッダ・ファイルに入っている宣言のコンパイラ内部表現(図5には、<first declaration>および<second declaration>と名付けられている)を収めている。"a.x"ファイル314はフィールド608と612も含んでおり、これらのフィールドは、"d.h"と"c.h"ヘッダ・ファイル310,312の組込みを可能にする(ソフトウェア・リンカの動作期間に)情報を収めている。さらに、"a.x"ファイル314はヘッダ・ファイル604を含んでいる。ヘッダ・ファイル604は"a.x"ファイル314の以前のバージョンに関するヒストリ(活動記録)情報(historical information)を収めている。このヘッダ・ファイル604については、以下で詳しく説明する。
再び図1を参照するに、記憶デバイス108には、オブジェクト・ファイル(object file)もストアされている。オブジェクト・ファイルはマシン命令(機械語命令)が集まったものである。1つまたは2つ以上のオブジェクト・ファイルが1つにリンクされて、実行可能プログラムが作られる。図3Aに示すように、このようなオブジェクト・ファイル118は、「メイン」オブジェクト・ファイル302(図3では、"main.o"と名付けている)を含んでおり、これは「メイン」ソース・ファイル202とそのヘッダ・ファイルのコンパイル済みバイナリ・バージョンである。
本発明の好適実施例によれば、コンパイラ・プリプロセッサ114とソフトウェア・コンパイラ112はコンパイル・ユニットをコンパイルして、コンパイル・ユニットのコンパイル済みオブジェクト・コード・バージョン(つまり、オブジェクト・ファイル)を生成するように動作する。ついで、ソフトウェア・リンカ(図示せず)を使用すると、公知のように、コンパイル・ユニットのオブジェクト・コード・バージョンから実行可能ファイル(executable file)を生成することができる。なお、このソフトウェア・リンカは本発明の部ではないので、ここで詳しく説明することは省略する。実行可能ファイルは、図1に示すコンピュータ・システム102のように、コンピュータ・システムによって実行される。
以下では、コンパイラ・プリプロセッサ114とソフトウェア・コンパイラ112のオペレーションの概要について説明する。なお、説明の便宜上、コンパイルされるコンパイル・ユニットは、次のようなソフトウェア・エレメント(software elements)を含んでいるものとする。すなわち、図4に示す「メイン」ソース・ファイル202と、図3Bに示す"a.h"、"b.h"、"c.h"、"d.h"、および"e.h"ヘッダ・ファイル304,306,308,310,312であるが、その場合、"a.h"ヘッダ・ファイル304の詳細は図5に示すようになっている。
このコンパイル・ユニットのコンパイルは、一般的に次のように行なわれる。まず、コンパイラ・プリプロセッサ114はコンパイル・ユニットを解析し、そのコンパイル・ユニットを再コンパイルする必要があるかどうかを判断する。一般的には、コンパイル・ユニットがコンパイルされた最後の時刻以後にコンパイル・ユニットが変更されていなければ、そのコンパイル・ユニットを再コンパイルする必要はない。また、本発明によれば、コンパイル・ユニットがコンパイルされた最後の時刻以後にコンパイル・ユニットが変更されていても、その変更が「互換性のある変更」である限り、そのコンパイル・ユニットを再コンパイルする必要がない。なにが「互換性のある変更」であるかについては、以下で説明する。
次に、コンパイルが必要であると判断されていれば、コンパイラ112はコンパイル・ユニットをコンパイルする。コンパイラ112は、公知の、適切なコンパイル技法を用いてコンパイル・ユニットをコンパイルする。このようなコンパイル技法は言語によって特定されているものである。例えば、コンパイルを必要とするヘッダ・ファイルがC++コンピュータ・プログラミング言語で書かれていれば、コンパイラ112はC++コンピュータ・プログラミング言語に見合った公知のコンパイル技法を用いてそのコンパイル機能を実行する。
以下では、コンパイラ・プリプロセッサ114はコンパイル・ユニットをどのように解析して、コンパイル・ユニットの再コンパイルが必要かどうかを判断するかを、図8に示すフローチャートを参照しながら説明する。説明の便宜上、フローチャート802のオペレーションは、それが適切であれば、上記の例を用いて説明することにする。具体的には、以下の説明では、コンパイルされるコンパイル・ユニットは、図4に示す「メイン」ソース・ファイル202および図3Bに示す"a.h"、"b.h"、"c.h"、"d.h"、および"e.h"ヘッダ・ファイル304,306,308,310,312を含んでいるものとし、その場合、"a.h"ヘッダ・ファイル304の詳細は図5に示すようになっている。フローチャート802はステップ804から始まり、そこでコントロール(制御)は即時にステップ805に渡される。
ステップ805において、コンパイラ・プリプロセッサ114はソース・ファイルのオブジェクト・コード・バージョン(つまり、オブジェクト・ファイル)が存在するかどうかを判断する。また、コンパイラ、プリプロセッサ114はソース・ファイルとその中で参照されているマクロがコンパイル・ユニットがコンパイルされた最後の時刻以後に未変更のままであるかどうかも判断する。(1)ソース・ファイルのオブジェクト・コード・バージョンが存在しないか、あるいは(2)その中で参照されているマクロがコンパイル・ユニットがコンパイルされた最後の時刻以後に変更されていれば、ステップ807が実行され、そこでコンパイラ・プリプロセッサ114は再コンパイル・フラグ(recompile flag)(これについては、以下に述べる)を「真(true)」にセットする。ここで説明している例では、コンパイラ・プリプロセッサ114は、"main.c"202(図2)のオブジェクト・ファイル表現である、"main.o"302(図3A)が存在するかどうかを、ステップ805で判断する。"main.c"202とその中で参照されているマクロが"main.c"がコンパイルされた最後の時刻以後に変更されていないとすれば、ステップ806が実行される。
本発明によれば、再コンパイル・フラグ(recompile flag)は各コンパイル・ユニットと関連づけられている。この再コンパイル・フラグは、好ましくは、記憶デバイス108のような、ランダムアクセスメモリ(RAM)に保存されている。再コンパイル・フラグは、コンパイル・ユニットを再コンパイルする必要があるかどうかを示している。具体的に説明すると、再コンパイル・フラグがセットされていれぱ(つまり、値が"1"にセットされていれば)、コンパイル・ユニットを再コンパイルする必要があることを意味する(ステップ816。これは下述する)。ヘッダ・ファイルと関連づけられた再コンパイル・フラグがクリアされていれば、そのヘッダ・ファイルを再コンパイルする必要があることを意味する(ステップ815。これは下述する)。
ステップ806で、コンパイラ・プリプロセッサ114は、コンパイル・ユニットに関連づけられた再コンパイル・フラグをクリアする(つまり、値をゼロまたは論理「偽(false)」にセットする)。
ステップ808で、コンパイラ・プリプロセッサ114はコンパイル・ユニットの中で参照されているヘッダ・ファイル304,306,308,310,312の1つを選択し、解析する。説明の便宜上、"d.h"ヘッダ・ファイル310がこのステップ808で選択されたものとする。
ステップ810で、コンパイラ・プリプロセッサ114はステップ808で選択されたヘッダ・ファイル(つまり、"d.h"ヘッダ・ファイル310)を解析し、このヘッダ・ファイルが変更されたことによる、コンパイル・ユニットの再コンパイルが必要かどうかを判断する。コンパイラ・プリプロセッサ114がコンパイル・ユニットの再コンパイルが必要であると判断すると、プリプロセッサ114は再コンパイル・フラグを論理「真」にセットする。プリプロセッサ114がステップ810をどうように実行するかは、以下で詳しく説明する。
ステップ812で、プリプロセッサ114は処理すべきヘッダ・ファイル304,306,308,310,312が他にもあるかどうかを判断する。ステップ808で以前に選択され、解析されたヘッダ・ファイル304,306,308,310,312は再処理する必要はない。処理すべきヘッダ・ファイルが他にも残っていれば、コントロールはステップ808に戻され、残っているヘッダ・ファイルの1つを選択する。
ステップ814で、ヘッダ・ファイルのすべてが処理されると(この判断はステップ812で行なわれる)、プリプロセッサ114は、(コンパイル・ユニットに関連づけれた)再コンパイル・フラグが論理「真」にセットされているかどうかを判断する。再コンパイル・フラグがセットされていなければ、ステップ815に示すようにコンパイル・ユニットを再コンパイルする必要はない。
再コンパイル・フラグがセットされていれぱ、プリプロセッサ114は、ステップ816において、コンパイル・ユニットをコンパイルするようにコンパイラ112に指示する。
ステップ815または816のどちらかが実行されたあと、フローチャート802のオペレーションはステップ818に示すように完了する。
次に、コンパイラ・プリプロセッサ114が、選択されたヘッダ・ファイル(ステップ808で選択されたもの)をステップ810でどのように解析するかを、図9のフローチャート902を参照しながら説明する。フローチャート902はステップ810を実行するときのプリプロセッサ114のオペレーションを示している。フローチャート902はステップ904から開始し、そこでコントロールは即時にステップ906に渡される。
ステップ906で、プリプロセッサ114は、選択されたヘッダ・ファイルに対応する事前コンパイル済みヘッダ・ファイルが存在するかどうかを判断する。そのような事前コンパイル済みヘッダ・ファイルが存在すれぱ、ステップ908が実行される。存在しなければ、ステップ930が実行される。
例えば、"e.h"ヘッダ・ファイル312がステップ808で選択されたものとする(図8)。この場合は、プリプロセッサ114は、選択されたヘッダ・ファイル(つまり、"e.h"ヘッダ・ファイル312)に対応する事前コンパイル済みヘッダ・ファイルが存在しないものと、ステップ906で判断する(図3Cを参照)。その結果、ステップ930が実行される。ステップ930で、プリプロセッサ114は、選択されたヘッダ・ファイル(つまり、"e.h"ヘッダ・ファイル312)に対応する事前コンパイル済みヘッダ・ファイル("e.x"と名付けている)を公知の言語固有のコンパイル技法を用いて生成するようにコンパイラ112に指示する。この新しい事前コンパイル済みヘッダ・ファイルは他の事前コンパイル済みヘッダ・ファイル122と一緒に記憶デバイス108にストアされる。ステップ932で、プリプロセッサ114は再コンパイル・フラグをセットする。ステップ932が実行されたあと、フローチャート902のオペレーションはステップ916に示すように完了する。
次に、例えば、"b.h"ヘッダ・ファイル306がステップ808で選択されたものとする(図8)。この場合は、プリプロセッサ114は、選択されたヘッダ・ファイル(つまり、"b.h"ヘッダ・ファイル306)に対応する事前コンパイル済みヘッダ・ファイルが存在するものと、ステップ906で判断する(図3Cを参照)。その結果、ステップ908が実行される。
ステップ908で、プリプロセッサ114は選択されたヘッダ・ファイルに対応する事前コンパイル済みヘッダ・ファイルがあらかじめ定義された、いくつかの必要条件を満足しているかどうかを判断する。事前コンパイル済みヘッダ・ファイルが事前定義された必要条件のすべてを満足していれば、そのヘッダ・ファイルの事前コンパイル済みヘッダ・ファイルは再生成する必要がない。逆に、事前コンパイル済みヘッダ・ファイルが事前定義の必要条件のすべてを満足していなければ、現行の事前コンパイル済みヘッダ・ファイルは更新されていないので(out-of-date)、ヘッダ・ファイルの事前コンパイル済みヘッダ・ファイルを再生成する必要がある。
プリプロセッサ114がステップ908をどのように実行するかは図10のフローチャート1002に示されている。このフローチャート1002はステップ1004から始まり、そこでコントロールは即時にステップ1006に渡される。
ステップ1006で、プリプロセッサ114は、事前コンパイル済みヘッダ・ファイルが選択されたヘッダ・ファイルより新しいかどうか(つまり、事前コンパイル済みヘッダ・ファイルの作成日が選択されたヘッダ・ファイルの作成日よりも時間的に最近であるかどうか)を判断する。基本的には、ステップ1006でプリプロセッサ114は選択されたヘッダ・ファイルが事前コンパイル済みヘッダ・ファイルが生成された最後の時刻以後に変更されたかどうかを判断する。選択されたヘッダ・ファイルが事前コンパイル済みヘッダ・ファイルが生成された最後の時刻以後に変更されていれば(つまり、事前コンパイル済みヘッダ・ファイルが選択されたヘッダ・ファイルよりも新しくなければ)、プリプロセッサ114は選択されたヘッダ・ファイルの事前コンパイル済みヘッダ・ファイルを再生成する必要があると判断する。従って、プリプロセッサ114は事前コンパイル済みヘッダ・ファイルが必要条件を満足していないと判断する(ステップ1012)。そうでなければ、ステップ1008が実行され、次の必要条件と突き合わせて事前コンパイル済みヘッダ・ファイルが評価される。
ステップ1006の間におけるプリプロセッサ114のオペレーションはそれぞれ図11と12に示すタイムライン1102と1202の例に示されている。まず、図12に示すタイムライン1202から説明することにする。タイムライン1202に示すように、選択されたヘッダ・ファイル("b.h"ヘッダ・ファイル306)は時刻t1に作成され、時刻t3に変更されている。対応する事前コンパイル済みヘッダ・ファイル("b.x"事前コンパイル済みヘッダ・ファイル316)は時刻t2に最後に変更されている。プリプロセッサ114は時刻t4にステップ1006を実行する。タイムライン1202を基準にして、プリプロセッサは事前コンパイル済みヘッダ・ファイルが選択されたヘッダ・ファイルよりも新しくないと、ステップ1006で判断する。従って、(上述した)ステップ1012が実行される。
図11のタイムライン1102に示すように、選択されたヘッダ・ファイル("b.h"ヘッダ・ファイル306)は時刻t1に作成されている。対応する事前コンパイル済みヘッダ・ファイル("b.x"ヘッダ・ファイル316)は時刻t2に最後に生成されている。プリプロセッサ114は時刻t3にステップ1006を実行する。タイムライン1102を基準にして、プリプロセッサ114は事前コンパイル済みヘッダ・ファイルが選択されたヘッダ・ファイルよりも新しいと、ステップ1006で判断する。従って、ステップ1008が実行される。
ステップ1008で、プリプロセッサ114は、選択されたヘッダ・ファイルに収められたマクロ(もしあれば)が対応するヘッダ・ファイルが最後に生成されたときと同じであるかどうかを判断する。代表例として、マクロは次のように定義されている。
#define macroname expansion tokens
または
#define macroname (parameter,parameter) expansion tokens
上記において、expansion tokensは、コンパイルされる言語で合法的(legal)であるトークン(ワード、シンボルなど)の集合を表している。コンパイラ112はこれらのマクロ名の1つに一致するワードをソースの中で見つけると(この定義の後に続くどこかで)、そのワードと、そのあとに続くパラメータ・リストがあれば、そのリストをマクロ定義に指定されたexpansion tokens(展開トークン)で置き換える。マクロはこの分野では公知である。
選択されたヘッダ・ファイルに収められたマクロが対応する事前コンパイル済みヘッダ・ファイルが最後に生成されたときと同じでなければ、プリプロセッサ114は、選択されたヘッダ・ファイルの事前コンパイル済みヘッダ・ファイルを再生成する必要があると判断する。従って、プリプロセッサ114は事前コンパイル済みヘッダ・ファイルが必要条件を満足していないと判断する(ステップ1012)。逆に、選択されたヘッダ・ファイルに収められたマクロが対応する事前コンパイル済みヘッダ・ファイルが最後に生成されたときと同じであれば、プリプロセッサ114は必要条件のすべてが満足されていると判断する(ステップ1010)。
再び図9を参照するに、プリプロセッサ114が、事前コンパイル済みヘッダ・ファイルが必要条件を満足していないと、ステップ908で判断していれば、ステップ918が実行される。ステップ918で、プリプロセッサ114は選択されたヘッダ・ファイルの事前コンパイル済みヘッダ・ファイルを、公知の言語固有のコンパイル技法を用いて再生成するようにコンパイラ112に指示する。この新しい事前コンパイル済みヘッダ・ファイルは他の事前コンパイル済みヘッダ・ファイルと一緒に記憶デバイス108にストアされる。このような事前コンパイル済みヘッダ・ファイル122はステップ908で解析された元の事前コンパイル済みヘッダ・ファイル(選択されたヘッダ・ファイルと関連がある)も含んでいる。
ステップ920で、プリプロセッサ114は新しい事前コンパイル済みヘッダ・ファイルを元の事前コンパイル済みヘッダ・ファイルと比較し、これらの2ファイル間の変更(この変更は最後にコンパイルされた時刻以後の、選択されたヘッダ・ファイルの変更を反映している)を記録する。ステップ922で、プリプロセッサ114はこれらの変更の各々を、互換性のある変更または互換性のない変更のどちらかに分類する。互換性のない変更はコンパイル・ユニットの再コンパイルを必要とする変更である。言い換えれば、選択されたヘッダ・ファイルが互換性のない変更を含んでいれば、コンパイル・ユニットは再コンパイルしなければならない(すなわち、この変更はコンパイル・ユニットと互換性がないので、コンパイル・ユニットの再コンパイルが必要になる)。互換性のある変更はコンパイル・ユニットの再コンパイルを必要としない変更である。言い換えれば、選択されたヘッダ・ファイルが互換性のある変更だけを含み、互換性のない変更を含んでいなければ、コンパイル・ユニットを再コンパイルする必要はない(すなわち、この変更はコンパイル・ユニットと互換性があるので、再コンパイルは必要でない)。
何を互換性のある変更とみなし、何を互換性のない変更とみなすかは、プログラミング言語によって異なっている。例えば、周知のCコンピュータ・プログラミング言語では、次のものが互換性のある変更としている。すなわち、(1)外部ルーチンと変数の新しいタイプと新しい宣言の追加、(2)ソース・ファイルまたはインクルード・ファイルに入っている既存のソース・コードを変更するような新マクロの追加、(3)フォーマットの変更、などである。一般的に、上記は周知のC++コンピュータ・プログラミング言語でも互換性のある変更を表している。Cコンピュータ・プログラミング言語では、他の多くの言語の場合と同じように、次のものが互換性のない変更としている。すなわち、メンバをレコードにまたはクラスに追加すること(C++などの、オブジェクト指向言語の場合)、メンバをレコードまたはクラスから削除すること、レコードまたはクラスのメンバのタイプを変更すること、新しいデータ・タイプを追加すること、既存のデータ・タイプを変更すること、新しい関数を追加すること、などである。他の特定のコンピュータ・プログラミング言語の場合の、その他の互換性のある変更と互換性のない変更は、この分野の当業者に自明のことである。
ステップ924で、プリプロセッサ114は新しい事前コンパイル済みヘッダ・ファイル(ステップ918で生成されたもの)のヘッダ604(図6)を、ステップ920で判別され、ステップ922で分類された変更に関するステータス(状況)情報で更新する。ヘッダ604の好ましいフォーマットは図7に示されている。好ましくは、ヘッダ604の第1フィールド702には、プリプロセッサ114は、新しい事前コンパイル済みヘッダ・ファイルがいっ生成されたかに対応する日付と時刻をストアする。己い換えれば、プリプロセッサ114はステップ918が実行されたときの日付と時刻をこのフィールド702に入れる。ヘッダ604の第2フィールド704には、プリプロセッサ114は、最後の互換性のある変更がいつ行なわれたかに対応する日付と時刻をストアする。例えば、新しい事前コンパイル済みヘッダ・ファイルが互換性のある変更を含んでいれば、新しい事前コンパイル済みヘッダ・ファイルがいっ生成されたかに対応する日付と時刻(つまり、ステップ918が実行された時の日付と時刻)は、第2フィールド704にストアされる。逆に、新しい事前コンパイル済みヘッダ・ファイルが互換性のある変更を含んでいなければ、プリプロセッサ114は元の事前コンパイル済みヘッダ・ファイルのヘッダ604の第2フィールド704から日付と時刻情報を抜き出し、その情報を新しい事前コンパイル済みヘッダ・ファイルのヘッダ604の第2フィールド704にストアする。
ヘッダ604の第3フィールド706には、プリプロセッサ114は最後の互換性のない変更がいつ行なわれたかに対応する日付と時刻を入れる。例えば、新しい事前コンパイル済みヘッダ・ファイルが互換性のない変更を含んでいれば、新しい事前コンパイル済みヘッダ・ファイルがいつ生成されたかに対応する日付と時刻(つまり、ステップ918が実行されたときの日付と時刻)が第3フィールド706にストアされる。逆に、新しい事前コンパイル済みヘッダ・ファイルが互換性のない変更を含んでいなければ、プリプロセッサ114は元の事前コンパイル済みヘッダ・ファイルのヘッダ604の第3フィールド706から日付と時刻情報を抜き出し、その情報を新しい事前コンパイル済みヘッダ・ファイルのヘッダ604の第3フィールド706にストアする。
ステップ926で、プリプロセッサ114は、いずれかの変更がステップ922で互換性のない変更と分類されていたかどうかを判断する。どの変更も互換性のない変更と分類されていなければ、フローチャート902のオペレーションはステップ916に示すように完了する。逆に、1つまたは2つ以上の変更が互換性のない変更と分類されていれば、ステップ928が実行される。ステップ928で、プリプロセッサ114は再コンパイル・フラグを論理「眞」にセットする。ステップ928が実行されたあと、フローチャート902のオペレーションはステップ916に示すように完了する。
再びステップ908を参照するに、上述したように、選択されたヘッダ・ファイルに対応する事前コンパイル済みヘッダ・ファイルがいくつかの事前定義の必要条件を満足しているとプリプロセッサ114がステップ908で判断していれば、ステップ910が実行される。
ステップ910で、プリプロセッサ114は事前コンパイル済みヘッダ・ファイルがコンパイル・ユニットが最後にコンパイルされた時刻以後に作成されたかどうかを判断する。事前コンパイル済みヘッダ・ファイルがコンパイル・ユニットが最後にコンパイルされた時刻以後に作成されたものであれば、コンパイル・ユニットを再コンパイルする必要がある。そうでなければ、コンパイル・ユニットを再コンパイルする必要はない。
例えば、図13に示すタイムライン1302の例を考えてみる。ここで、"a.h"ヘッダ・ファイル304がステップ808で選択されたものとする(図8)。このタイムライン1302では、"main"ソース・ファイル202と"a.h"ヘッダ・ファイル(つまり、選択されたヘッダ・ファイル)は時刻t1に作成され、時刻t2にコンパイルされている。従って、時刻t2はコンパイル・ユニットが最後にコンパイルされた時刻を表している。"a.h"ヘッダ・ファイル304は時刻t3に変更されている。"a.x"事前コンパイル済みヘッダ・ファイル314は時刻t4に再生成されている。プリプロセッサ114は時刻t5にステップ910を実行している。このタイムライン1302の例では、プリプロセッサ114は、"a.x"事前コンパイル済み314がコンパイル・ユニットが最後にコンパイルされた時刻(時刻t2)以後に作成されたものと(時刻t4)ステップ910で判断することになる。
事前コンパイル済みヘッダ・ファイルがコンパイル・ユニットがコンパイルされた最後の時刻以後に作成されたものでないと、プリプロセッサ114がステップ910で判断していれば、フローチャート902のオペレーションはステップ916に示すように完了する。逆に、事前コンパイル済みヘッダ・ファイルがコンパイル・ユニットがコンパイルされた最後の時刻以後に作成されたものであると、プリプロセッサ114が判断していれば(図13のタイムライン1302に示すように)、ステップ912が実行される。
ステップ912で、プリプロセッサ114はコンパイル・ユニットがコンパイルされた最後の時刻以後に、互換性のある変更だけが選択されたヘッダ・ファイルに行なわれていたかどうかを判断する。この判断は選択されたヘッダ・ファイルに関連する、最も最近に生成された事前コンパイル済みヘッダ・ファイルのヘッダ604を参照することによって行なわれる(図7を参照)。互換性のある変更だけが行なわれていれば(従って、互換性のない変更が行なわれていなければ)、コンパイル・ユニットを再コンパイルする必要はない。逆に、互換性のない変更が行なわれていれば、コンパイル・ユニットを再コンパイルする必要がある。
例えば、図14に示すタイムライン1402の例を考えてみる。この例でも、"a.h"ヘッダ・ファイル304がステップ808で選択されたものとする(図8)。このタイムライン1402では、"main"ソース・ファイル202と"a.h"ヘッダ・ファイル304(つまり、選択されたヘッダ・ファイル)は時刻t1に作成され、時刻t2にコンパイルされている。"a.h"ヘッダ・ファイル304は時刻t4に互換性のない変更で変更されている。"a.x"事前コンパイル済みヘッダ・ファイル314″は時刻t5に再生成されている。"a.h"ヘッダ・ファイル304は時刻t7に互換性のある変更だけで変更され、"a.x"事前コンパイル済みヘッダ・ファイル314は時刻t8に再生成されている。プリプロセッサ114は時刻t10にステップ912を実行する。
ステップ912で行なわれる解析は、コンパイル・ユニットが最後にいっコンパイルされたかによって左右される。コンパイル・ユニットが最後に時刻t3にコンパイルされていれぱ(または、時刻t3より以前(例えば、時刻t2)にコンパイルされていれぱ)、コンパイル・ユニットを再コンパイルする必要がある。これが事実であるのはコンパイル・ユニットが最後にコンパイルされた時刻(時刻t3)以後に1つまたは2つ以上の互換性のない変更が"a.h"ヘッダ・ファイル304に行なわれている(時刻t4)からである。
コンパイル・ユニットが最後に時刻t6にコンパイルされていれば、コンパイル・ユニットを再コンパイルする必要はない。これが事実であるのは、コンパイル・ユニットがコンパイルされた最後の時刻(時刻t6)以後に互換性のある変更だけが"a.h"ヘッダ・ファイル304に行なわれている(時刻t7)からである。
コンパイル・ユニットが最後に時刻t9にコンパイルされていれぱ、コンパイル・ユニットを再コンパイルする必要がある。これが事実であるのは、"a.x"事前コンパイル済みヘッダ・ファイル314が時刻t8に最後に作成されており、これは、コンパイル・ユニットが最後にコンパイルされた時刻である時刻t9よりも前であるためである。
タイムライン1402の上記解析は、図15に示すテーブル1502に要約されている。
ステップ912で、コンパイル・ユニットがコンパイルされた最後の時刻以後に互換性のある変更だけが選択されたヘッダ・ファイルに行なわれていたと、プリプロセッサ114が判断していれば、フローチャート902のオペレーションはステップ916に示すように完了する。逆に、コンパイル・ユニットがコンパイルされた最後の時刻以後に1つまたは2つ以上の互換性のない変更が選択されたヘッダ・ファイルに行なわれていたと、プリプロセッサ114が判断していれば、ステップ914が実行される。ステップ914で、プリプロセッサ114は再コンパイル・フラグをセットする。ステップ914が実行されたあと、フローチャート902のオペレーションはステップ916に示すように完了する。
以上、本発明の種々の実施例について説明してきたが、これらの実施例は単なる例示であり、本発明はこれらの実施例に限定されないことはもちろんである。従って、本発明の範囲は上述した実施例のいずれによっても限定されず、以下の請求の範囲およびその等価的事項によってのみ規定されるべきものである。

Claims (13)

  1. 複数のソース・コード・モジュールを有するコンパイル・ユニットを条件付きで再コンパイルコンピュータシステムを利用する方法であって、
    (1)前記コンピュータシステムおいて、前記ソース・コード・モジュールの1つを選択するステップと、
    (2)前記コンピュータシステムおいて、前記選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があるか否かを判断するステップと、
    (3)前記コンピュータシステムおいて、前記ステップ(2)の判断を条件として該選択されたソース・コード・モジュールの新しい圧縮表現を生成するステップと、
    (4)前記コンピュータシステムおいて、該選択されたソース・コード・モジュールの前記新しい圧縮表現と該選択されたソース・コード・モジュールの元の圧縮表現との間の変更を判別するステップと、
    (5)前記コンピュータシステムおいて、前記変更の各々を互換性のある変更と互換性のない変更のいずれかに分類するステップであって、互換性のない変更は該コンパイル・ユニットの再コンパイルを必要とする変更であり、互換性のある変更は該コンパイル・ユニットの再コンパイルを必要としない変更であるステップと、
    (6)該変更のいずれかが互換性のない変更であると分類されたとき、前記コンピュータシステムおいて、該コンパイル・ユニットの再コンパイルを可能にするステップと
    を具えたことを特徴とする方法。
  2. 請求項1に記載の方法において、
    (7)前記コンピュータシステムおいて、前記ソース・コード・モジュールの各々について前記ステップ(1)から(6)までを実行するステップをさらに具えたことを特徴とする方法。
  3. 請求項1に記載の方法において、前記ステップ(2)は、
    前記コンピュータシステムにおいて、前記圧縮表現が前記選択されたソース・コード・モジュールよりも古いか否かを判断するステップと、
    前記コンピュータシステムにおいて、該圧縮表現が該選択されたソース・コード・モジュールよりも古いと判断されたときに、該選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があると判断するステップと
    を有することを特徴とする方法。
  4. 請求項1に記載の方法において、前記ステップ(2)は、
    前記コンピュータシステムにおいて、前記選択されたソース・コード・モジュールに含まれるマクロ・ステートメントが前記元の圧縮表現の生成時以後に変更されていたか否かを判断するステップと、
    前記コンピュータシステムにおいて、前記マクロ・ステートメントが該元の圧縮表現の生成時以後に変更されていたと判断されたときに、該選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があると判断するステップと
    を有することを特徴とする方法。
  5. 請求項1に記載の方法において、前記ステップ(5)および(6)は、
    前記コンピュータシステムにおいて、前記変更のいずれかが互換性のない変更と分類されたとき、前記コンパイル・ユニットに関連づけられた再コンパイル・フラグをあらかじめ決めた値にセットするステップと、
    前記コンピュータシステムにおいて、該コンパイル・ユニットが前記あらかじめ決めた値にセットされていれば、該コンパイル・ユニットのコンパイルを可能にするステップと
    を有することを特徴とする方法。
  6. 請求項1に記載の方法において、前記ステップ(1)と(2)との間に実行されるステップであって、
    前記コンピュータシステムおいて、前記選択されたソース・コード・モジュールのいずれかの圧縮表現が存在するか否かを判断するステップと、
    該ソース・コード・モジュールの圧縮表現が存在しないと判断されたときには、前記コンピュータシステムおいて、該選択されたソース・コード・モジュールの圧縮表現を生成するステップと、
    前記コンピュータシステムおいて、前記コンパイル・ユニットのコンパイルを可能にするステップと
    をさらに具えたことを特徴とする方法。
  7. 請求項1に記載の方法であって、前記選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要がないと前記ステップ(2)において判断されたときに実行されるステップであって、
    前記コンピュータシステムおいて、前記元の圧縮表現が前記コンパイル・ユニットがコンパイルされた最後の時刻以後に生成されたか否かを判断するステップと、
    該元の圧縮表現が該コンパイル・ユニットがコンパイルされた最後の時刻以後に生成されたと判断されたときに、該元の圧縮表現の以前のバージョンに対して、前記コンピュータシステムおいて、該元の圧縮表現の中に互換性のない変更が存在するか否かを判断するステップと、
    前記コンピュータシステムおいて、少なくとも1つの互換性のない変更が該元の圧縮表現の中に存在すると判断されたときのみ該コンパイル・ユニットのコンパイルを可能にするステップと
    をさらに具えたことを特徴とする方法。
  8. 複数のソース・コード・モジュールを有するコンパイル・ユニットを条件付きで再コンパイルするシステムであって、
    前記ソース・コード・モジュールの1つを選択するモジュール選択手段と、
    前記選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があるか否かを判断するモジュール生成判断手段と、
    前記モジュール生成判断手段の前記判断を条件として、該選択されたソース・コード・モジュールの新しい圧縮表現を生成する圧縮表現生成手段と、
    該選択されたソース・コード・モジュールの前記新しい圧縮表現と該選択されたソース・コード・モジュールの元の圧縮表現との間の変更を判別する変更判別手段と、
    前記変更の各々を互換性のある変更と互換性のない変更のいずれかに分類する変更分類手段であって、互換性のない変更は前記コンパイル・ユニットの再コンパイルを必要とする変更であり、互換性のある変更は該コンパイル・ユニットの再コンパイルを必要としない変更である変更分類手段と、
    該変更のいずれかが互換性のない変更と分類されたときに、該コンパイル・ユニットの再コンパイルを可能にするコンパイル可能手段と
    を具えたことを特徴とするシステム。
  9. 請求項8に記載のシステムにおいて、前記モジュール生成判断手段は、前記元の圧縮表現が前記選択されたソース・コード・モジュールよりも古いか否かを判断する手段と、
    該元の圧縮表現が該選択されたソース・コード・モジュールよりも古いと判断されたときに、該選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があると判断する手段と
    を有することを特徴とするシステム。
  10. 請求項8に記載のシステムにおいて、前記モジュール生成判断手段は、
    前記選択されたソース・コード・モジュールに含まれるマクロ・ステートメントが前記元の圧縮表現が生成された時刻以後に変更されたか否かを判断する手段と、
    前記マクロ・ステートメントが該元の圧縮表現が生成された時刻以後に変更されたと判断されたときに、該選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要があると判断する手段と
    を有することを特徴とするシステム。
  11. 請求項8に記載のシステムにおいて、前記変更分類手段は、前記変更のいずれかが互換性のない変更であると分類されたときに、前記コンパイル・ユニットに関連づけられた再コンパイル・フラグをあらかじめ定義した値にセットする手段を有し、および前記コンパイル可能手段は前記再コンパイル・フラグが前記あらかじめ定義した値にセットされたときに、該コンパイル・ユニットのコンパイルを可能にする手段を有することを特徴とするシステム。
  12. 請求項8に記載のシステムにおいて、
    前記選択されたソース・コード・モジュールのいずれかの圧縮表現が存在するか否かを判断する手段と、
    該選択されたソース・コード・モジュールの圧縮表現が存在しないと判断されたときに、該ソース・コード・モジュールの圧縮表現を生成する手段と、
    前記コンパイル・ユニットのコンパイルを可能にする手段と
    をさらに具えたことを特徴とするシステム。
  13. 請求項8に記載のシステムにおいて、
    前記選択されたソース・コード・モジュールの新しい圧縮表現を生成する必要がないと前記モジュール生成判断手段によって判断されたときに、前記元の圧縮表現が前記コンパイル・ユニットがコンパイルされた最後の時刻以後に生成されたか否かを判断する手段と、
    該元の圧縮表現が該コンパイル・ユニットがコンパイルされた最後の時刻以後に生成されたと判断されたときに、該元の圧縮表現の以前のバージョンに対して、該元の圧縮表現の中に互換性のない変更が存在するか否かを判断する手段と、
    少なくとも1つの互換性のない変更が該元の圧縮表現の中に存在するときのみ該コンパイル・ユニットのコンパイルを可能にする手段と
    をさらに具えたことを特徴とするシステム。
JP50875996A 1994-08-26 1995-08-02 ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ Expired - Lifetime JP3802058B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/294,823 US5692196A (en) 1994-08-26 1994-08-26 System and method for conditionally compiling a software compilation unit
US08/294,823 1994-08-26
PCT/US1995/009738 WO1996007137A1 (en) 1994-08-26 1995-08-02 System, method, and compiler pre-processor for conditionally compiling a software compilation unit

Publications (2)

Publication Number Publication Date
JPH10507016A JPH10507016A (ja) 1998-07-07
JP3802058B2 true JP3802058B2 (ja) 2006-07-26

Family

ID=23135091

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50875996A Expired - Lifetime JP3802058B2 (ja) 1994-08-26 1995-08-02 ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ

Country Status (5)

Country Link
US (1) US5692196A (ja)
JP (1) JP3802058B2 (ja)
DE (1) DE19581754B4 (ja)
GB (1) GB2307073B (ja)
WO (1) WO1996007137A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6519767B1 (en) * 1995-06-07 2003-02-11 Microsoft Corporation Compiler and method for automatically building version compatible object applications
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US6279151B1 (en) * 1998-01-20 2001-08-21 International Business Machines Corporation Method and apparatus for remote source code inclusion
US6185733B1 (en) * 1998-01-20 2001-02-06 International Business Machines Corporation Method and apparatus for remote object code inclusion
US6505343B1 (en) * 1998-12-31 2003-01-07 Intel Corporation Document/view application development architecture applied to ActiveX technology for web based application delivery
US7689975B2 (en) * 2003-04-16 2010-03-30 Nxp B.V. Processing of a compileable computer program
EP1616255B1 (en) * 2004-03-19 2007-08-01 NTT DoCoMo, Inc. Method and apparatus for weaving aspects into a changing base system
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
US8151253B2 (en) * 2006-03-27 2012-04-03 Oracle International Corporation Efficient generation of executable file from program files when some of the program files expressly incorporate other program files
KR20080045545A (ko) * 2006-11-20 2008-05-23 삼성전자주식회사 조건부 영역을 전처리하는 방법
CA2675692C (en) * 2009-08-28 2012-03-13 Ibm Canada Limited - Ibm Canada Limitee Compiler-assisted program source code filter
JP2011170884A (ja) * 2011-05-12 2011-09-01 Ntt Docomo Inc 変化するベースシステムへとアスペクトをウィービングする方法および装置
US8775392B1 (en) * 2011-06-07 2014-07-08 The Math Works, Inc. Revision control and configuration management
US8464234B2 (en) * 2011-10-24 2013-06-11 Google Inc. Pre-parsed headers for compilation
CN105335137B (zh) 2014-07-23 2019-01-18 国际商业机器公司 用于处理源文件的方法和装置
US9672020B2 (en) * 2014-09-19 2017-06-06 Microsoft Technology Licensing, Llc Selectively loading precompiled header(s) and/or portion(s) thereof

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4558413A (en) * 1983-11-21 1985-12-10 Xerox Corporation Software version management system
US5325531A (en) * 1989-06-30 1994-06-28 Digital Equipment Corporation Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5367683A (en) * 1992-06-26 1994-11-22 Digital Equipment Corporation Smart recompilation of performing matchup/difference after code generation
US5325533A (en) * 1993-06-28 1994-06-28 Taligent, Inc. Engineering system for modeling computer programs

Also Published As

Publication number Publication date
US5692196A (en) 1997-11-25
DE19581754B4 (de) 2005-12-29
GB9703860D0 (en) 1997-04-16
WO1996007137A1 (en) 1996-03-07
DE19581754T1 (de) 1997-07-17
GB2307073A (en) 1997-05-14
JPH10507016A (ja) 1998-07-07
GB2307073B (en) 1999-07-14

Similar Documents

Publication Publication Date Title
JP3802058B2 (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
US7992141B2 (en) Method and apparatus for building executable computer programs using compiled program libraries
US6922827B2 (en) Iterative software development environment with prioritized build rules
US7103881B2 (en) Virtual machine to provide compiled code to processing elements embodied on a processor device
JP3284956B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6961931B2 (en) Dependency specification using target patterns
US5367683A (en) Smart recompilation of performing matchup/difference after code generation
US5842021A (en) Optimizer
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JPH02217926A (ja) コード生成方法
US5625822A (en) Using sorting to do matchup in smart recompilation
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
CN112882718A (zh) 编译处理方法、装置、设备及存储介质
CA2355989A1 (en) Compiling source code files having multiple
US6016398A (en) Method for using static single assignment to color out artificial register dependencies
US5446899A (en) Hint generation in smart recompilation
US20020062478A1 (en) Compiler for compiling source programs in an object-oriented programming language
US5535392A (en) Using hint generation to cause portions of object files to remain the same
US7689975B2 (en) Processing of a compileable computer program
US20050125783A1 (en) Program optimization with intermediate code
CN116560667B (zh) 一种基于预编译延迟执行的拆分调度系统及方法
EP0856789A2 (en) Smart recompilation of source program
JP3018783B2 (ja) コンパイル方式
JP2000242504A (ja) コンパイラ装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050914

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060208

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060328

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060427

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

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

Free format text: PAYMENT UNTIL: 20090512

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20100512

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130512

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140512

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term