コンパイラとインタプリタ – それらの違い
コンパイラとインタプリタの主な違い
- コンパイラは高級プログラミング言語で書かれたコードをプログラムの実行前に一度にマシンコードに変換しますが、インタープリタはプログラムの実行中に高級プログラムの各ステートメントを XNUMX つずつマシンコードに変換します。
- コンパイルされたコードはより速く実行されますが、解釈されたコードはより遅く実行されます。
- コンパイラはコンパイル後にすべてのエラーを表示しますが、インタプリタは各行のエラーを XNUMX つずつ表示します。
- コンパイラは翻訳リンクロードモデルに基づいていますが、インタプリタは解釈メソッドに基づいています。
- コンパイラはプログラム全体を処理しますが、インタープリタは XNUMX 行のコードを処理します。
コンパイラとは何ですか?
コンパイラは、高水準プログラミング言語で記述されたコードをマシン コードに変換するコンピュータ プログラムです。これは、人間が読めるコードをコンピュータ プロセッサが理解できる言語 (バイナリの 1 ビットと 0 ビット) に変換するプログラムです。コンピュータはマシン コードを処理して、対応するタスクを実行します。
A コンパイラ プログラムは、それが書かれたプログラミング言語の構文規則に従う必要があります。ただし、コンパイラは単なるプログラムであり、そのプログラムで見つかったエラーを修正することはできません。したがって、間違いを犯した場合は、プログラムの構文を変更する必要があります。そうしないと、コンパイルされません。
通訳者とは?
インタプリタは、各高レベル プログラム ステートメントをマシン コードに変換するコンピュータ プログラムです。 これには、ソース コード、コンパイル済みコード、スクリプトが含まれます。 コンパイラとインタプリタはどちらも、高レベルのプログラミング言語をマシンコードに変換するという同じ仕事を行います。 ただし、コンパイラはプログラムの実行前にコードをマシンコードに変換します (exe を作成します)。 インタプリタは、プログラムの実行時にコードをマシンコードに変換します。
コンパイラとインタプリタの違い
コンパイラとインタプリタの重要な違いは次のとおりです。
違いの根拠 | コンパイラ | 通訳 |
---|---|---|
プログラミング手順 |
|
|
利点 | プログラム コードはすでにマシン コードに変換されています。 したがって、コードの実行時間が短くなります。 | 通訳は、特に初心者にとって使いやすいものです。 |
不利益 | ソースコードに戻らずにプログラムを変更することはできません。 | インタープリタされたプログラムは、対応するインタープリタを備えたコンピュータ上で実行できます。 |
機械コード | 機械語を機械コードとしてディスクに保存する | マシンコードをまったく保存していません。 |
実行時間 | コンパイルされたコードの実行が高速化される | 解釈されたコードの実行が遅くなる |
モデル | これは、言語翻訳のリンク読み込みモデルに基づいています。 | それは解釈方法に基づいています。 |
プログラムの生成 | 元のプログラムから独立して実行できる出力プログラム (exe 形式) を生成します。 | 出力プログラムを生成しません。 したがって、実行中に常にソースプログラムを評価します。 |
実行 | プログラムの実行はコンパイルとは別のものです。 これは、出力プログラム全体がコンパイルされた後にのみ実行されます。 | プログラムの実行は解釈プロセスの一部であるため、XNUMX 行ずつ実行されます。 |
メモリ要件 | Target プログラムは独立して実行され、メモリ内にコンパイラを必要としません。 | 解釈中、インタプリタはメモリ内に存在します。 |
に最適 | 特定のターゲットマシンに限定されており、移植できません。Cと C++ コンパイルモデルを使用する最も人気のあるプログラミング言語です。 | ロード時間が重要な Web 環境の場合。 徹底的な分析がすべて行われるため、複数回実行できない可能性のある小さなコードであっても、コンパイルには比較的長い時間がかかります。 このような場合には、通訳の方が優れています。 |
コードの最適化 | コンパイラはコード全体を前もって確認します。 したがって、コードの実行を高速化するために多くの最適化が実行されます。 | インタプリタはコードを XNUMX 行ずつ参照するため、最適化はコンパイラほど堅牢ではありません。 |
ダイナミックタイピング | コンパイラーはターン時に何が起こるかを予測できないため、実装が困難です。 | 通訳言語によるダイナミック タイピングのサポート |
使用法 | 本番環境に最適です | プログラムや開発環境に最適です。 |
エラー実行 | コンパイラは、コンパイル時にすべてのエラーと警告を表示します。 したがって、エラーを修正せずにプログラムを実行することはできません | インタプリタは単一のステートメントを読み取り、エラーがあればそれを表示します。 次の行を解釈するにはエラーを修正する必要があります。 |
入力 | プログラム全体が必要です | 必要なコードは XNUMX 行です。 |
出力 | コンパイラは中間マシンコードを生成します。 | インタプリタは中間マシンコードを生成しません。 |
Errors | コンパイル後のすべてのエラーを同時に表示します。 | 各行のすべてのエラーを XNUMX つずつ表示します。 |
関連するプログラミング言語 | C, C++、C#、Scala、 Java すべてコンパイラを使用します。 | PHP, パール, ルビー 通訳を使用します。 |
コンパイラの役割
- コンパイラはソースコードを読み取り、実行可能コードを出力します
- 高級言語で書かれたソフトウェアを、コンピュータが理解できる命令に変換します。 プログラマが書いたテキストを CPU が理解できる形式に変換します。
- コンパイルのプロセスは比較的複雑です。 プログラムの分析と処理に多くの時間を費やします。
- 実行可能ファイルの結果は、何らかの形式のマシン固有のバイナリ コードです。
また、チェックしてください:- 初心者のためのコンパイラ設計チュートリアル
通訳の役割
- インタプリタは実行時にソース コードを XNUMX 行ずつ変換します。
- Interpret は、高級言語で書かれたプログラムをマシンレベル言語に完全に翻訳します。
- インタプリタを使用すると、プログラムの実行中に評価と変更を行うことができます。
- プログラムの分析と処理に費やす時間が比較的少ない
- プログラムの実行はコンパイラに比べて比較的遅い
高級言語
高級言語など C, C++、JAVA などは英語に非常に近いため、プログラミング プロセスが簡単になります。ただし、実行する前に機械語に翻訳する必要があります。この翻訳プロセスは、コンパイラまたはインタープリタによって実行されます。ソース コードとも呼ばれます。
マシンコード
マシン言語はハードウェアに非常に近いものです。すべてのコンピュータにはマシン言語があります。マシン言語プログラムは、一連のバイナリパターンで構成されています。(例: 110110) これは、コンピュータが実行する必要がある単純な操作を表します。マシン言語プログラムは実行可能であるため、直接実行できます。
オブジェクトコード
ソース コードのコンパイル時に、Intel、AMD、ARM などのプロセッサごとに生成されるマシン コードは異なります。 コードを移植可能にするには、まずソース コードをオブジェクト コードに変換します。 これは、プロセッサが理解できない中間コード (マシンコードに似ています) です。 実行時に、オブジェクト コードは基礎となるプラットフォームのマシン コードに変換されます。
Java コンパイルと解釈の両方が行われます。
コンパイラの相対的な利点を活用するために、インタープリタはいくつかのプログラミング言語のような Java コンパイルと解釈の両方が行われます。 Java コード自体はオブジェクトコードにコンパイルされます。実行時には、 JVM オブジェクトコードをターゲットコンピュータのマシンコードに解釈します。
また、チェックしてください:- Java 初心者向けチュートリアル: コアを学ぶ Java プログラミング