バッチコンパイラとは


28

私はコンパイラのコースから次の引用を持っています(グラフの色付けのコンテキストで):

遅いため、グラフの色付けはバッチコンパイラで使用される傾向がありますが、線形スキャンはJITコンパイラで使用される傾向があります。

オンラインで明確な定義を見つけることができませんでした。それでは、コンパイラをバッチコンパイラにする理由は何ですか?


この質問はここではトピック外です。softwareengineering.stackexchange.comは聞いて良い場所です
バジーレStarynkevitch

回答:


42

JIT(Just-In-Time)コンパイラは、実行時、つまりプログラムの実行中にコードをコンパイルします。したがって、コンパイルのコストはプログラムの実行時間の一部であるため、最小限に抑える必要があります。

これの反対は、基本的に「バッチコンパイラ」と同義である事前(AOT)コンパイラです。これにより、ソースコードがマシンコードに変換され、マシンコードのみが配布されます。したがって、コンパイラーは、結果のプログラムの実行時間に影響を与えないため、非常に遅くなる可能性があります。

今日、人々が「コンパイラ」と言うとき、それらは通常AOTコンパイラを意味します。実際、「AOTコンパイラ」という用語は、JITでコンパイルされた言語、特にJavaScript用のAOTコンパイラを作成し始めたとき、比較的最近人気が出始めたばかりです。C#などのこれらの言語の多くは、VMの中間言語にコンパイルされ、実行時にマシンコードにJITコンパイルされます。「AOTコンパイラ」という用語には、ソースコードがマシンコードに直接コンパイルされるという意味が含まれているため、実行時にJITコンパイルの形式は必要ありません。

「バッチコンパイラ」は、この時点では少し古風な用語です。用語が普及したときのバッチコンパイラとの本当の対照は、インクリメンタルコンパイラでした。インクリメンタルコンパイルは、多くの場合、REPLがあり、特定の関数をコンパイルするために言語実装を対話的に要求できるLispなどの言語に関連付けられています。以前にコンパイルが要求されていない関数が実行された場合、通常は解釈されます。対照的に、バッチコンパイラは、すべての関数を一度に、つまりバッチでコンパイルしました。


1
また、プログラムをコンパイルするためにジョブをバッチキューにサブミットする必要がまったくなかった昔のコンパイラーに戻る
ニューロマンサー

また、一部の言語実装(GNUのawk、cpythonなど)は、実行時の最初のステップとして入力全体を内部表現にコンパイルします。これにより、ここで説明するプロパティの一部が混在します。
dmckee

1
@dmckeeすべてではないにしても、ほとんどの言語実装、実際
user253751

別のあいまいさ:バッチコンパイラと呼ばれるツールがMSDOSオペレーティングシステムに存在し、これらのバッチファイルが実行可能ファイルにコンパイルされました
。...– rackandboneman

もちろん、常に内部表現があります。ただし、Gcc、Llvm、または.Netのように、独自の言語である場合もあります。これは、フロントエンド/ミドル/バックエンドアーキテクチャ、フロントエンドが言語(C、C ++、Java、fortran ..)を共通の低レベル言語に変換し、最適化アルゴリズムが実行されるためです。最後に、共通言語のこの最適化されたコードは、バックエンドによってバイトコードまたはアセンブラ、実行可能または静的または動的ライブラリに変換されます。
再会

11

意味はあなたが与える引用の中に暗示されています!これは、タスクがリアルタイムで実行されないときに使用されるコンピューティング用語のバッチ処理に由来しますが、負荷(多くの場合、リアルタイムアクティビティの場合)が少ないときにオペレーティングシステムによる後の実行がスケジュールされます。

バッチコンパイラは、ユーザーがコンパイルの結果を待っていないときにコンパイルを行うものです。より現代的な用語を使用して、バックグラウンドで行われます。

これは、JIT(Just-In-Time)の逆であり、処理をより徹底的に行うために余分な時間を費やすことなく、必要なときに「ライブ」で実行されます。

バッチコンパイルの速度が遅いことは、次のように説明できます。

ここに画像の説明を入力してください

ソース:https : //xkcd.com/303/

またはこれでさえ:

ここに画像の説明を入力してください

ソース:http : //dilbert.com/strip/2013-06-22

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.