シングルパスコンパイラとマルチパスコンパイラの主な違いは、シングルパスコンパイラがソースコードを各コンパイルユニットに一度だけ通すのに対し、マルチパスコンパイラはコンパイルを複数のパスに分け、各パスは前のパスの結果を継続することである。
コンピュータプログラムは、コンピュータがあるタスクを実行するための命令の集合体です。
通常、プログラマーは高水準のプログラミング言語を使ってプログラムを書きます。
しかし、コンピュータはこの命令を理解することはできない。
そこで、ソースコードを機械が理解できる機械語コードに変換する必要がある。
コンパイラは、ソースコードを機械語に変換するソフトウェアであり、シングルパスコンパイラとマルチパスコンパイラの2種類があります。
シングルパスコンパイラとは
コンパイルプロセスにはいくつもの段階があります。
シングルパスコンパイラでは、ソーステキストを一回だけ通過させ、解析し、コードを生成します。
言い換えれば、ソースコードが各コンパイルユニットを一度だけ通過するようにします。
そして、各コードセクションを直ちに最終的なマシンコードに変換する。
図1:コンパイラ
シングルパスコンパイラの主なステージは、字句解析、構文解析、コード生成です。
まず、字句解析ではソースコードをスキャンし、トークンに分割する。
すべてのプログラミング言語には文法があります。
これは、その言語の構文と法的記述を表している。
次に、構文解析が文法で記述された言語構成要素を決定する。
最後に、コード生成器がターゲットコードを生成する。
全体として、シングルパスコンパイラはコードの最適化を行わない。
さらに、中間コードの生成もない。
Multipass Compilerとは
マルチパスコンパイラとは、ソースコードの解析、分析、生成などを複数回行い、それぞれの段階で中間コードを生成するコンパイラです。
ソースコードと機械語コードの間で、1つ以上の中間表現に変換する。
各順次パスにおいて、コンパイルユニット全体を再処理する。
各パスでは、前のパスの結果を入力とし、中間出力を作成する。
同様に、各パスでコードが改善され、最終パスで最終的なコードが生成されます。
マルチパスコンパイラでは、中間コードの生成、マシン依存コードの最適化、マシン非依存コードの最適化などのタスクが追加で実行されます。
図2:マルチパス・コンパイラ
マルチパス・コンパイラには複数の利点があります。
マシンに依存せず、モジュール構造になっている。
コード生成はコンパイルの他のステップから切り離されます。
そのため、異なるマシンやハードウェアに対してパスを再利用することができます。
さらに、より複雑で表現力豊かな言語を表現することができます。
シングルパスコンパイラとマルチパスコンパイラの違い
定義
シングルパスコンパイラとは、各コンパイルユニットのパーツを一度だけ通過させ、各コードセクションを最終的なマシンコードに直ちに変換するコンパイラの一種である。
マルチパスコンパイラとは、プログラムのソースコードまたは抽象構文木を複数回処理するタイプのコンパイラです。
したがって、これらの定義は、シングルパスコンパイラとマルチパスコンパイラの主な違いを説明している。
速度
シングルパスコンパイラとマルチパスコンパイラの大きな違いは、速度です。
マルチパスコンパイラでは、各パスで中間ファイルを読み書きするため、シングルパスコンパイラより速度が遅くなります。
同義語
シングルパスコンパイラをナローコンパイラ、マルチパスコンパイラをワイドコンパイラと呼ぶこともあります。
スコープ
また、シングルパスコンパイラの適用範囲は限定されていますが、マルチパスコンパイラの適用範囲は大きくなっています。
コードの最適化
シングルパスコンパイラとマルチパスコンパイラのもう一つの違いは、コードの最適化があるマルチパスコンパイラと異なり、シングルパスコンパイラにはコードの最適化がないことです。
中間コード
中間コードもシングルパスコンパイラとマルチパスコンパイラの違いになります。
シングルパスコンパイラでは、中間コードの生成はありません。
しかし、マルチパスコンパイラでは中間コードの生成はある。
コンパイル時間
さらに、シングルパスコンパイラは、マルチパスコンパイラと比較して、コンパイルにかかる時間を最小限に抑えることができます。
メモリ消費量
また、マルチパスコンパイラのメモリ消費量は、シングルパスコンパイラよりも多くなります。
この点もシングルパスコンパイラとマルチパスコンパイラの違いと言えるでしょう。
プログラミング言語
Pascalなどのプログラミング言語はシングルパスコンパイラで実装され、Javaなどのプログラミング言語はマルチパスコンパイラで実装されます。
これもシングルパスコンパイラとマルチパスコンパイラの違いのひとつです。
結論
コンパイラには、シングルパスコンパイラとマルチパスコンパイラがあります。
シングルパスコンパイラとマルチパスコンパイラの違いは、シングルパスコンパイラがソースコードを各コンパイルユニットに一度だけ通すのに対し、マルチパスコンパイラはコンパイルを複数のパスに分け、各パスは前のパスの結果を引き継ぐということです。