我开始阅读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的任何特定实现中编程,所以我不熟悉代码中使用的内置字,但我是对这个模块系统很好奇.有人能解释它是如何工作的吗?
我将改述描述.模块应如下所示:
INTERNAL
... code ...
EXTERNAL
... more code ...
MODULE
Run Code Online (Sandbox Code Playgroud)
用于实现该模块系统的代码假定字典是传统的单链表. INTERNAL保存指向当前单词的指针,例如前一个单词INTERNAL. EXTERNAL在之后保存指向单词的指针EXTERNAL. MODULE取两个指针,然后将单词的链接字段修补EXTERNAL为指向之前的单词INTERNAL.实际上,它使得字典跳过所有单词之间INTERNAL和EXTERNAL.
这可能不是一个现代的第四工作,因为词CURRENT,PFA和LFA不规范.而且,HERE可能不是下一个单词标题的正确地址.