インタプリタ

出典: Wikipedio


Template:Redirect インタプリタ(interpreter)とは、プログラミング言語で書かれたソースコードを逐次解釈しながら実行する処理系(ソフトウェア)の実装手法のこと。プログラムの実行に主としてインタプリタ型の処理系が用いられるプログラミング言語をインタプリタ言語と呼ぶ。同じく解釈を行なうコンパイラと対比される。

目次

定義

以下の擬似コードの形で実装される処理系を指す。

<syntaxhighlight lang="Java"> while (true) {

 switch (実行する命令) {
   case 命令1:
     命令1の処理
   case 命令2:
     命令2の処理
 }

} </syntaxhighlight>

特徴

以下の特徴を持つ。

  1. 処理速度がコンパイラ方式よりも遅い。
  2. コンパイラ方式よりも実装コストが小さい。

インタプリタ方式が速度が遅くなる、最大の原因は一命令ごとにswitch文を実行することにある。現代のCPUパイプライン方式を採用しており、命令の先読みが可能でないと、実行速度が著しく低下する。switch文の場所が命令の先読みが不可能であるため、インタプリタ方式は遅くなる。インタプリタ方式で実装された処理系を高速化(最適化)するための、最初にとられるステップがswitch文を廃止し、コンパイラ方式に切り替えることである。それゆえ、実装不可能というわけではないが、効果が薄いため、インタプリタ方式で実装する場合は、一般には、制御フロー解析静的単一代入などを使った、複数の命令を超えての最適化が実装されないことが多い。

ほぼ全てのプログラミング言語が、インタプリタ方式でもコンパイラ方式でもどちらでも実装可能である。しかしながら、変数に型を持たないスクリプト言語では、高速に動作することがあまり期待されていなく、JavaScriptLuaなどをのぞいて、多くの物が実装の容易なインタプリタ方式で実装されている。

また、最近の処理系では、Java.NET Frameworkなど、JITコンパイラを利用している物の中で、起動時にコンパイルすると起動が遅くなるため、まず、最初にインタプリタで動かし、バックグラウンドでコンパイルして、コンパイルが完了してから、そちらに切り替える、併用型もある。

処理系の開発において、まず初めに実装の容易なインタプリタで実装してから、コンパイラに切り替えることも多い。例えば、Javaは、最初のJDK 1.0はインタプリタで、JDK 1.1からJITコンパイラを搭載している。Adobe FlashはFlash 8まではインタプリタであったが、Flash 9からJITコンパイラになった。JavaScriptも、1995年の登場当初から長いことインタプリタでの実装が主流であったが、2009年頃からJITコンパイラが増えた。

バイトコードインタプリタ

ソースコードを実行可能な形にするには、まず、ソースコードを構文木に変換する必要がある。構文木のまま、インタプリタ型の処理系で実行する処理系もあるが、構文木をさらに、中間コード(オペコード、バイトコードなど)に変換してから実行する物もある。Java.NET Frameworkのように、中間コードを仕様として公開している物もあるし、仕様としては公開せずに、処理系内部だけで使用されている場合もある。JITコンパイラは、この中間コードから、CPUなどの命令に変換する。

デバッグ、教育用インタプリタ

通常C言語はコンパイラで処理されるが、デバッグ目的および教育目的のインタプリタ型のC言語の処理系もある。MS-DOS時代に、いくつかの製品が提供されていた。C-Terpなどがその様な製品の例である。C/C++のインタプリタはほかにCINTChがある。

インタプリタ型の処理系が一般的なプログラミング言語

インタプリタとコンパイラ方式が併用の物

インタプリタもコンパイラもどちらもよく使われる物

関連項目

bs:Interpreter ca:Intèrpret (informàtica) cs:Interpret (software) da:Fortolker de:Interpreter el:Διερμηνέας (υπολογιστές) en:Interpreter (computing) es:Intérprete (informática) et:Interpretaator eu:Interpretatzaile fa:مفسر (رایانه) fi:Ohjelmointikielen tulkki fr:Interprète (informatique) he:מפרש (תוכנה) hr:Interpreter hu:Értelmező is:Túlkur (tölvunarfræði) it:Interprete (informatica) ko:인터프리터 lt:Interpretatorius ms:Pentafsir (pengkomputan) nl:Interpreter pl:Interpreter (program komputerowy) pt:Interpretador ro:Interpretor ru:Интерпретатор simple:Interpreter (computing) sk:Interpreter (programovanie) sl:Interpreter sr:Интерпретатор sv:Interpretator th:อินเทอร์พรีเตอร์ tr:Yorumlayıcı uk:Інтерпретатор vi:Trình thông dịch zh:直譯器

個人用ツール