interpreter and virtual machine : インタプリタと仮想機械
上智大学 伊藤 潔
2007年4月22日
プログラムの実行方法は二つに大別されます.コンパイラ方式とインタプリタ方式です.
コンパイラ方式では,完成したsource program 「ソースプログラム」をcompiler 「コンパイラ」により,syntactical
analysis 「文法解析」し,linker 「リンカ」などの処理を経て,machine language
「機械語」のプログラムへ変換して,それを実行します.C言語,Fortran,Cobolなどのプログラムは,この方式で実行されています.
インタプリタ方式では,interpreter
「インタプリタ」で,ソースプログラムを1文ずつその意味を解釈しながら,実行します.機械語に変換せずに模擬的に実行しています.Basic, Lisp,
Prolog,Javaなどのプログラムは,この方式で実行されています.インタプリタは,プログラムを1行ずつ解釈して実行していく言語プロセッサです.機械語によるobject
program 「オブジェクトプログラム」は生成しません.
プログラム文を1文ずつ機械語に変換していく方式が,インタプリタである,という説明が見受けられますが,それは,インタプリタの1つの実現方式です.多くの場合,インタプリタ方式では,機械語に変換することなく,ソースプログラムの解釈と実行をインタプリタというソフトウェアが模擬的に行う方式です.
この方式では,プログラム作成途中であっても,実行させて,その実行結果をinteractive
「対話的」に確認しながら行えるという利点があります.プログラムの誤りの修正が比較的容易
になるという利点です.しかし,毎回,解釈と模擬的実行を行うので,コンパイラ方式に比べて,実行速度が遅くなる,という欠点があります.
このため,インタプリタ方式でも,前もって,ソースプログラム全体を文法解析し,言語構成要素を識別し,intermediate language
「中間言語」のプログラムに変換する方式があります.この中間言語は,実際の機械語ではありません.インタプリタは,実際の機械ではそのままでは動かない,中間言語のプログラムを模擬的に実行します.
ここまで,模擬的に実行という言葉を使ってきました.Wという言語があって,Wで書かれたソースプログラムを解釈し模擬的に実行するインタプリタがあるとき,これを使う人にとっては,そのコンピュータが,どんな仕組みで,どんな機械語で動いているか知らなくても,Wという言語のレベルで,逐一解釈してくれる機械があるように見えます.
これは,W virtual machine という考え方になります.
virtual 「仮想的」の稿で述べたように,英語でのvirtualは,“仮想的 = 実質的”のニュアンスが強い言葉です.仮の想定と言いながら,「実質的にはそのもの」という感覚です.“virtual
XX”という言葉は,「表面的には,あるいは名目上はXXではないが,実質的にXX」ということになります.
W virtual machineという言葉は,実質的にWを実行するmachineということになります.あるコンピュータを,W virtual
machineにするためには,そのコンピュータのoperating system (OS)
「オペレーティングシステム」上で稼動できるW言語のインタプリタを作っておけばよいことになります.
先ほど述べたように,ソースプログラムを毎回逐次解釈するのは効率的でないため,これを中間言語のプログラムに変換するソフトウェアと,この中間言語のプログラムを実行するインタプリタを作っておく方式が行われます.Basicで採用されている方式です.例えば,Basicで,標準的な中間言語があり,これへの変換とその後のインタプリタをOS毎に作っておけば,それらのコンピュータは,”Basic”
virtual machineになります.
Java virtual machine (JVM)も同様です.中間言語は,JVMの機械語とみなすことができます.しかし,本当の機械語ではなく,あくまで,中間言語で書かれたプログラムは,インタプリタで実行されます.
source program | ソースプログラム | ||
compiler | コンパイラ | ||
syntactical analysis | 文法解析 | ||
linker | リンカ | ||
machine language | 機械語 | ||
interpreter | インタプリタ | ||
object program | オブジェクトプログラム | ||
interactive | 対話的 | ||
intermediate language | 中間言語 | ||
virtual machine | |||
virtual | 仮想的 | ||
Java virtual machine (Java VM) | |||
operating system (OS) | オペレーティングシステム | ||