共通の工夫
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/16 19:11 UTC 版)
データスタックとリターンスタックを分離すると、スタック管理コードの大部分を排除でき、結果としてスレッデッドコードのサイズを大幅に縮小することができる。このスタックを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 間接スレッデッドコードの仮想機械では、それらはそれぞれ次の操作を行う。 next: (ip)+ -> w ; jmp (w)+nest: ip -> -(rp) ; w -> ip ; nextunnest: (rp)+ -> ip ; next これがおそらく最も単純で高速なインタプリタ、または仮想機械である。
※この「共通の工夫」の解説は、「スレッデッドコード」の解説の一部です。
「共通の工夫」を含む「スレッデッドコード」の記事については、「スレッデッドコード」の概要を参照ください。
- 共通の工夫のページへのリンク