FE EXAM

インタプリタ(逐次実行のしくみ)

ソースコードを1行ずつ解釈しながら、その場で実行していくプログラム。

INTERACTIVE VISUALIZATION
解釈中
実行中
エラー
処理中の行
動作
1行ずつ
実行ファイル
作らない
シナリオ
ステップ1 / 8
STEP 1/8実行の前まだ実行していない状態です。インタプリタは、このソースコードを一括翻訳して実行ファイルを作るのではなく、上から1行ずつ「解釈→実行」を繰り返していきます。実行ファイルは作りません。
1x = 52print(x)3print(y)4print("end")
コンソール出力
(まだ出力はありません)
解説

📌
インタプリタとは

1行ずつ「解釈 → 実行」を繰り返す1行目解釈実行2行目解釈実行3行目解釈実行

インタプリタとは、ソースコードを1行ずつ解釈しながら、その場で実行していくプログラムです。コンパイラのように全体を事前に翻訳して実行ファイルを作ることはせず、上から順に「読んで、すぐ動かす」を繰り返します。

身近な例で考えると、同時通訳に似ています。話し手の言葉を1文ずつその場で訳して相手に伝える──全文が終わるのを待たずに、文ごとにすぐ伝わるのがインタプリタの動き方です。

上のツールで▶ボタンを押すと、ソースコードが1行ずつ「解釈→実行」され、途中で未定義の変数に出会ってエラーが発生し、そこで止まる様子を確認できます。

🔁
逐次実行の仕組み

インタプリタの動作は、次の流れを1命令ずつ繰り返すだけのシンプルなものです。
① 解釈:いま見ている行が何をする命令かを読み取る
② 実行:解釈した内容をその場で実行し、必要なら結果を出力する
③ 次の行へ:1行終えたら、すぐ次の行に進んで①に戻る

重要なのは、実行ファイルを作らないという点です。翻訳済みのファイルを残すのではなく、動かすたびにその場で解釈します。そのため、書いたコードをすぐ試せて、対話的に動かせるのが強みです。

エラーの出方にも特徴があります。1行ずつ進むため、エラーのある行に実際に到達して初めて止まります。上のツールでは3行目の未定義変数でエラーが出てそこで停止し、4行目は実行されません。それより前の行(1〜2行目)はすでに実行済みになっている点に注目してください。

⚖️
コンパイラとの違い

インタプリタは起動が速く、対話的に動かせて、移植しやすい(=別の環境でも同じソースで動かしやすい)という長所があります。その代わり、毎回ソースを解釈し直すため実行は遅めです。一方コンパイラは事前に一括翻訳しておくので、実行が速いのが長所です。

項目インタプリタコンパイラ
翻訳のしかた1行ずつ解釈実行事前に一括翻訳
実行ファイル作らない作る
実行速度遅め速い
得意なこと起動の速さ・移植性・対話実行性能

インタプリタ方式で動く代表的な言語には PythonRubyJavaScript などがあります。書いてすぐ試せる手軽さから、学習用やWeb開発で広く使われています。

📌
なぜインタプリタは実行が遅いのか

同じ行を10回ループする場合解釈(1回目)実行解釈(2回目)実行(同じことを10回繰り返す)コンパイラなら翻訳済みを10回そのまま実行毎回の「解釈」が積み重なって遅くなる

インタプリタの実行が遅い根本的な理由は、同じ命令でも実行するたびに毎回解釈し直すからです。

たとえば同じ処理を10回繰り返すループ(=同じ命令を何度も実行する構造)があるとき、インタプリタは同じ行を10回それぞれ「これは何をする命令か?」と解釈してから実行します。コンパイラであれば事前に一度だけ翻訳しておき、あとは翻訳済みの命令を10回実行するだけです。
インタプリタ:解釈×10回 + 実行×10回
コンパイラ:解釈×1回(コンパイル時) + 実行×10回

身近な例で言うと、同時通訳(インタプリタ)は毎回その場で訳すため、翻訳版の本(コンパイラ)をそのまま読むより時間がかかるのと同じ理屈です。ループ回数が多いプログラムほど差が大きくなるため、速さが求められる処理にはコンパイル方式が向いています

📌
逐次実行とエラーの出方の違い

インタプリタ1行目2行目3行目(エラー)4行目3行目で止まる。1〜2行目は実行済みコンパイラ全体をチェックエラーがあれば翻訳自体が失敗1行も実行されない

インタプリタとコンパイラではエラーの出方が大きく異なります。これは「いつ翻訳するか」の違いから来ています。

インタプリタの場合:1行ずつ実行するため、エラーのある行に到達して初めてエラーになります。それより前の行はすでに実行済みです。「3行目にエラーがあっても、1・2行目は実行された」というのがインタプリタの特徴です。

コンパイラの場合:実行前に全体を翻訳するため、エラーが見つかると翻訳自体が失敗します。実行ファイルが作られないので1行も実行されません。ただし、エラーをまとめて事前に把握できる利点があります。

どちらが良いかは用途次第です。「書いてすぐ試せる・途中まで動かせる」のがインタプリタの強み「実行前にまとめてエラーを発見できる」のがコンパイラの強み、と覚えておくと整理しやすいです。

練習問題

🎯
基本情報技術者 練習問題

Q1.インタプリタの説明として最も適切なものはどれか。
A.ソースコード全体を一括翻訳して実行ファイルを作る
B.ソースコードを1行ずつ解釈しながら、その場で実行する
C.アセンブリ言語を機械語に変換する
D.機械語をアセンブリ言語に逆変換する
Q2.インタプリタの逐次実行の特徴として正しいものはどれか。
A.実行ファイルを生成してから動かす
B.1命令ずつ「解釈→実行」を繰り返し、実行ファイルは作らない
C.すべての行を同時に並行して実行する
D.エラーがあると最初の行も実行されない
Q3.インタプリタとコンパイラの違いとして正しいものはどれか。
A.インタプリタは起動が速く対話的だが実行が遅め、コンパイラは事前翻訳で実行が速い
B.インタプリタは実行が速く、コンパイラは実行が遅い
C.どちらも実行ファイルを必ず作る
D.インタプリタはアセンブリ言語専用である

関連コンテンツ