インタプリタ
ディスパッチ(英: dispatch)は仮想命令に基づいた命令ボディから命令ボディへの制御移行メカニズムである。ディスパッチの最もシンプルな例はSwitch文(Jump命令)である。ある仮想命令の実行後、次の仮想命令に対応する命令ボディへ制御を移す(Jumpする)ことでその仮想命令実装が実行される。
インタプリタ用コード(高級言語コードあるいはバイトコード)は機械語バイナリより容易に解読できる(可読性が高い)。ゆえに配布後のデバッグや修正が容易な一方、知的財産保護上の問題を起こしうる。そのための暗号化・難読化を考慮した言語・システムが存在する。またJITコンパイル方式でも同様の可読性に関する特性が現れる。
プログラム開発中、プログラマは頻繁にソースコードに手を加える。コンパイラの場合、ソースコードを変更するたびにコンパイルし、リンクして実行ファイルを完成させないと、そのプログラムを実行できない。プログラムが大きくなると、ビルドの完了を待っている時間が長くなる。一方、インタプリタではソースコードをそのまま実行するか中間表現に変換するだけなので、ほとんど待つ必要がなく、修正がうまくいったかどうかのテストをより素早く確認できる。
この特性を利用したプログラムとしてREPLがある。入力を受け取る(Read)、入力の評価(Eval)、評価結果を提示する(Print)を繰り返す(Loop)、テスト環境の一つである。評価はインタプリタに限らずコンパイラで行なわれるかもしれないが、ユーザからの入力は常にソースコードの断片であり、それを逐次実行するという点で一種のインタプリタということもできる。実際、その挙動はソースコードを指定せずに起動したBASICなどのそれとよく似ている。しかし、テスト環境も兼ねているため、エラーが起きた場合のメッセージが詳細であることが多い。関数型言語や論理型言語では、通常は機械語にコンパイルする処理系であっても用意される。
インタプリタとコンパイラの境界をさらにぼやけさせる方式として、中間表現を実行時コンパイラ (JIT) でコンパイルし、実行時にネイティブの機械語にコンパイルする技法がある。これはネイティブなコードの実行効率を実現する代わり、ASTやバイトコードを最初にコンパイルする際に起動時間やメモリ使用量が増大するという欠点がある。これを補う技法として適応的最適化(英語版)があり、インタプリタが実行中のプログラムを性能解析して最も頻繁に実行される部分をネイティブのコードにコンパイルする。これらの技法は1980年代の Smalltalk などの言語で使われ始めた。
実行時コンパイルは近年多くの言語処理系で採用されており、Java、.NET Framework、最近のJavaScript の実装でも JIT が採用されている。