web-dev-qa-db-ja.com

インタープリター/コンパイラーの仕組み

インタプリタ/コンパイラはどのように機能しますか?インタプリタとコンパイラの違いは何ですか。

68
developer

コンパイラ

コンパイラは、最初に作成された翻訳プログラムです。アイデアは簡単です。プログラムを作成し、それを翻訳するコンパイラに渡します。次に、結果を実行します。

通訳者

インタープリターは、高レベルの言語を低レベルの言語に翻訳するプログラムでもありますが、プログラムの実行時にそれを行います。テキストエディターなどを使用してプログラムを記述し、プログラムを実行するようにインタープリターに指示します。プログラムを一度に1行ずつ受け取り、実行する前に各行を翻訳します。最初の行を翻訳して実行し、次に2行目を翻訳して実行します。

コンパイラの特徴:

  • プログラムの分析と処理に多くの時間を費やす
  • 結果の実行可能ファイルは、マシン固有のバイナリコードの形式です。
  • コンピューターのハードウェアは、結果のコードを解釈(実行)します
  • プログラムの実行が速い

通訳者の特徴:

  • プログラムの分析と処理に費やす時間は比較的少ない
  • 結果のコードはある種の中間コードです
  • 結果のコードは別のプログラムによって解釈されます
  • プログラムの実行が比較的遅い
55
Adriaan Stander

翻訳者とは?

S-> Tトランスレータは、ソース言語Sで表現されたコードを受け入れ、別の(ターゲット)言語Tで表現された同等のコードに変換します。

翻訳者の例:

  • コンパイラ-高レベルのコードを低レベルのコードに変換します。 Java-> JVM
  • アセンブラー-アセンブリ言語コードを機械コードに変換します。 x86as-> x86
  • 高レベル翻訳者-コードをあるPLから別のPLに変換します。 Java-> C
  • 逆コンパイラ-低レベルのコードを高レベルのコードに変換します。 Java JVMバイトコード-> Java

インタープリターとは?

Sインタープリターは、言語Sで表現されたコードを受け入れ、そのコードをすぐに実行します。これは、一度に1つの命令をフェッチ、分析、および実行することで機能します。

ユーザーが対話的に指示を入力し(Pythonを考えて)、次の指示を出す前に出力を取得したい場合に最適です。また、プログラムを1回だけ実行する場合や、移植性が必要な場合にも役立ちます。

  • プログラムの解釈は、ネイティブマシンコードの実行よりもはるかに遅い
  • 高水準言語の解釈は最大で100倍遅くなります
  • 中間レベル(JVMバイトコードなど)の言語の解釈は10倍遅くなります
  • 命令が繰り返し呼び出されると、その命令は繰り返し分析されます-時間がかかります!
  • コードをコンパイルする必要はありません

動作

  • コンパイラはソースコードをマシンコードに変換しますが、ソースコードまたはオブジェクトコードは実行しません。

  • インタープリターは、一度に1命令ずつソースコードを実行しますが、ソースコードは翻訳しません。

パフォーマンス

  • コンパイラはソースプログラムをネイティブマシンコードに変換するのに非常に長い時間がかかりますが、その後の実行は高速です
  • インタープリターがソースプログラムの実行をすぐに開始しますが、実行が遅い

解釈コンパイラ

インタープリターコンパイラーは、コンパイラーとインタープリターの間の適切な妥協案です。ソースプログラムを仮想マシンコードに変換し、解釈します。

インタプリタ型コンパイラは、高速翻訳と適度に高速な実行を組み合わせています。ただし、

  • VMコードはソース言語よりは低いが、ネイティブマシンコードよりは高い
  • VM命令の形式は単純です(インタープリターがすばやく分析できます)

例:JDKは、Java用の解釈コンパイラーを提供します。

31
martynas

コンパイラ 、あるコンピューター言語のソースコードを別のコンピューター言語に変換します。

インタープリター 、ソースコードを直接(通常は独自の仮想マシン内で)実行します。

