2017-10-18 61 views
3

我已經開始閱讀Thinking Forth。在這本書中,作者提到了一個三行模塊系統,並參考了Forth會議的會議記錄。從第14頁開始的Here's a PDF containing a description of the module system,(打印132)。這三行Forth模塊系統是如何工作的?

下面是如何使用三個定義的詞INTERNAL,EXTERNALMODULE的說明。

模塊是單詞INTERNAL和 MODULE之間的程序的一部分。常量,變量和例程的定義是模塊本地的 寫在INTERNAL和EXTERNAL之間。在模塊外部使用的定義是在外部和模塊之間寫入的 。 [局部變量 例程]在INTERNAL和EXTERNAL之間定義。 引用它們的例程在EXTERNAL和MODULE之間定義。

而這裏的代碼本身:

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

我在讀這本書的有關如何在一般的寫軟件的想法,而不是如何在任何特定的實現的第四方案,所以我我不熟悉代碼中使用的內置單詞,但我對這個模塊系統很好奇。有人可以解釋它的工作原理嗎?

回答

5

我將重新描述說明。模塊應該是這樣的:

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

實現該模塊的系統中的代碼假定該詞典是傳統的單向鏈表。 INTERNAL保存一個指向當前單詞的指針,例如在INTERNAL之前。 EXTERNALEXTERNAL之後保存一個指向該單詞的指針。 MODULE需要兩個指針,並且在EXTERNAL之後修補該單詞的鏈接字段以指向INTERNAL之前的單詞。實際上,它使字典跳過INTERNALEXTERNAL之間的所有單詞。

這可能不適用於現代Forth,因爲文字CURRENT,PFALFA未標準化。而且,HERE可能不是下一個單詞標題的正確地址。

+1

在現代的Forth系統中,一種可能的方法是編譯成不同的單詞列表並相應地改變搜索順序,如[Ulrich Hoffmann的模塊包](https://theforth.net/package/modules/current-view /modules.fs) – fiz