Forth エンジンの最も複雑な部分の 1 つは dodoes
です。つまり、 CREATE
...DOES>
ペアで定義されたすべてのワードによって実行されるコードの塊(chunk)です。 実際のところプリミティブ指向のコードでは、
CREATE
...DOES>
ペアで定義されたすべてのワードによって実行されるコードの塊(chunk)は、 ワードの xt
が execute
された場合にのみ必要です。 ここでの主な問題は、 実行される Forth コード、 つまり DOES>
の後のコード(the DOES>
-code) をどのようにして見つけるかということです。 この解決策は 2 つあります:
fig-Forth では、 コード・フィールドは dodoes
を直接指しており、 DOES>
コード・アドレスはコード・アドレスの後のセル(つまり CFA cell+
)に格納されます。 この解決策は、 Forth-79
以降のすべての標準では違法であるように見えるかもしれません。 fig-Forth ではこのアドレスがボディ内にあるためです(標準では違法です)。
しかしながら、 すべてのワードに対してコード・フィールドを大きくすることで、 この解決策は再び有効になります。 私たちはこのアプローチを採用しています。
ほとんどの場合、 セルを未使用のままにしておくのはちょっと無駄ですが、 私たちが対象としているマシンでは、 これはほとんど問題になりません。