【いんたぷりた】

インタプリタ とは?

最終更新:
💡 命令を読み取り、処理を進める「通訳役」

プログラムのコードや中間命令を解釈して、その処理を実行するソフトウェア。ソースを1行ずつ機械語に翻訳するとは限らず、コンパイラと組み合わせる処理系もある。

📌 このページのポイント
変換と実行は、組み合わせられる ソース x = 1 + 2 print(x) 📄 コード コンパイラ 中間命令へ 変換 ⚙ バイトコード インタプリタ 命令を解釈 して実行 ▶ 結果:3 CPythonでの処理を簡略化した例 ソースの1行 = 実行命令1つ、ではない JITを組み合わせる処理系もある
CPythonの基本的な流れの模式図。矢印は処理の順序。コンパイル後の中間命令をインタプリタが実行する例で、すべての処理系の構成や速度を示すものではない。
ひよこ ひよこ
インタプリタはコンパイラと何が違うの?
ペンギン先生 ペンギン先生
コンパイラはコードを別の形式へ変換するソフト、インタプリタはコードや命令を解釈して実行するソフトだよ。変換と実行という役割の違いで、同じ処理系で両方を使うこともあるんだ。
ひよこ ひよこ
コードを1行ずつ読むんじゃないの?
ペンギン先生 ペンギン先生
必ずそうではないよ。繰り返しや関数呼び出しがあるし、複数行で1つの処理を書くこともある。インタプリタが扱う命令と、ソースの行を同じものとして考えないんだ。
ひよこ ひよこ
Pythonもコンパイルするの?
ペンギン先生 ペンギン先生
代表的な実装のCPythonは、ソースをバイトコードという中間命令へコンパイルするよ。その命令をインタプリタが実行する。利用者が事前に実行ファイルを作らなくても、内部で変換が起きるんだ。
ひよこ ひよこ
JavaScriptではどうなっているの?
ペンギン先生 ペンギン先生
V8という処理系にはIgnitionというインタプリタがあるよ。バイトコードを実行し、実行中の情報を使うJITコンパイラとも組み合わせる。JavaScriptのすべての処理系が同じ構成、というわけではないんだ。
ひよこ ひよこ
インタプリタなら必ず遅いの?
ペンギン先生 ペンギン先生
速さは処理系、コード、最適化や実行条件によるよ。書いて試しやすい環境はあるけれど、言語名だけで速度を決めつけず、必要な処理で確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「インタプリタ」って出てきたら「コードや命令を解釈して実行するソフト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Interpreter」 = 通訳者・解釈者
💬 命令を解釈して処理を進める役割を「通訳者」にたとえた名前だよ。必ずソースを1行ずつ機械語へ翻訳する、という意味ではないんだ

参考資料

← 用語集にもどる