答えて

1

どちらのアプローチは、他の上明確な利点を持っている - 一つのアプローチは、常に良好であったならば、チャンスは我々がどこでもそれを使用し始めるだろうとしています!

は、一般的に、コンパイラは、次のような利点を提供、を話す

:彼らはアップフロントのすべてのコードを見ることができるので

  1. を最終版になるコードを生成するとき、彼らは分析と最適化の数を実行することができますそれぞれの行を個別に解釈するよりも速く実行されます。

  2. コンパイラは、テーブル内のメモリ検索の点で「ダイナミックディスパッチ」や「継承」などの高レベルのアイデアと同等の機能を実行する低レベルのコードを生成することがあります。つまり、生成されたプログラムは元のコードに関する情報を少なくして、生成されたプログラムのメモリ使用量を減らす必要があります。実行された命令は、単にプログラム自体ではなく、プログラム自体に加えインタプリタからのオーバーヘッドのために通常であるので

  3. コンパイルされたコードは、一般的に高速解釈コードよりなります。

は、一般的に言って、コンパイラは以下の欠点があります。

  1. をコンパイラがするまで起こることを何が起こっているのかを予測することはできませんので、このような動的型付けのようないくつかの言語機能は、効率的にコンパイルすることは困難ですプログラムが実際に実行されます。これは、コンパイラが非常に良いコードを生成しない可能性があることを意味します。
  2. コンパイラは、一般的にあるため、彼らが行うことを、すべての分析を行うためのコストの長い「起動」の時間を持っています。つまり、コードをすばやく読み込むことが重要なWebブラウザのような設定では、コンパイラは何度も実行されない短いコードを最適化するため、速度が遅くなる可能性があります。

は一般を言えば、通訳は、次のような利点があります。

  1. 彼らが書かれたように、コードを読むことができますし、生成したり、コードを最適化するために高価な操作を行う必要はありませんので、彼らは傾向がありますコンパイラよりも早く起動します。

  2. 通訳プログラムがその実行として何を見ることができますので、通訳は、コンパイラは見ることができない場合がありますダイナミック最適化の数を使用することができます。

は一般を言えば、通訳は次のような欠点を持っている:インタプリタが実行時に利用できるプログラムの詳細情報を保持する必要があるため

  1. 通訳は通常、コンパイラよりも高いメモリ使用量を持っています。

  2. 通訳は通常、実行中のプログラムを遅くすることができます通訳のためのコードの中にいくつかのCPU時間を費やしています。

インタープリタとコンパイラには相補的な長所と短所があるため、言語ランタイムでは両方の要素を組み合わせることがますます一般的になりつつあります。 JavaのJVMはこれの良い例です.Javaコード自体はコンパイルされ、最初は解釈されます。 JVMは何度も何度も実行されているコードを見つけてマシンコードに直接コンパイルすることができます。つまり、 "ホット"コードはコンパイルの利点を得ます。 JVMは、インラインキャッシングのような多くの動的最適化を実行して、コンパイラが一般的にそうでないようにパフォーマンスを向上させることもできます。

最新のJavaScript実装の多くは、同様のトリックを使用しています。ほとんどのJavaScriptコードは短いので、それほど多くはないので、通常はインタープリタを使い始めます。しかし、コードが繰り返し実行されていることが明らかになった場合、多くのJSエンジンがコードをコンパイルするか、少なくともコンパイルして標準的な手法で最適化します。結果として、コードは起動時に速く(Webページをすばやく読み込むのに便利ですが)、実行されるほど速くなります。

最後に、の言語は、コンパイルまたは解釈されません。通常、Cコードはコンパイルされますが、実行中のコードのデバッグやビジュアル化を容易にするCインタプリタが用意されています(導入プログラミングクラスでよく使用されています。いくつかのJSエンジンがそれをコンパイルし始めるまで、インタープリター言語と考えることができます。いくつかのPython実装は純粋にインタプリタですが、ネイティブコードを生成するPythonコンパイラを入手することができます。さて、いくつかの言語はより簡単にをコンパイルしたり解釈したりすることができますが、特定のプログラミング言語用にコンパイラやインタプリタを作成するのを止めるものはありません。 Futamura projectionsと呼ばれる理論的な結果があります。たとえば、解釈できるものはコンパイルできることを示しています。

関連する問題