スレッデッドコード
データスタックとリターンスタックを分離すると、スタック管理コードの大部分を排除でき、結果としてスレッデッドコードのサイズを大幅に縮小することができる。このスタックを2つ持つという方式は独自に3回発明されている(バロース B5000、Forth、PostScript)。また、Java仮想マシンでも使われている。
スレッデッドコードを実行する仮想機械は4つのレジスタを持つことが多い。サブルーチン(ワード)間でデータを渡すのにもう1つのレジスタを持つこともある。4つのレジスタは次の通りである。
ip または i - 仮想機械の命令ポインタ(そのVMを実装したハードウェアの持つプログラムカウンタとは異なる)
rp または r - リターンスタック(コールスタック)ポインタ
sp または s - パラメータスタックポインタ(ワード間でパラメータの受け渡しを行う)
w - ワークポインタ
スレッデッドコード対応の仮想機械の中核部分は非常に単純なことが多く、次の3つのプリミティブから構成される。
nest または docol
unnest または semi_s (;s)
next
間接スレッデッドコードの仮想機械では、それらはそれぞれ次の操作を行う。
これがおそらく最も単純で高速なインタプリタ、または仮想機械である。