インクリメンタルコンパイラは、コンパイルの分野に適用される一種の増分計算です。当然のことですが、通常のコンパイラはいわゆるクリーン ビルド、つまりすべてのプログラム モジュールを (再) ビルドしますが、インクリメンタル コンパイラはプログラムの変更された部分のみを再コンパイルします。
意味
命令型プログラミング
命令型プログラミングとソフトウェア開発では、増分コンパイルは既知のソース ファイルセットの変更のみを取得し、以前のコンパイルから既に存在する可能性のある対応する出力ファイル (コンパイラのターゲット言語、多くの場合はバイトコード)を更新します。インクリメンタル コンパイラは、以前にコンパイルされた出力ファイルを効果的に活用することで、ほとんどのコードが変更されないままのソース ファイル全体を無駄に再コンパイルすることを回避します。ほとんどのインクリメンタル コンパイラでは、ソース コードに小さな変更を加えたプログラムのコンパイルは、通常、ほぼ瞬時に行われます。インクリメンタル コンパイラは、言語のセマンティクスを維持しながら、言語の従来のコンパイル単位の粒度を削減し、コンパイラがより小さな部分を追加および置換できると言えます。
多くのプログラミング ツールは、増分コンパイラを利用して、開発者によりインタラクティブなプログラミング環境を提供しています。ソース ファイルが変更されるたびに増分コンパイラが呼び出されることは珍しくありません。そのため、開発者はコードの変更によって発生するコンパイル エラーについてほぼ即座に通知されます。この方式は、従来のコンパイルとは対照的に、エラーが通知されるまで長いコンパイル プロセスを待つ必要がなくなるため、プログラマーの開発サイクルが大幅に短縮されます。
このタイプの増分コンパイラの欠点の 1 つは、局所性と変更範囲の制限により、コンパイルするコードを簡単に最適化できないことです。最適化は通常リリース時にのみ実行されるため、これは通常問題にはなりません。増分コンパイラは開発全体を通じて使用され、標準のバッチ コンパイラはリリース時に使用されることになります。
インタラクティブプログラミング
対話型プログラミングパラダイム、例えばPoplog関連の文献[1]や[2]では、対話型コンパイラは実際にはソース言語のランタイムシステムの一部であるコンパイラを指します。コンパイラは、プログラムによって管理されるソースコードまたはデータ構造に対して実行時に呼び出すことができ、その後、マシンコードを含む新しいコンパイル済みプログラムフラグメントを生成します。このマシンコードは、ランタイムシステムですぐに使用できます。新しくコンパイルされたフラグメントが以前のコンパイル済みプロシージャを置き換える場合、古いものはガベージコレクションされます。このスキームは、ある程度の自己修正コードを許可し、メタプログラミング言語機能を必要とします。実行中にコードを追加、削除、および削除する機能は、ホットスワップとして知られています。一部の対話型プログラミングプラットフォームは、解釈されたコードとコンパイルされたコードの使用を混在させて、コードへの変更がプログラムによってすぐにアクセス可能であるという錯覚を実現します。
インクリメンタルコンパイラのリスト
- 命令型言語と関数型言語
- PECANプログラミング環境ジェネレーターは、1980年代初頭にSteven P. Reissによって開発された増分コンパイラでした。[3] [4]
- GNUコンパイラコレクションは、 C / C++に高速な増分コンパイラを提供することに重点を置いたIncrementalCompilerプロジェクト[5]で開発を分岐しました。
- Eclipse プラットフォームには、Java開発ツールプロジェクトの一環としてJava用のインクリメンタルコンパイラが含まれています[6]
- Gradleビルドツールはバージョン2.1以降、増分Javaコンパイルをサポートしています。[ 7]
- IBM VisualAge C++ コンパイラ 4.0
- エンバカデロデルファイ
- .NET コンパイラ プラットフォーム( C #およびVisual Basic .NET )
- 錆[8]
- 行く[9]
- 4番目
- セイロン
- オカムル
- GNAT、GNU Ada コンパイラ
- PTCオブジェクトエイダ
- インタラクティブ環境とランタイムシステム
- Poplog (そのコア言語POP-11とその前身であるPOP-2 )
- Lispのバージョン:
- スチールバンク Common Lisp
- カーネギーメロン大学 Common Lisp
- サイエンニア Common Lisp
- GNU CLISP
- フランツ・アレグロ Common Lisp
- Schemeのバージョン:
- Prologのバージョン:
- MLのバージョン:
- ニュージャージー州の標準 ML (ベル研究所の本部はニュージャージー州にあります)
- ポプログML
参照
参考文献
- ^ http://www.cs.bham.ac.uk/research/projects/poplog/primer/node14.html 2008-01-05にWayback Machineでアーカイブ、Poplogの入門書
- ^ スミス、スロマン、ギブソンの 1992 年の論文は以下 (現在オンラインで閲覧可能)
- ^ 「Steven P. Reiss Home Page」. ブラウン大学. 2011年6月9日. 2013年2月10日時点のオリジナルよりアーカイブ。 2014年8月8日閲覧。
- ^ Popple, James (1987). Incremental Compilation and its Implementation in the PECAN Programming Environment Generator (PDF) (優等論文). Australian National University. 2014年8月15日時点のオリジナルよりアーカイブ(PDF) 。 2013年3月8日閲覧。Alt URL Google ブックスでもご利用いただけます。
- ^ https://gcc.gnu.org/ml/gcc/2007-07/msg00496.html 、GCCのIncrementalCompilerブランチの開始を発表した。
- ^ http://www.eclipse.org/jdt/core/index.php 、JDT コア コンポーネントの説明
- ^ https://docs.gradle.org/2.1/release-notes.html 、Gradle バージョン 2.1 のリリース ノート
- ^ 「Rust 1.24 の発表 | Rust ブログ」。
- ^ 「Go 1.10 リリースノート - Go プログラミング言語」。
外部リンク
- インクリメンタル C++ コンパイラの作成に関する Dr. Dobb のジャーナル
- R. Smith、A. Sloman、J. Gibson、「POPLOG の対話型言語に対する 2 レベル仮想マシン サポート」、Research Directions in Cognitive Science Volume 5: Artificial Intelligence、D. Sleemanおよび N. Bernsen 編、Lawrence Erlbaum、1992 年、203 ~ 231 ページ
