Previous: , Up: Threading   [Contents][Index]


15.2.4 DOES>

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 ではこのアドレスがボディ内にあるためです(標準では違法です)。 しかしながら、 すべてのワードに対してコード・フィールドを大きくすることで、 この解決策は再び有効になります。 私たちはこのアプローチを採用しています。 ほとんどの場合、 セルを未使用のままにしておくのはちょっと無駄ですが、 私たちが対象としているマシンでは、 これはほとんど問題になりません。