|
インタプリタ()とは、プログラミング言語で書かれたソースコードないし中間表現にある命令列を逐次解釈しながらするプログラムのこと。 == 概要 == インタプリタは、およそ次のいずれかの動作をするプログラムである。 # ソースコードを直接実行する。 # ソースコードを何らかの効率的な中間表現に変換しながら実行する。 # システムの一部であるコンパイラが生成し出力した、コンパイル済みの中間表現を実行する〔この意味では、CPUは機械語インタプリタであると見ることができる。〕。ソースプログラムはマシンに依存しない中間的なコードに事前にコンパイルされ、実行時にリンクされ、インタプリタで実行される。 や 、マイクロコンピュータの は1の例である。、、、 は2の例、 や などは3の例である。 もともとは、プログラミング言語処理系の実装には、インタプリタとコンパイラの2つがある、とされてきた。インタプリタはを行うが、コンパイラはを行わない、という差がある。 もともとは、インタプリタはプログラム文を1文ずつ機械語に変換していく(単純な)方式が一般的であった。 この時代のインタプリタの長所と欠点については、およそ次のような解説がされることが一般的であった。 *(長所)プログラムを作成している途中でも、とりあえず書かれた箇所まで実行させることができ、プログラマの期待通りの動作をしている場合も、期待通りの動作をしていない場合も、早期にそれを確認・発見し、そして修正後すばやく実行、再確認できる。 *(短所)実行速度が遅い。(ループ(=繰り返し)の箇所などでは)1度構文解釈した文でも、毎回(あらためて、最初から)解釈と実行を行うので、コンパイラ方式に比べて実行速度が遅くなる。(ループを全く含まないような、全ての命令が一回だけ解釈され、一回だけ実行されるような(ある意味、特殊な)プログラムであれば、解釈+実行のトータルの時間は、インタプリタでもコンパイラでもさほど差は生じない。だが、実用的なプログラムは一般的に、多数のループを含んでおり、そうしたプログラムではインタプリタのほうが実行を完了するまでの時間が多くかかり、特に、ループ回数が多ければ多いほど(古典的な、単純な)インタプリタの相対的な遅さは顕著になってくる。→#インタプリタの長所と短所 その後、そうした欠点を解消すべく、(1990年代ころになって)毎回毎回、(高級言語から)機械語に変換するのではなく、中間言語に変換することで高速化をはかるインタプリタなどが作りだされた。 改良の結果、古典的な意味での「インタープリタ」と「コンパイラ」の双方の性質を備えたようなインタープリタが登場し、複雑化してきている。 (近年の)インタプリタがおこなう、(旧来の)コンパイラが行っているような変換のひとつとしては、高速化などを目的とした、実行時コンパイラによる動的コンパイルを挙げることができる。 〔現在では、「インタープリタ / コンパイラ」という区分に関しては状況が変わっており、に言わせると『だが、それらは必ずしも相互排他的に2つに分類できるわけではない。なぜなら多くのインタプリタ方式の処理系は、コンパイラが行っているような変換も内部で行っているからだ。」とも言われ、『「インタプリタ言語」あるいは「コンパイラ言語」といった呼称も見掛けることがあるが、これらは単にその言語の規範的実装がインタプリタかコンパイラかを示しているに過ぎない(実際、詳しく調べれば、実験的な程度の実装まで含めれば両方ともあるということも多い)。』という見解も出てくることになる。高水準言語は基本的に抽象であり、(理想的には)特定の実装からは独立している。しかし、動的プログラミング言語のようにインタプリタでの実装が向いている方向性の言語、あるいはその逆もあるということは確かである。 〕 〔(比較的若い研究者である)伊藤は(インタープリタの発展史には言及せず)個人的なウェブページで次のように書きこんだ。「インタプリタはプログラムを逐次機械語に変換して実行する、という説明を仄聞するが、正しくない」と(伊藤 潔、 : インタプリタと仮想機械 、2007年4月22日)。(現在では)そのような動作は動的コンパイルであり、それを行うインタプリタもあるが、全てのインタプリタがそのような動作をおこなうわけではないので、インタプリタ全部の説明とは言えない。また同様に「インタプリタは中間言語に変換してそれを実行する」という説明も、インタプリタ全部の説明とはいえない。結局、さまざまなタイプのインタープリタが存在している(存在してきた歴史がある)ので、これに関しては、一般論が困難な状態になってしまっているのである。〕 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「インタプリタ」の詳細全文を読む スポンサード リンク
|