[解決済み】Pythonはインタプリタか、コンパイルか、それとも両方か?
質問
私の理解では
An 解釈 言語とは、インタープリタ(高級言語を機械語に変換して実行するプログラム)が実行する高級言語であり、インタープリタはプログラムを少しずつ処理する。
A コンパイル済み 言語とは、コンパイラ(高級言語を機械語に変換するプログラム)によってコードがまず機械語に変換され、次に実行プログラム(コードを実行するための別のプログラム)によって実行される高級言語である。
私の定義に間違いがあれば訂正してください。
さて、Pythonの話に戻りますが、これについては少し混乱しています。Pythonはインタプリタ言語であるとどこでも習いますが、何らかの中間コード(バイトコードやILなど)に解釈され ではなく をマシンコードに変換します。では、次にどのプログラムがIMコードを実行するのでしょうか?Pythonスクリプトがどのように処理され、実行されるのかを理解するのにお役立てください。
どのように解決するのですか?
まず、インタープリタブル/コンパイル済は、言語の特性ではなく、実装の特性です。ほとんどの言語では、すべてではないにしても、ほとんどの実装はどちらかのカテゴリに分類されるので、その言語もインタプリタ/コンパイラであると言えば少しは言葉を節約できるかもしれません。さらに、C言語のインタプリタや、PythonのサブセットをCやC++のコードに(そしてその後機械語に)コンパイルしようとするプロジェクトがあります。
第二に、コンパイルはネイティブの機械語コードへの先読みコンパイルに限定されるものではない。コンパイラとは、より一般的には、あるプログラミング言語のプログラムを別のプログラミング言語のプログラムに変換するプログラムのことです(重要な変換を施せば、同じ入力言語と出力言語を持つコンパイラを持つことも可能でしょう)。そして、JITコンパイラはネイティブの機械語にコンパイルする。 実行時 ベンチマークと比較する実装の質にもよりますが、)前倒しコンパイルに近い、あるいはそれ以上の速度が得られます。
しかし、小難しいことを言わずに、あなたが質問したかったことに答えると、実用上(ある程度人気があって成熟した実装を使って)、Pythonは
コンパイル
. 先に機械語にコンパイルされるのではなく(つまり、制限された間違った、しかし残念ながら一般的な定義によるコンパイル)、quot;only" にコンパイルされるのです。
バイトコード
しかし、それはコンパイルであり、少なくともいくつかの利点があります。例えば、次のような文があります。
a = b.c()
はバイトストリームにコンパイルされ、ディスアセンブルされると次のようになります。
load 0 (b); load_str 'c'; get_attr; call_function 0; store 1 (a)
. これは単純化したもので、実際にはもっと可読性が低く、もう少し低レベルです。
dis
モジュール
をクリックして、本物がどのようなものか見てみましょう。これを解釈する方が、上位の表現から解釈するよりも速い。
そのバイトコードは、参照実装(CPython)のように解釈されるか(直接解釈するのと、最初に何らかの中間表現にコンパイルしてそれを解釈するのとでは、理論的にも実際のパフォーマンス的にも違いがあることに注意してください)、あるいは、次のように解釈と実行時の最適化されたマシンコードへのコンパイルの両方が行われます。 PyPy .
関連
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Pythonが解釈される場合、.pycファイルとは何ですか?
-
[解決済み] PythonとCpythonの比較
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac