ホームページ  >  記事  >  バックエンド開発  >  Pythonをコンパイルする必要はありますか?

Pythonをコンパイルする必要はありますか?

尚
オリジナル
2019-07-04 17:31:349343ブラウズ

Pythonをコンパイルする必要はありますか?

#よく聞かれる質問は、「Python はインタープリター言語ですか?」です。コンパイルされますか?この質問に答えるのは想像ほど簡単ではありません。世界を理解している多くの人々と同様に、彼らは単純なモデルに基づいて物事を判断することに慣れています。実際には、非常に多くの詳細が含まれています。

一般に、コンパイルとは、高級言語を CPU で実行できるマシンコードに変換することを意味します。 C をコンパイルすると、これがまさに行われることになります。コンパイルの結果はバイナリ実行可能ファイルであり、システムでこのプログラムを直接実行できます。

これに対して、この説明は次のことを意味します。プログラムの実行時には、毎回ソース ファイル内のコードを 1 行読み取り、対応する操作を 1 行ずつ繰り返して実行します。もちろん、これがいわゆるスクリプト言語の仕組みです。

しかし実際には、上記の定義には制限が多すぎます。実際の言語は通常、より便利で強力な機能を持たせるために、さまざまな実装方法を採用しています。コンパイルは、ある言語を別の言語形式に変換するという、より一般的なものとして理解できます。一般に、C をマシンコードに変換するなど、ソース言語はターゲット言語よりも高度です。もちろん、JavaScript 8 から JavaScript 5 への変換も一種のコンパイルです。

Pythonをコンパイルする必要はありますか?

Python では、ソース コードはバイトコード と呼ばれる下位レベルの形式にコンパイルされます。バイトコードは、CPU の命令セットに似た一連の命令です。ただし、バイトコードは CPU によって直接実行されるのではなく、仮想マシン内で実行されます。もちろん、ここでの仮想マシンはオペレーティング システム環境全体を模倣するものではなく、バイトコード実行のための環境を提供するだけです。

Python コードの小さな部分とそれに対応するバイトコードを見てみましょう

Pythonをコンパイルする必要はありますか?

バイトコードの内容を読んだ後、f' ... ' このフォーマットされた文字列形式の動作原理は、内部の文字列を一連のリテラル文字列と変数に変換し、数値を使用してそれらを接続することです。

dis は Python 標準ライブラリの逆アセンブリ モジュールで、Python コードのバイトコード情報を表示できます。前述のバイトコードを実行する仮想マシンは、Python 自体を含む任意の言語で実装できます。ご興味がございましたら、GitHub でこのプロジェクト nedbat/byterun をチェックしてください。このプロジェクトは学習には使用できますが、運用環境には適していません。

しかし、Python を実行すると、コンパイルのプロセスをまったく感じることができません。コンパイラが何と呼ばれるかは表示されず、単純に .py ファイルを実行するだけで、必要に応じて自動的にコンパイルが行われます。これは JAVA とは異なります。JAVA コードを作成して実行する場合は、そのコードを手動で .class ファイルにコンパイルして実行する必要があります。 JAVA がコンパイル言語と呼ばれ、Python がインタープリタ言語と呼ばれるのはこのためです。しかし実際には、どちらの言語も実行時にまずバイトコードにコンパイルされてから、実行のために仮想マシンに渡されます。

Python には、対話型コマンド ラインという重要な機能もあります。 Python ステートメントを 1 行入力し、すぐに Enter キーを押して実行できます。実はこの処理でも、Pythonはまずバイトコードに変換されてから実行されます。この対話型コマンド ライン機能は、多くのコンパイル言語では利用できません。また、コンパイラへの明示的な呼び出しがないため、多くの人は Python ソース ファイルを実行するプログラムを Python インタープリタと呼びます。

比較的単純ですが、それでも追加したいと思います。 C や JAVA などの一部のコンパイル言語にも対話型のコマンド ラインがありますが、これらの言語の焦点はそこにはありません。 JAVA は最初にバイトコードにコンパイルされてから実行されましたが、その後、ジャストインタイム コンパイル テクノロジ (JIT) を使用して、C と同様にマシン コードに直接コンパイルできるようになりました。

上記の説明からわかるように、解釈と編集は完全に分離することはできません。既存のプログラミング言語を分類するためにいくつかの単語を使用したいと思うことがよくありますが、実際にはこれを行うのは難しすぎます。

最後に注意すべきことは、コードがどのように実行されるかは言語の実装の問題であり、言語の機能ではないということです。上記では Python について説明していますが、実際には CPython についての説明です。 CPython はインタプリタであり、インタプリタが C で記述されているためそう呼ばれます。C は Python のデフォルトのインタプリタでもあります。もちろん、他にも多くのインタプリタがあり、例えば、PyPy も JIT 技術を使用したインタプリタで、CPython に比べて実行速度が大幅に向上しています。

タイトルの質問に戻りますが、Python がインタープリタ型言語と呼ばれる理由は、明示的にコンパイル操作を呼び出さず、よりインタープリタ型の特性を示すためです。しかし、実際にはコンパイルというものが存在し、それをどのようにコンパイルするかは言語の実装、つまりインタプリタの設計に依存します。

Python 関連の技術記事の詳細については、

Python チュートリアル 列にアクセスして学習してください。

以上がPythonをコンパイルする必要はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。