部分評価は、関連するインタープリターとコンパイラーに関連する概念的なフレームワークです。
解釈されたコードとコンパイルされたコードのパフォーマンスに関する一般的なステートメントを作成できますか?
プログラミング言語は仕様です(R5RSやn1570などのレポートに記述されています)。彼らはいないソフトウェアなので、それもの話をする意味がありませんパフォーマンス。ただし、一部のプログラミング言語には、インタープリターやコンパイラーなど、いくつかの実装があります。
Cのような伝統的にコンパイルされた言語(つまり、実装がしばしばコンパイラーである言語)でさえ、一部の部分はしばしば解釈されます。例えば、フォーマット制御文字列のprintf(C標準で定義された)であることが多い(により「解釈」C標準ライブラリ有し、printf
機能可変引数の技術を使用して)が、いくつかのコンパイラ(含むGCCは)-inことができ、限られた特定ケース-それを最適化し、低レベルの呼び出しに「コンパイル」します。
また、一部の実装は、「インタープリター」内であっても、JITコンパイル手法を使用しています(実行時にマシンコードを生成します)。良い例はluajitです。他の実装(Python、Ocaml、Java、Parrot、Luaなど)は、ソースコードをバイトコードに変換してから解釈します。
SBCLは、Common Lispの「コンパイラ」であり、すべてのREPLインタラクション(および呼び出しeval
など)をマシンコードに動的に変換します。通訳だと感じます。ブラウザ(たとえばv8)でのJavaScript実装のほとんどは、JITコンパイル技術を使用しています。
言い換えれば、インタープリターとコンパイラーの違いは非常に曖昧で(実際には両方の間に連続性があります)、実際には、ほとんどのプログラミング言語の実装には、インタープリターとコンパイラー(少なくともバイトコードまで)の両方のファセットが含まれていることがよくあります。
実装は、ほとんどの「コンパイラ」または「インタープリター」のような手法を使用することとは無関係に、高速または低速にすることができます。
一部の言語特性は、解釈アプローチを支持しています(プログラム全体の分析を通じてのみ効率的にコンパイルできます)。
以下のためにいくつかの問題の種類、一部でソフトウェアを設計メタプログラミングアプローチすることは価値があり、重要なスピードアップを提供します。特定の入力があると、プログラムはそれを処理するための特別なコードを動的に生成することを想像できます。これはCまたはC ++ でも可能です(JITライブラリを使用するか、Cコードを生成し、動的にロードされるプラグインとしてコンパイルします)。
参照してくださいこの関連のPythonに関する質問をし、その