【読んだもの】Pythonは逐一解釈されるのか、それともコンパイルされるのか?(答えはどちらも)イエスだ。Blog2018-04-01【読んだもの】Pythonは逐一解釈されるのか、それともコンパイルされるのか?(答えはどちらも)イエスだ。Yes.人々はコンパイル言語かインタプリタ(逐一解釈)言語か、という二分法にこだわる傾向があるが、現代の言語処理系はそんなに単純じゃないよね、という話。ここで「コンパイル」はソースコードを機械語(CPU命令セットの集まり)に変換すること、「インタプリタ」はソースから一度に一行読み込んではプログラムを実行するモノ。この単純な定義のもとタイトルのような質問が行われる、とされている。Pythonにおいてはソースコードはバイトコードに変換される。バイトコードの見かけはCPU命令セットのようだが、実際の実行は仮想マシン(VM)によって行われるという点で異なる(仮想マシンはOS全体の機能をエミュレートせず、単純化したCPU命令実行環境を与えていると考えられる)。(Pythonではdisモジュールを使うとバイトコードを眺めることができる。byterunというPythonで書かれたバイトコードを実行するVMが存在する。これは教育目的だがソースを読んでみると面白いかもしれない。)バイトコードに変換する言語といえばJavaがある。Javaがコンパイル言語、Pythonがインタプリタ言語と区別されるのはなにゆえか。Pythonではバイトコードへの変換は暗黙的に行われ、ユーザーがコンパイラを直接呼び出すことはなく、.py拡張子のファイルが単純に実行される。Javaはユーザーが明示的にコンパイラを呼び出し、ソースコードをクラスファイルにコンパイルする。あとPythonの特徴としてREPLがあるというのがある。これは「コンパイルされる」言語にはあまりない特徴である。REPLでも暗黙的にバイトコードへの変換・実行が行われており、この暗黙性がPythonを「インタプリタ」たらしめている。JavaやCのような「コンパイルされる」言語がREPLを持てないのかというとそんなことはない。Javaはもともとバイトコードに変換する方法を取っていたが、いまはJust-In-Time(JIT)な手法で実行時に機械語にコンパイルできる。このように考えると、コンパイル言語とインタプリタ言語の区別というのはもろいものであるように感じられる。一つ留意すべきことは、プログラムがどのように実行されるかというのは、単に実装の話であって、プログラミング言語の特徴ではないということだ。上記のPythonに関する話はCPythonについてであり、たとえばPyPyのようなJITコンパイルされる方式の言語処理系も存在するわけである。いうわけでPythonが逐一解釈されるのかコンパイルされるのか?という疑問については、どちらもイエス。世界はもっと複雑なものなのだ...という結論に落ち着く。13:10【読んだもの】Pythonは逐一解釈されるのか、それともコンパイルされるのか?(答えはどちらも)イエスだ。Tweet広告を非表示にする関連記事2017-09-15Pythonはなぜこれほどまでに速く成長しているのか前文のみ(翻訳でもない)。上からレスを見てメモしてくだけ。»プロフィールコメントは常に歓迎します。`ssize_t`とは何か2018-04-01【読んだもの】Pythonは逐一解釈されるのか、それともコンパイルされるのか?(答えはどちらも)イエスだ。(6)はてなブログをはじめよう!cofreeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。