2017-10-18 7 views
3

私はThinking Forthを読み始めました。本書では、Forthカンファレンスの議事録を参照して3行のモジュールシステムを記述しています。 Here's a PDF containing a description of the module system、14ページから始まります(132は印刷されています)。この3行のForthモジュールシステムはどのように機能しますか?

ここでは、3つの定義された単語INTERNAL,EXTERNALおよびMODULEを使用する方法について説明します。

モジュールは、単語INTERNALと モジュールとの間でプログラムの一部です。モジュールにローカルである である定数、変数およびルーチンの定義は、INTERNALと EXTERNALの間に書き込まれます。モジュール外で使用される定義は、EXTERNALとMODULEの間に書かれた です。 [ ルーチンのローカル変数]は、INTERNALとEXTERNALの間で定義されます。 が参照するルーチンは、EXTERNALとMODULEの間で定義されています。

そしてここでは、コードそのものです:

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

私はむしろフォースのいずれかの特定の実装にプログラムする方法よりも、一般的にソフトウェアを書く方法についてのアイデアを本を読んでいたので、私コードで使用されている組み込みの単語に精通していませんが、私はこのモジュールシステムについて興味があります。誰かがそれがどのように動作するか説明できますか?

答えて

5

私は説明を言います。モジュールは次のようになります。

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

このモジュールシステムを実装するためのコードは、辞書が従来の単独リンクリストであることを前提としています。 INTERNALは現在の単語へのポインタを保存します。 INTERNALの直前です。 EXTERNALは、EXTERNALの直後の単語へのポインタを保存します。 MODULEは2つのポインタをとり、EXTERNALの後の単語のリンクフィールドをINTERNALの前の単語を指すようにパッチします。実際には、INTERNALEXTERNALの間のすべての単語に辞書をスキップさせます。

CURRENT,PFA、およびLFAという単語は標準化されていないため、これは現代的なForthでは機能しない可能性があります。また、HEREは、次の単語のヘッダーの正しいアドレスではない可能性があります。

+1

最新のForthシステムでは、[modules-package by Ulrich Hoffmann](https://theforth.net/package/modules/current-view)のように、異なる単語リストにコンパイルして検索順序を変更することが考えられます/modules.fs) – fiz

関連する問題