Python はインタープリタ型ですか、コンパイル型ですか、それとも両方ですか? 質問する

Python はインタープリタ型ですか、コンパイル型ですか、それとも両方ですか? 質問する

私の理解では:

インタプリタ言語は、インタプリタ(高級言語を機械語に変換して実行するプログラム)によって実行され、少しずつプログラムを処理していく高級言語です

コンパイル言語は、そのコードが最初にコンパイラ (高級言語を機械語に変換するプログラム) によって機械語に変換され、次にエグゼキュータ (コードを実行する別のプログラム) によって実行される高級言語です。

私の定義が間違っていたら訂正してください。

さて、Python に戻りますが、これについては少し混乱しています。Python は解釈型言語であるとどこでも学べますが、マシン コードではなく、中間コード (バイト コードや IL など) に解釈されます。では、どのプログラムが IM コードを実行するのでしょうか。Python スクリプトがどのように処理され、実行されるのか理解するのを手伝ってください。

ベストアンサー1

まず、解釈/コンパイルは言語の特性ではなく、実装の特性です。ほとんどの言語では、ほとんどすべての実装が 1 つのカテゴリに分類されるため、言語も解釈/コンパイルであると言えば言葉が省けるかもしれませんが、それでも重要な区別です。理解を助けるためと、両方の種類の実装が使用可能な言語がかなりあるためです (ほとんどは関数型言語の領域で、Haskell と ML を参照)。さらに、Python のサブセットを C または C++ コード (およびその後のマシン コード) にコンパイルしようとする C インタープリターとプロジェクトがあります。

2 番目に、コンパイルはネイティブ マシン コードへの事前コンパイルに限定されません。コンパイラは、より一般的には、あるプログラミング言語のプログラムを別のプログラミング言語のプログラムに変換するプログラムです (大幅な変換を適用すれば、同じ入力言語と出力言語のコンパイラさえも可能だと言えます)。また、JIT コンパイラは実行時にネイティブ マシン コードにコンパイルするため、事前コンパイルと非常に近い速度、またはそれ以上の速度を実現できます (ベンチマークと比較する実装の品質によって異なります)。

しかし、細かいことにこだわるのはやめて、あなたが聞きたかった質問に答えましょう。実際上(つまり、ある程度普及した成熟した実装を使用して)、Pythonはコンパイルされます。事前にマシンコードにコンパイルされるのではなく(つまり、制限された間違った定義によって「コンパイル」されるのではなく、残念ながら一般的な定義によって「コンパイル」されるのです)、バイトコードですが、それでも少なくともいくつかの利点があるコンパイルです。たとえば、ステートメントa = b.c()はバイトストリームにコンパイルされ、これを「逆アセンブル」すると、 のようになりますload 0 (b); load_str 'c'; get_attr; call_function 0; store 1 (a)。これは単純化であり、実際には読みにくく、少し低レベルです。標準ライブラリで試してみることができます。disモジュールそして、実際の様子を見てみましょう。これを解釈する方が、高レベルの表現から解釈するよりも高速です。

そのバイトコードは、参照実装(CPython)のように解釈されるか(理論上も実際のパフォーマンス上も、直接解釈することと、最初に中間表現にコンパイルしてから解釈することの間には違いがあることに注意してください)、または実行時に解釈されて最適化されたマシンコードにコンパイルされます。ピピ

おすすめ記事