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

Rya*_*729 3 module forth

我开始阅读Thinking Forth.在书中,作者提到了一个三线模块系统,其中提到了Forth会议的记录.这是一个PDF,其中包含从第14页开始的模块系统的描述(打印时为132).

这是关于如何使用三个定义的单词的说明INTERNAL,EXTERNAL以及MODULE.

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

这是代码本身:

: INTERNAL ( --> ADDR) CURRENT @ @ ; 
: EXTERNAL ( --> ADDR) HERE ;
: MODULE( ADDRl ADDR2 --> )PFA LFA ! ; 
Run Code Online (Sandbox Code Playgroud)

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

Lar*_*off 6

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

INTERNAL
   ... code ...
EXTERNAL
   ... more code ...
MODULE
Run Code Online (Sandbox Code Playgroud)

用于实现该模块系统的代码假定字典是传统的单链表. INTERNAL保存指向当前单词的指针,例如前一个单词INTERNAL. EXTERNAL在之后保存指向单词的指针EXTERNAL. MODULE取两个指针,然后将单词的链接字段修补EXTERNAL为指向之前的单词INTERNAL.实际上,它使得字典跳过所有单词之间INTERNALEXTERNAL.

这可能不是一个现代的第四工作,因为词CURRENT,PFALFA不规范.而且,HERE可能不是下一个单词标题的正确地址.

  • 在现代的Forth系统中,一种可能的方法是编译成不同的单词列表并相应地改变搜索顺序,如[Ulrich Hoffmann的[modules-package](https://theforth.net/package/modules/current-view/modules. FS) (2认同)