alt text
(ソース: answers.com

一般的に、インタープリターはパフォーマンスが高くなります。

19
KMån

インタプリタとコンパイラの違いは何ですか?

enter image description here

Compilerは、最初にプログラム全体をスキャンしてから、コンピュータープロセッサによって実行されるマシンコードに変換します。

Interpretersは、1つのステートメントを機械語に翻訳して実行し、次のステートメントに進みます。

例:コンパイラはほとんどすべてのエラーを一度に出しますが、インタープリターは間違った記述をした命令まで実行されます

インタプリタ/コンパイラはどのように機能しますか?

enter image description here

  • 事前に機械語に翻訳されているコンパイル言語とは異なります(右)。
  • 解釈された言語は実行時に翻訳されます。
  • dBASEおよびBASICinterpreters(中央)は、元のソースコードを変換します。
  • JavaおよびVisual Basic(左)インタープリターtranslatebytecode元のソースコードからコンパイルされた中間言語。

ソース

16
Premraj

違いと動作の仕組み

Q:に使用されるコンパイラとインタプリタは何ですか?

A:ほとんどのプログラムは高水準言語(c#、Java ...)で記述されています。高レベル言語には、理解可能な単語やフレーズが含まれています。一方、コンピューターは(この記事を書いている頃には)0と1だけである別名バイナリ/マシンコードであるマシンコードを理解しています。したがって、高レベルコードを(マシンコード/バイナリ)のソースコードに変換する必要があります。したがって、Wordの変換。

したがって、コンパイラ/インタープリターの仕事は、高レベルのコードをマシンコードに変換することであると結論付けています。

しかし、どちらもコードを「翻訳」する方法が異なります

違い:

コンパイラ:

ソースコードをある種の中間形式に変換します。静的言語の場合、コンパイラは通常、ソースコードをアセンブリに変換します。アセンブリは通常ディスクに保存されません。その後、アセンブリを呼び出してアセンブリをバイナリコードに変換します。バイナリコードは、通常、オブジェクトファイル(.oまたは.obj通常)、リンカーを呼び出してオブジェクトファイルをバイナリ実行可能ファイルにリンクします。また、このコンパイル、アセンブル、リンクのプロセス全体をコンパイルと呼ぶことも一般的です。したがって、gccをコンパイラーと呼ぶこともできますが、実際には、コンパイルするコンパイラーであるcc1、アセンブルするアセンブラー、リンクするリンカーであるldを呼び出します。

通訳:

バイトコード形式と呼ばれる中間体を持つ言語、ソースコードは最初にバイトコードに変換されます。このプロセスはコンパイルと呼ばれ、javacが例になります。バイトコードをホストマシンで実行することはできません。ホストマシンにバイトコードを解釈するために、実際にはOSの観点からプロセスであるプログラムが必要です。このプログラムはインタプリタと呼ばれます。 pythonなどの一部の言語は、単一の言語でコンパイルおよび解釈作業を行います

—両方から: https://www.quora.com/What-are-the-differences-between-a-compiler-an-interpreter-and-an-assembler-Provide-examples

比較

インタープリター

  • ソースコードの分析にかかる時間は短くなりますが、全体の実行時間は遅くなります。
  • 中間オブジェクトコードは生成されないため、memoryで効率的です。
  • 最初のエラーが発生するまでプログラムの翻訳を続け、その場合は停止します。したがって、デバッグは簡単です。

コンパイラ

  • ソースコードの分析には長い時間がかかりますが、全体の実行時間は比較的高速です。
  • さらにリンクを必要とする中間オブジェクトコードを生成するため、より多くのメモリが必要です。
  • プログラム全体をスキャンした後にのみエラーメッセージを生成します。したがって、デバッグは比較的困難です。

— from: https://www.programiz.com/article/difference-compiler-interpreter

言語の例

解釈済み

  • Python
  • Ruby
  • PHP
  • Java(全能)
  • Perl
  • R
  • パワーシェル

コンパイル済み

  • C
  • C++
  • C#
  • Objective-C
  • Swift
  • Fortran
7
user 451

コンパイラ-コンパイラは、ソース言語をターゲット言語に翻訳します。次に、ターゲット言語が入力を受け取り、出力を提供します。

コンパイラはソースコードをコンパイルしてターゲットコードを生成します

その後、ターゲットコードは入力を受け取り、出力を提供します

インタープリター-ターゲットコードを生成する代わりに、インタープリターはソースコードとともに入力を直接受け取り、出力を提供するように見えます。

インタープリターはソースプログラムを使用して入力を出力にマップします

次に、コンパイラによって生成された機械語ターゲットプログラムは、入力から出力へのマッピングにおいてインタープリターよりもはるかに高速です。ただし、インタプリタはソースプログラムを1行ずつ実行するため、コンパイラよりも優れたエラー診断を提供します。

リファレンス- コンパイラ:アホの原理、テクニック、ツール 別名the dragon book

0
vaibhaw.vipul

インタプリタとコンパイラの違いは何ですか。

直接かつ直感的に配置するには:

  • コンパイラは、人間が読み取れるソースコードを、コンピューターが読み取って実行できるマシンコードに変換するものです。

  • インタープリターは、ソースコードを直接読み取って実行するようにコンピューターを装う、またはシミュレートします。

0
Algebra