基本情報技術者 2019年 春期 午前(科目A) 問19
問題文
インタプリタの説明として、適切なものはどれか。
選択肢
ア:原始プログラムを、解釈しながら実行するプログラムである。(正解)
イ:原始プログラムを、推論しながら翻訳するプログラムである。
ウ:原始プログラムを、目的プログラムに翻訳するプログラムである。
エ:実行可能なプログラムを、主記憶装置にロードするプログラムである。
🔒 解説は解答すると表示されます
インタプリタの動作原理【午前解説】
正解の理由
正解は ア です。インタプリタは原始プログラム(ソースコード)を行や文単位などで読み取り、その意味を解釈して即時に実行します。つまりソースを逐次「解釈しながら実行する」ことが本質で、訳語として最も適切なのが選択肢アです。
解法ステップ
- 各選択肢のキーワードを抽出:「解釈」「推論」「翻訳」「ロード」など。
- 用語の定義を思い出す:インタプリタ=解釈+実行、コンパイラ=翻訳(ソース→目的プログラム)、ローダ=実行ファイルを主記憶へ配置。
- キーワードと定義を照合して、最も一致する選択肢を選ぶ。矛盾する語句(推論、目的プログラム生成など)が含まれる選択肢は除外する。
選択肢別の誤答解説
- ア: 正解。原始プログラムを解釈しながら実行する点がインタプリタの定義に合致します。
- イ: 誤り。「推論しながら翻訳する」は曖昧で、インタプリタの定義ではありません。推論(inference)は通常、AIや論理エンジンの文脈で使われ、翻訳を行うプロセスとも異なります。
- ウ: 誤り。これはコンパイラの説明。原始プログラムを一括して目的プログラム(実行ファイルやオブジェクトコード)へ翻訳します。
- エ: 誤り。これはローダ(あるいはローダの一部機能)やOSの役割の説明で、インタプリタの説明ではありません。
よくある誤解
- 「翻訳する=インタプリタ」と誤解する人が多いが、翻訳(コンパイル)では一括して目的プログラムを生成する点が異なります。
- 「インタプリタは常に遅い」と決めつける誤解。実装によってはバイトコード化+JITで高速化する場合もあります。
- 「実行可能にする=インタプリタ」と考える誤解。実行可能ファイルを主記憶にロードするのはローダ(およびOSの役割)です。
補足コラム
- 実世界の例: Python(CPython)はソースをバイトコードに変換し、そのバイトコードを仮想機械が解釈実行します。JavaはソースをバイトコードへコンパイルしJVMが解釈(+JIT)します。Cは典型的にコンパイラでネイティブコードを生成します。
- ハイブリッド方式: 現代の実装では「コンパイル→実行(バイトコード化)」や「インタプリタ+JIT」の組合せがよく使われ、単純な二分論では説明できない場合があります。
- ローダとリンカ: ローダは実行ファイルを主記憶に配置し、リンカは複数のオブジェクトを結合して参照を解決します。これらはインタプリタとは別の役割です。
FAQ
Q1: Pythonはインタプリタ言語ですか?
A1: 一般的にはインタプリタ言語と呼ばれますが、CPythonは一度バイトコードに変換してからそのバイトコードを仮想機械が解釈実行します。実装によってはJITを使うものもあります。
A1: 一般的にはインタプリタ言語と呼ばれますが、CPythonは一度バイトコードに変換してからそのバイトコードを仮想機械が解釈実行します。実装によってはJITを使うものもあります。
Q2: インタプリタの利点と欠点は何ですか?
A2: 利点は即時実行とデバッグの容易さ、移植性の高さ。欠点は単純実装だと実行速度が遅くなる可能性がある点です。
A2: 利点は即時実行とデバッグの容易さ、移植性の高さ。欠点は単純実装だと実行速度が遅くなる可能性がある点です。
Q3: コンパイラとインタプリタは両方使われることがありますか?
A3: はい。先にソースをバイトコードにコンパイルし、そのバイトコードをインタプリタやJITで実行するハイブリッド方式が一般的です。
A3: はい。先にソースをバイトコードにコンパイルし、そのバイトコードをインタプリタやJITで実行するハイブリッド方式が一般的です。
関連キーワード: インタプリタ、コンパイラ、ローダ、バイトコード、JIT、逐次実行、翻訳、実行環境

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

