这三行Forth模块系统如何工作?

时间:2017-10-18 10:46:25

标签: module forth

我开始阅读Thinking Forth。在书中,作者提到了一个三线模块系统,其中提到了Forth会议的记录。 Here's a PDF containing a description of the module system从第14页开始,(132打印出来)。

以下是有关如何使用三个定义的字INTERNALEXTERNALMODULE的说明。

  

模块是INTERNAL和。之间的程序的一部分   模块。常量,变量和例程的定义   模块的本地写在INTERNAL和。之间   外部。在模块外部使用的定义是   写在EXTERNAL和MODULE之间。 [局部变量   例程]在INTERNAL和EXTERNAL之间定义。例行公事   引用它们是在EXTERNAL和MODULE之间定义的。

这是代码本身:

: INTERNAL ( --> ADDR) CURRENT @ @ ; 
: EXTERNAL ( --> ADDR) HERE ;
: MODULE( ADDRl ADDR2 --> )PFA LFA ! ; 

我正在读这本关于如何编写软件的想法,而不是如何在Forth的任何特定实现中编程,所以我不熟悉代码中使用的内置字,但是我很好奇这个模块系统。有人可以解释它是如何工作的吗?

1 个答案:

答案 0 :(得分:6)

我将改述描述。模块应如下所示:

INTERNAL
   ... code ...
EXTERNAL
   ... more code ...
MODULE

实现此模块系统的代码假定字典是传统的单链表。 INTERNAL保存指向当前单词的指针,例如在INTERNAL之前的那个。 EXTERNALEXTERNAL之后立即保存指向该单词的指针。 MODULE获取两个指针,并在EXTERNAL之后对单词的链接字段进行修补,以指向INTERNAL之前的单词。实际上,它会使字典跳过INTERNALEXTERNAL之间的所有字词。

这可能无法在现代Forth中使用,因为单词CURRENTPFALFA未标准化。而且,HERE可能不是下一个单词标题的正确地址。