我已经开始阅读思考。在书中,作者提到了一个三行模块系统,并参考了第四次会议的会议记录。这是一个PDF,包含模块系统的描述,从第14页开始(打印132页)。
以下是关于如何使用定义的三个单词INTERNAL
、EXTERNAL
和MODULE
的说明。
模块是程序的一部分,位于单词INTERNAL和模块。常量、变量和例程的定义模块的local写在单词INTERNAL和外部。模块外使用的定义如下写在单词EXTERNAL和MODULE之间。[的局部变量routine]在INTERNAL和EXTERNAL之间定义。例行程序引用它们是在EXTERNAL和MODULE之间定义的。
这是代码本身:
: INTERNAL ( --> ADDR) CURRENT @ @ ;
: EXTERNAL ( --> ADDR) HERE ;
: MODULE( ADDRl ADDR2 --> )PFA LFA ! ;
我读这本书是为了了解如何编写一般软件,而不是如何在Forth的任何特定实现中编程,所以我不熟悉代码中使用的内置单词,但我对这个模块系统很好奇。有人能解释一下它是如何工作的吗?
我将重新表述描述。一个模块应该是这样的:
INTERNAL
... code ...
EXTERNAL
... more code ...
MODULE
实现该模块系统的代码假定字典是传统的单链表。INTERNAL
保存指向当前单词的指针,例如正好在INTERNAL
之前的单词。CCD_ 6在CCD_。MODULE
取两个指针,并将EXTERNAL
之后的单词的链接字段补丁为指向INTERNAL
之前的单词。实际上,它使字典跳过INTERNAL
和EXTERNAL
之间的所有单词。
这在现代福斯可能不起作用,因为单词CURRENT
、PFA
和LFA
没有标准化。而且,HERE
可能不是下一个字的报头的正确地址。