2017-10-18 29 views
3

J'ai commencé à lire Thinking Forth. Dans le livre, l'auteur mentionne un système de modules à trois lignes avec une référence aux actes d'une conférence Forth. Here's a PDF containing a description of the module system à partir de la page 14, (132 tel qu'imprimé).Comment fonctionne ce système de module Forth à trois lignes?

Voici les instructions sur la façon d'utiliser les trois mots définis INTERNAL, EXTERNAL et MODULE.

Un module est une partie d'un programme entre les mots INTERNAL et MODULE. Les définitions des constantes, variables et routines locales au module sont écrites entre les mots INTERNAL et EXTERNAL. Les définitions qui doivent être utilisées à l'extérieur du module sont écrit entre les mots EXTERNAL et MODULE. [Les variables locales pour une routine ] sont définies entre INTERNAL et EXTERNAL. La routine qui les référence est définie entre EXTERNAL et MODULE.

Et voici le code lui-même:

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

Je lis le livre pour les idées sur la façon d'écrire des logiciels en général, plutôt que de la programmation dans une mise en oeuvre particulière de Forth, je Je ne suis pas familier avec les mots intégrés utilisés dans le code, mais je suis curieux au sujet de ce système de module. Quelqu'un peut-il expliquer comment cela fonctionne?

Répondre

5

Je vais reformuler la description. Un module devrait ressembler à ceci:

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

Le code pour la mise en œuvre de ce système de module suppose que le dictionnaire est une liste chaînée classique. INTERNAL enregistre un pointeur sur le mot courant, par ex. celui juste avant INTERNAL. EXTERNAL enregistre un pointeur sur le mot juste après EXTERNAL. MODULE prend les deux pointeurs, et corrige le champ de lien du mot après EXTERNAL pour pointer sur le mot avant INTERNAL. En effet, il fait sauter le dictionnaire sur tous les mots entre INTERNAL et EXTERNAL.

Cela peut ne pas fonctionner dans un Forth moderne, car les mots CURRENT, PFA et LFA ne sont pas standardisés. Et aussi, HERE peut ne pas être l'adresse correcte pour l'en-tête du mot suivant.

+1

Dans un système Forth moderne, une approche possible consiste à compiler dans différentes listes de mots et à modifier l'ordre de recherche en conséquence, comme le [module-paquet par Ulrich Hoffmann] (https://theforth.net/package/modules/current-view /modules.fs) – fiz