JP2001290656A - 差分コンパイル方式 - Google Patents
差分コンパイル方式Info
- Publication number
- JP2001290656A JP2001290656A JP2000111866A JP2000111866A JP2001290656A JP 2001290656 A JP2001290656 A JP 2001290656A JP 2000111866 A JP2000111866 A JP 2000111866A JP 2000111866 A JP2000111866 A JP 2000111866A JP 2001290656 A JP2001290656 A JP 2001290656A
- Authority
- JP
- Japan
- Prior art keywords
- intermediate language
- code
- compilation
- function
- generation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims description 64
- 230000006870 function Effects 0.000 claims description 29
- 230000008859 change Effects 0.000 claims description 3
- 238000012217 deletion Methods 0.000 claims 1
- 230000037430 deletion Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 abstract description 33
- 239000000543 intermediate Substances 0.000 description 80
- 230000008569 process Effects 0.000 description 44
- 238000010586 diagram Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 5
- 238000012937 correction Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】コンパイル時に無駄なコード生成を削除する。
【解決手段】コンパイル時に生成した中間語を保存して
おき、次回コンパイル時には、保存しておいた中間語と
今回生成した中間語を比較して、中間語が同じ場合はコ
ード生成を省略して、前回生成したオブジェクトコード
を利用し、中間語が異なる場合も実際には再度のコード
生成が不要かどうかを調べ、不要の場合はコード生成処
理を省略する。
おき、次回コンパイル時には、保存しておいた中間語と
今回生成した中間語を比較して、中間語が同じ場合はコ
ード生成を省略して、前回生成したオブジェクトコード
を利用し、中間語が異なる場合も実際には再度のコード
生成が不要かどうかを調べ、不要の場合はコード生成処
理を省略する。
Description
【0001】
【発明の属する技術分野】本発明はコンパイラに関し、
再度コードの生成を行なう必要がない部分は、以前コン
パイルしたときのオブジェクトコードをそのまま再利用
する、差分コンパイル機能を持つコンパイラに関する。
再度コードの生成を行なう必要がない部分は、以前コン
パイルしたときのオブジェクトコードをそのまま再利用
する、差分コンパイル機能を持つコンパイラに関する。
【0002】
【従来の技術】近年の、マイクロプロセッサの高性能化
にともない、コンパイラは、その性能を発揮できるよう
な、オブジェクトコードを生成することが求められてい
る。
にともない、コンパイラは、その性能を発揮できるよう
な、オブジェクトコードを生成することが求められてい
る。
【0003】しかし、性能を発揮できるようなコードの
生成には、複雑な解析や、プログラム変換などが必要と
なり、多くのコンパイル時間を要するようになる。この
ことは、プログラム開発における、コンパイル時間の増
加をまねき、プログラム開発の効率低下の原因となる。
生成には、複雑な解析や、プログラム変換などが必要と
なり、多くのコンパイル時間を要するようになる。この
ことは、プログラム開発における、コンパイル時間の増
加をまねき、プログラム開発の効率低下の原因となる。
【0004】プログラム開発時には、コンパイル、テス
ト実行、ソースプログラム修正、の手順を何回も繰り返
すことが多いため、コンパイル時間の増加によるプログ
ラム開発効率低下の問題の解決手段として、一度コンパ
イルしたソースコードを、修正して再度コンパイルする
場合に、修正箇所の影響する範囲のみ再度コード生成を
行ない、影響のない部分は、以前コンパイルしたオブジ
ェクトコードをそのまま再利用する、差分コンパイル方
式が考えられている。
ト実行、ソースプログラム修正、の手順を何回も繰り返
すことが多いため、コンパイル時間の増加によるプログ
ラム開発効率低下の問題の解決手段として、一度コンパ
イルしたソースコードを、修正して再度コンパイルする
場合に、修正箇所の影響する範囲のみ再度コード生成を
行ない、影響のない部分は、以前コンパイルしたオブジ
ェクトコードをそのまま再利用する、差分コンパイル方
式が考えられている。
【0005】ソースプログラムの修正による影響範囲を
調べる方法としては、make コマンドなどのように、オ
ブジェクトコードのファイルの更新時間と、ソースプロ
グラムのファイルの更新時間を比較して、オブジェクト
コードを生成するのに必要なソースプログラムのファイ
ルの更新時間が、一つでもオブジェクトコードの更新時
間より新しい場合は、再コンパイルを行なうものがあ
る。この方法では、修正内容には関わらず、影響を与え
得るファイルが更新された場合は再コンパイルが行なわ
れため、例えば、多くのソースファイルから参照されて
いるヘッダファイルが修正された場合などは、多数のフ
ァイルに対して不要な再コンパイルが起こることがあ
る。
調べる方法としては、make コマンドなどのように、オ
ブジェクトコードのファイルの更新時間と、ソースプロ
グラムのファイルの更新時間を比較して、オブジェクト
コードを生成するのに必要なソースプログラムのファイ
ルの更新時間が、一つでもオブジェクトコードの更新時
間より新しい場合は、再コンパイルを行なうものがあ
る。この方法では、修正内容には関わらず、影響を与え
得るファイルが更新された場合は再コンパイルが行なわ
れため、例えば、多くのソースファイルから参照されて
いるヘッダファイルが修正された場合などは、多数のフ
ァイルに対して不要な再コンパイルが起こることがあ
る。
【0006】make コマンドの欠点を解決する方法とし
て、特開平9−218789号公報「分割コンパイル方式」に
示されるように、コンパイル初期にソースコードから生
成する中間語や、記号表を関数単位に保存しておき、再
コンパイルの場合は関数単位で中間語を比較して、ソー
スプログラムが変更されたかどうか調べ、中間語に差が
ある関数は再度コード生成を行ない、中間語が同じ場合
は、前回生成したオブジェクトコードを利用するものが
ある。この方法では、影響を与え得るファイルが修正さ
れても、中間語の差となって現れない関数に対しては、
コード生成は行なわれない。
て、特開平9−218789号公報「分割コンパイル方式」に
示されるように、コンパイル初期にソースコードから生
成する中間語や、記号表を関数単位に保存しておき、再
コンパイルの場合は関数単位で中間語を比較して、ソー
スプログラムが変更されたかどうか調べ、中間語に差が
ある関数は再度コード生成を行ない、中間語が同じ場合
は、前回生成したオブジェクトコードを利用するものが
ある。この方法では、影響を与え得るファイルが修正さ
れても、中間語の差となって現れない関数に対しては、
コード生成は行なわれない。
【0007】
【発明が解決しようとする課題】特開平9−218789号公
報「分割コンパイル方式」の方法を用いても、プログラ
ムの変更、特に宣言の変更が行なわれた時、実際には不
要なコード生成が発生する場合がある。例えば、宣言の
変更により記号表の順番や構造が変化した場合、中間語
から参照される記号表が変わり、中間語が異なる場合が
ある。このとき、実際にはそのまま前回コンパイルした
際に生成したオブジェクトコードが利用できる場合で
も、コード生成が再度行なわれることがある。
報「分割コンパイル方式」の方法を用いても、プログラ
ムの変更、特に宣言の変更が行なわれた時、実際には不
要なコード生成が発生する場合がある。例えば、宣言の
変更により記号表の順番や構造が変化した場合、中間語
から参照される記号表が変わり、中間語が異なる場合が
ある。このとき、実際にはそのまま前回コンパイルした
際に生成したオブジェクトコードが利用できる場合で
も、コード生成が再度行なわれることがある。
【0008】
【課題を解決するための手段】上記課題解決のため、本
発明では修正範囲を調べる際に、次のようなことを行な
う。
発明では修正範囲を調べる際に、次のようなことを行な
う。
【0009】修正範囲を調べるのは、中間語の比較によ
り行なう。中間語の比較は、関数単位に行なう。
り行なう。中間語の比較は、関数単位に行なう。
【0010】宣言の修正により、中間語が変更された場
合、修正内容によっては、以下のような方法によりコー
ド生成を省略する。
合、修正内容によっては、以下のような方法によりコー
ド生成を省略する。
【0011】構造体の宣言の変更がされた時、関数の中
で参照されている構造体メンバの型と構造体先頭からの
オフセット、サイズを調べ、これらに変更がなければ、
構造体のメンバが増えたり、削除されたり、名前が変わ
ったり、順序が変わるなどの変更があった場合でも、前
回コンパイルしたオブジェクトコードを使えるものと判
断して、コード生成を省略する。
で参照されている構造体メンバの型と構造体先頭からの
オフセット、サイズを調べ、これらに変更がなければ、
構造体のメンバが増えたり、削除されたり、名前が変わ
ったり、順序が変わるなどの変更があった場合でも、前
回コンパイルしたオブジェクトコードを使えるものと判
断して、コード生成を省略する。
【0012】変数の宣言をした時に作成される記号辞書
のうち、関数内で宣言されるローカル変数については、
例えば中間語を先頭から走査して、中間語中で参照され
る順に並べることにより、関数内の変数の宣言の順序の
み変更した場合や、変数の名前のみの変更した場合は、
ソースプログラムは変更されなかったものとして、その
関数に関しては、前回コンパイルした時のオブジェクト
コードを利用することができ、コード生成を省略する。
のうち、関数内で宣言されるローカル変数については、
例えば中間語を先頭から走査して、中間語中で参照され
る順に並べることにより、関数内の変数の宣言の順序の
み変更した場合や、変数の名前のみの変更した場合は、
ソースプログラムは変更されなかったものとして、その
関数に関しては、前回コンパイルした時のオブジェクト
コードを利用することができ、コード生成を省略する。
【0013】また、グローバル変数、ローカル変数と
も、変数の宣言が追加、削除された場合も、関数内で参
照されていない変数の追加、削除の場合は、その関数の
コード生成は省略する。
も、変数の宣言が追加、削除された場合も、関数内で参
照されていない変数の追加、削除の場合は、その関数の
コード生成は省略する。
【0014】
【発明の実施の形態】以下図面を参照しながら本発明の
一実施例について説明する。
一実施例について説明する。
【0015】図1は本発明を利用する際の手順を示した
ものである。ソースプログラム101は差分コンパイル可
能なコンパイラ102により、前回コンパイルした際の中
間語105および前回コンパイルした際のオブジェクトコ
ード107から、前回から修正された部分だけ再コンパイ
ルした、修正後のオブジェクトコード108を高速に生成
する。
ものである。ソースプログラム101は差分コンパイル可
能なコンパイラ102により、前回コンパイルした際の中
間語105および前回コンパイルした際のオブジェクトコ
ード107から、前回から修正された部分だけ再コンパイ
ルした、修正後のオブジェクトコード108を高速に生成
する。
【0016】差分コンパイル可能なコンパイラ102がコ
ンパイルを行なう時、読み込まれたソースプログラム10
1は、解析・中間語生成フェーズ103において、プログラ
ムの字句解析、構文解析、意味解析などを行なって、中
間語を生成する。
ンパイルを行なう時、読み込まれたソースプログラム10
1は、解析・中間語生成フェーズ103において、プログラ
ムの字句解析、構文解析、意味解析などを行なって、中
間語を生成する。
【0017】生成された中間語は、中間語比較部104に
渡され、記号表の順番が変わることにより、中間語が異
なるとみなされないようにする。たとえば、記号表が宣
言された順番に依存しないように、例えば中間語を先頭
から検索していき、参照された順番になるように並べ変
える。また、前回コンパイルした際の中間語105も読み
込み、対応する関数の中間語を、関数名から検索して探
す。
渡され、記号表の順番が変わることにより、中間語が異
なるとみなされないようにする。たとえば、記号表が宣
言された順番に依存しないように、例えば中間語を先頭
から検索していき、参照された順番になるように並べ変
える。また、前回コンパイルした際の中間語105も読み
込み、対応する関数の中間語を、関数名から検索して探
す。
【0018】対応する関数が見つかったら中間語の比較
を行なう。中間語比較部104における中間語比較処理の
詳細については、図6をつかって説明する。
を行なう。中間語比較部104における中間語比較処理の
詳細については、図6をつかって説明する。
【0019】中間語の比較を行なって差がなかった場合
は、コード生成フェーズ106において、前回コンパイル
した際のオブジェクトコード107を読み込み、該当する
関数のコードを検索して、そのコードをコピーし、オブ
ジェクトコードを生成する。
は、コード生成フェーズ106において、前回コンパイル
した際のオブジェクトコード107を読み込み、該当する
関数のコードを検索して、そのコードをコピーし、オブ
ジェクトコードを生成する。
【0020】中間語の比較の結果、差があった場合は、
その関数に関しては、従来のコンパイラと同様にコード
生成処理を行い、オブジェクトコードを生成する。
その関数に関しては、従来のコンパイラと同様にコード
生成処理を行い、オブジェクトコードを生成する。
【0021】図2は、修正対象となるプログラムの例で
ある。
ある。
【0022】図3は、図2の修正対象となるプログラム
の中間語例である。中間語は関数辞書301に接続され
た、リスト構造と木構造を合わせ持つデータ構造を持
つ。
の中間語例である。中間語は関数辞書301に接続され
た、リスト構造と木構造を合わせ持つデータ構造を持
つ。
【0023】図4は、修正されたプログラムの例であ
る。大域変数宣言401、構造体宣言402、構造体要素403
の宣言、引数の宣言404などが変更されている。
る。大域変数宣言401、構造体宣言402、構造体要素403
の宣言、引数の宣言404などが変更されている。
【0024】図5は、図4の修正対象となるプログラム
の修正例を中間語で表したものである。プログラムの修
正により、中間語から指示される記号辞書が異なるた
め、図3の中間語とは、異なるものと識別される。
の修正例を中間語で表したものである。プログラムの修
正により、中間語から指示される記号辞書が異なるた
め、図3の中間語とは、異なるものと識別される。
【0025】図6は、中間語比較の手順を示したフロー
チャートである。解析・中間語生成フェーズ103で、中
間語を生成した後、処理手順601より比較処理を開始す
る。
チャートである。解析・中間語生成フェーズ103で、中
間語を生成した後、処理手順601より比較処理を開始す
る。
【0026】処理602において、ソースプログラムより
生成した中間語から、一要素取り出す。処理603におい
て、同様に前回コンパイル時に生成した中間語から、一
要素取り出す。処理604において、中間語読み込み処理
が終了したかどうかを調べる。もし、終了していた場合
は、前回コンパイル時に生成したオブジェクトコードを
利用できるので、処理611に移り、オブジェクトコード
再利用処理へと制御を移し、比較処理を終了する。
生成した中間語から、一要素取り出す。処理603におい
て、同様に前回コンパイル時に生成した中間語から、一
要素取り出す。処理604において、中間語読み込み処理
が終了したかどうかを調べる。もし、終了していた場合
は、前回コンパイル時に生成したオブジェクトコードを
利用できるので、処理611に移り、オブジェクトコード
再利用処理へと制御を移し、比較処理を終了する。
【0027】処理604においは、処理602,603でとりだし
た2つの中間語要素の比較を行なう。もし同じ要素であ
ったなら、比較した中間語は等しいので、処理のはじめ
に戻り、次の中間語要素の比較を行なう。
た2つの中間語要素の比較を行なう。もし同じ要素であ
ったなら、比較した中間語は等しいので、処理のはじめ
に戻り、次の中間語要素の比較を行なう。
【0028】処理605において、とりだした2つの中間語
要素が等しくない場合、処理606において、等しくない
のは、変数の記号表の違いかどうかを調べる。そうでは
なかった場合、オブジェクトコードの生成が必要となる
ため、処理612へ移り、オブジェクトコード生成処理へ
と制御を移し、比較処理を終了する。
要素が等しくない場合、処理606において、等しくない
のは、変数の記号表の違いかどうかを調べる。そうでは
なかった場合、オブジェクトコードの生成が必要となる
ため、処理612へ移り、オブジェクトコード生成処理へ
と制御を移し、比較処理を終了する。
【0029】処理606において、とりだした2つの中間語
要素の違いが変数の記号表の違いであった場合、処理60
7において2つの記号表のデータサイズが同じかどうか調
べる。データサイズが異なる場合は、オブジェクトコー
ドの生成が必要となるため、処理612へ移り、オブジェ
クトコード生成処理へと制御を移し、比較処理を終了す
る。
要素の違いが変数の記号表の違いであった場合、処理60
7において2つの記号表のデータサイズが同じかどうか調
べる。データサイズが異なる場合は、オブジェクトコー
ドの生成が必要となるため、処理612へ移り、オブジェ
クトコード生成処理へと制御を移し、比較処理を終了す
る。
【0030】データサイズが等しい場合は、処理608へ
移り、その変数がロケーションを持つかどうかを調べ
る。
移り、その変数がロケーションを持つかどうかを調べ
る。
【0031】変数がロケーションを持つ場合、処理609
に移りロケーションが同じかどうか比較を行なう。ロケ
ーションが同じ場合、処理のはじめに戻り、次の中間語
要素の比較を行なう。オフセットがことなる場合、オブ
ジェクトコードの生成が必要となるため、処理612へ移
り、オブジェクトコード生成処理へと制御を移し、比較
処理を終了する。
に移りロケーションが同じかどうか比較を行なう。ロケ
ーションが同じ場合、処理のはじめに戻り、次の中間語
要素の比較を行なう。オフセットがことなる場合、オブ
ジェクトコードの生成が必要となるため、処理612へ移
り、オブジェクトコード生成処理へと制御を移し、比較
処理を終了する。
【0032】処理608において、変数がロケーションを
持たない場合は、オフセットを持っているはずなので、
処理610に移りオフセットが同じかどうか比較を行な
う。オフセットが同じ場合、処理のはじめに戻り、次の
中間語要素の比較を行なう。オフセットがことなる場
合、オブジェクトコードの生成が必要となるため、処理
612へ移り、オブジェクトコード生成処理へと制御を移
し、比較処理を終了する。
持たない場合は、オフセットを持っているはずなので、
処理610に移りオフセットが同じかどうか比較を行な
う。オフセットが同じ場合、処理のはじめに戻り、次の
中間語要素の比較を行なう。オフセットがことなる場
合、オブジェクトコードの生成が必要となるため、処理
612へ移り、オブジェクトコード生成処理へと制御を移
し、比較処理を終了する。
【0033】次に、図6のフローチャートで、図3の中
間語と図5の中間語の比較を行なった際の処理の流れを
説明する。ソースプログラムは、解析・中間語生成フェ
ーズ103において、関数単位で中間語が生成され、中間
語比較フェーズ104に渡されるものとする。ここでは、
関数辞書501に接続されている中間語602,603などが渡っ
てくるものとする。また、記号表は、中間語の出現順に
並べられ、中間語中に現れない記号の記号表について
は、最後に加えられるものとする。前回コンパイルした
際に生成した中間語としては、図3に示す中間語表記の
中から、関数名検索処理によって関数辞書を検索し、関
数名が同じである関数辞書201に接続された中間語302,3
03などが渡ってくるものとする。
間語と図5の中間語の比較を行なった際の処理の流れを
説明する。ソースプログラムは、解析・中間語生成フェ
ーズ103において、関数単位で中間語が生成され、中間
語比較フェーズ104に渡されるものとする。ここでは、
関数辞書501に接続されている中間語602,603などが渡っ
てくるものとする。また、記号表は、中間語の出現順に
並べられ、中間語中に現れない記号の記号表について
は、最後に加えられるものとする。前回コンパイルした
際に生成した中間語としては、図3に示す中間語表記の
中から、関数名検索処理によって関数辞書を検索し、関
数名が同じである関数辞書201に接続された中間語302,3
03などが渡ってくるものとする。
【0034】処理601においては、再度コンパイルされ
て生成された中間語として、図5の中間語が渡される。
そして、まず処理602において中間語502が、処理603に
おいて中間語302が取り出される。次に処理604におい
て、中間語の読み込みが終了したかどうかの判定が行な
われるが、これはまだ中間語が残っているため、比較結
果は no となり、処理605に進む。処理605では中間語50
2と302を比較するが、同じ中間語であるため、判定は y
es となり処理602に戻る。中間語503と303、504と3
04は同じ中間語であるため、同様に処理が進む。
て生成された中間語として、図5の中間語が渡される。
そして、まず処理602において中間語502が、処理603に
おいて中間語302が取り出される。次に処理604におい
て、中間語の読み込みが終了したかどうかの判定が行な
われるが、これはまだ中間語が残っているため、比較結
果は no となり、処理605に進む。処理605では中間語50
2と302を比較するが、同じ中間語であるため、判定は y
es となり処理602に戻る。中間語503と303、504と3
04は同じ中間語であるため、同様に処理が進む。
【0035】中間語505と305の場合は、処理、602、60
3、604までは同様に処理が進むが、処理605において、
中間語の指示する辞書の記号が異なる辞書番号であるた
め、中間語は異なると判定され、処理606へ進む。ここ
で中間語の差異は記号表の差であるため、yes と判定さ
れ、処理607へ進む。処理607ではデータサイズが同じか
どうかの比較を行なうが、これは同じであるので、yes
と判定されて、処理608へ進む。処理608では、ロケーシ
ョンがあるかどうかの判定がされるが、中間語505、305
ともロケーションを情報として持っているため、yes と
判定されて処理609に進む。処理609では、ロケーション
が同じかどうかの判定を行なうが、中間語505、305と
も、ロケーションは SP + 0 であり、同じであるため、
yes と判定され、中間語の差は再度のコード生成の必要
がないものと判定され、処理602へ戻る。
3、604までは同様に処理が進むが、処理605において、
中間語の指示する辞書の記号が異なる辞書番号であるた
め、中間語は異なると判定され、処理606へ進む。ここ
で中間語の差異は記号表の差であるため、yes と判定さ
れ、処理607へ進む。処理607ではデータサイズが同じか
どうかの比較を行なうが、これは同じであるので、yes
と判定されて、処理608へ進む。処理608では、ロケーシ
ョンがあるかどうかの判定がされるが、中間語505、305
ともロケーションを情報として持っているため、yes と
判定されて処理609に進む。処理609では、ロケーション
が同じかどうかの判定を行なうが、中間語505、305と
も、ロケーションは SP + 0 であり、同じであるため、
yes と判定され、中間語の差は再度のコード生成の必要
がないものと判定され、処理602へ戻る。
【0036】中間語506と306の場合は、608まで中間語
同様に処理が進むが、処理605において、505と305の場
合と同様に処理が進むが、記号表中にロケーションはな
くオフセットを持つため、処理610へ進む。処理610で
は、オフセットがあるかどうかの判定がされるが、中間
語506、306ともオフセットは 0 であり、同じであるた
め、yes と判定され、中間語の差は再度のコード生成の
必要がないものと判定され、処理602へ戻る。
同様に処理が進むが、処理605において、505と305の場
合と同様に処理が進むが、記号表中にロケーションはな
くオフセットを持つため、処理610へ進む。処理610で
は、オフセットがあるかどうかの判定がされるが、中間
語506、306ともオフセットは 0 であり、同じであるた
め、yes と判定され、中間語の差は再度のコード生成の
必要がないものと判定され、処理602へ戻る。
【0037】このようにして中間語の比較を行なってい
き、最後の中間語の比較の後、処理604へ来た場合、そ
の関数については、コード生成処理が省略できるものと
して、オブジェクトコード再利用処理へと進む。
き、最後の中間語の比較の後、処理604へ来た場合、そ
の関数については、コード生成処理が省略できるものと
して、オブジェクトコード再利用処理へと進む。
【0038】なお、中間語比較処理において、処理60
6、607、609、610で、no と判定された場合は、オブジ
ェクトコード生成処理が必要なものと判定され、コード
生成処理へと進む。
6、607、609、610で、no と判定された場合は、オブジ
ェクトコード生成処理が必要なものと判定され、コード
生成処理へと進む。
【0039】また、大域変数宣言401の追加により生成
された、参照されなかった辞書に関しては、コード生成
には関係しないが、オブジェクトファイルを生成する時
に、データの領域は確保される。
された、参照されなかった辞書に関しては、コード生成
には関係しないが、オブジェクトファイルを生成する時
に、データの領域は確保される。
【0040】
【発明の効果】本発明によれば、従来の技術では、再度
コード生成の必要があったプログラムの修正でも、以前
生成したオブジェクトコードの一部を利用して、コード
生成処理を省略することにより、コンパイル時間を短縮
することができる。
コード生成の必要があったプログラムの修正でも、以前
生成したオブジェクトコードの一部を利用して、コード
生成処理を省略することにより、コンパイル時間を短縮
することができる。
【図1】本発明の実施形態の一例を示す図。
【図2】修正対象となるプログラムの例を示す図。
【図3】修正対象となるプログラムの中間語例を示す
図。
図。
【図4】修正されたプログラム例を示す図。
【図5】修正されたプログラムの中間語例を示す図。
【図6】中間語比較手順の一例を示す図。
Claims (4)
- 【請求項1】 プログラムのコンパイル途中段階で生成
される中間語を保存しておき、再コンパイル時に、以前
のコンパイル時に保存しておいた中間語と、今回生成し
た中間語を比較し、コードの再生成が必要かどうかを調
べ、コード再生成が必要ない部分に対しては、以前のオ
ブジェクトコードを再利用することにより、コンパイル
時間を短縮する差分コンパイル方式。 - 【請求項2】 請求項1の差分コンパイル方式におい
て、 プログラムの構造体の宣言の変更によって中間語の差が
生じた場合、関数の中で参照されている構造体メンバの
型と構造体先頭からのオフセット、サイズを調べ、これ
らに変更がなければ、構造体のメンバが増えたり、削除
されたり、名前が変わったり、順序が変わるなどの変更
があった場合でも、前回コンパイルしたオブジェクトコ
ードを使えるものと判断して、コート生成を省略するこ
とを特徴とする差分コンパイル方式。 - 【請求項3】 請求項1の差分コンパイル方式におい
て、 関数内で宣言されるローカル変数については、関数内の
変数の宣言の順序のみ変更した場合や、変数の名前のみ
の変更した場合は、ソースプログラムは変更されなかっ
たものとして、その関数に関しては、前回コンパイルし
た時のオブジェクトコードを利用して、コート生成を省
略することを特徴とする差分コンパイル方式。 - 【請求項4】 請求項1の差分コンパイル方式におい
て、 グローバル変数、ローカル変数とも、変数の宣言が追
加、削除された場合も、関数内で参照されていない変数
の追加、削除の場合は、その関数に関しては、前回コン
パイルした時のオブジェクトコードを利用して、コート
生成を省略することを特徴とする差分コンパイル方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000111866A JP2001290656A (ja) | 2000-04-07 | 2000-04-07 | 差分コンパイル方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000111866A JP2001290656A (ja) | 2000-04-07 | 2000-04-07 | 差分コンパイル方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001290656A true JP2001290656A (ja) | 2001-10-19 |
Family
ID=18624131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000111866A Pending JP2001290656A (ja) | 2000-04-07 | 2000-04-07 | 差分コンパイル方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001290656A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6452924B1 (ja) * | 2018-05-11 | 2019-01-16 | 三菱電機株式会社 | コンパイラおよびプログラミング支援装置 |
JP7450565B2 (ja) | 2021-02-02 | 2024-03-15 | 三菱電機株式会社 | コンパイル方法、開発支援装置および制御システム |
-
2000
- 2000-04-07 JP JP2000111866A patent/JP2001290656A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6452924B1 (ja) * | 2018-05-11 | 2019-01-16 | 三菱電機株式会社 | コンパイラおよびプログラミング支援装置 |
WO2019215919A1 (ja) * | 2018-05-11 | 2019-11-14 | 三菱電機株式会社 | コンパイラおよびプログラミング支援装置 |
US10802808B2 (en) | 2018-05-11 | 2020-10-13 | Mitsubishi Electric Corporation | Compiler and programming support device |
JP7450565B2 (ja) | 2021-02-02 | 2024-03-15 | 三菱電機株式会社 | コンパイル方法、開発支援装置および制御システム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7559050B2 (en) | Generating software development tools via target architecture specification | |
US4686623A (en) | Parser-based attribute analysis | |
Le Fessant et al. | Optimizing pattern matching | |
US20030088860A1 (en) | Compiler annotation for binary translation tools | |
US5367683A (en) | Smart recompilation of performing matchup/difference after code generation | |
US20040243988A1 (en) | Compiler, method of compiling and program development tool | |
Miecznikowski et al. | Decompiling Java using staged encapsulation | |
JP2002259134A (ja) | ポストリンク・コードの最適化方法及び装置 | |
JP2002196937A (ja) | 従来のアセンブラを用いた新規の命令を含む命令セットアーキテクチャ用のアセンブリ言語コードをコンパイルする方法 | |
Aaby | Compiler construction using flex and bison | |
US5446899A (en) | Hint generation in smart recompilation | |
Waddington et al. | High-fidelity C/C++ code transformation | |
Röjemo | Highlights from nhc—a space-efficient haskell compiler | |
JP7391983B2 (ja) | プログラム論理の表現を生成する方法、逆コンパイル装置、再コンパイルシステムおよびコンピュータプログラム製品 | |
US5535392A (en) | Using hint generation to cause portions of object files to remain the same | |
Rastello et al. | Optimizing translation out of SSA using renaming constraints | |
KR20090011974A (ko) | 컴파일 대상 파일 추출 방법 | |
JP2001290656A (ja) | 差分コンパイル方式 | |
Sewell et al. | Cakes that bake cakes: Dynamic computation in CakeML | |
Barnard et al. | Hierarchic syntax error repair for LR grammars | |
JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
GB2420638A (en) | Method of substituting code fragments in Internal Representation | |
US6976247B1 (en) | Generating an executable file | |
Atterer | Automatic test data generation from VDM-SL specifications | |
Maliavko | The Lexical and Syntactic Analyzers of the Translator for the EI Language |