インタプリタ
また日本においても、パンチカードを入力としてパッチパネルの配線によるプログラミングで処理するような機械で、配線によってある種のインタプリタのようなものを実装し、パンチカードの内容をデータとしてではなくプログラムのように扱う、というような例があると言われている。
最初の Lisp インタプリタはスティーブ・ラッセルが IBM 704 上に実装した。これにはエピソードがあり、ジョン・マッカーシーが「Lisp の論文」で「数学的」に示したものだったのであるが、マッカーシー自身は実装できるものだとは考えていなかった。それを、論文を読んだ、院生であったラッセルが、実装可能だと言って数学的な記述から変換して機械語で実装してみせたという。
1960年代には(現在のJavaなどと同様な)、プログラミング言語から中間表現にコンパイルし、それをインタプリタで実行する、というような手法も一般的になった(pコードマシンを参照)。
AOTコンパイラ方式では事前に生成された機械語実行ファイルがユーザーに配布される。機械語はプロセッサアーキテクチャに依存するため、このバイナリは特定のプロセッサでしか動作しない(可搬性が低い)。
一方インタプリタ形式ではソースコードとインタプリタが配布される。インタプリタは機械語実行ファイルであるため環境に依存するが、ソースコードには環境に依存しない言語を採用できる。その場合環境に合わせたインタプリタを事前配布しておけば、アーキテクチャに依存しないプログラムの配布が可能である(可搬性が高い)。またインタプリタの代わりにJITコンパイラを用いても同様の利点が得られる。同一動作の保証はインタプリタ実装に依存しており(JITであればコンパイラ)、互換性バグの例として表計算マクロやWebページ(HTML)が挙げられる。
AOTコンパイラ方式では1つのバイナリを実行するだけでプログラムが機能する。一方インタプリタ方式では、まずインタプリタをインストールしその上でソースコードを動かす必要がある。その結果全体のプログラムサイズが大きくなり、ユーザーの手間が増える場合がある(複雑性が高い)。またJITコンパイル方式でも同様の複雑性が生まれる。