Présentation des ajouts majeurs
Le manuel de Gforth 1.0 recense plus d’une centaine de mots nouveaux ou révisés. Parmi eux, le texte indique que l’interpréteur peut désormais reconnaître des littéraux numériques comme 6k5 ou 23%, ainsi que des chaînes entre guillemets (("string")) et des adresses de corps de mots (( )). Cette extension du parseur simplifie la saisie directe de constantes et réduit le besoin d’appels auxiliaires pour les convertir.
Le système de documentation a été enrichi : chaque mot possède un nœud d’aide accessible via help, et les objectifs de stabilité sont explicités, distinguant les mots garantis à long terme de ceux susceptibles d’être retirés.
Architecture du multitâche et des files de messages
Gforth 1.0 introduit un modèle de multitâche exploitable sur plusieurs cœurs ou threads matériels. Les primitives listées (newtask, task, initiate, execute-task, kill-task, halt, sleep, wake, etc.) permettent de créer, démarrer, suspendre et terminer des tâches de façon explicite. La présence de thread-deadline indique que le planificateur accepte des contraintes temporelles, ce qui est essentiel pour les applications temps réel.
Le mécanisme de communication repose sur des files de messages similaires au modèle d’acteur. Les mots send-event, ?events et event-loop offrent une synchronisation implicite entre tâches, évitant les verrous classiques. Cette approche minimise les risques de blocage circulaire et facilite le découpage fonctionnel du code.
Extensions du dictionnaire, closures et valeurs
Le dictionnaire peut désormais contenir plusieurs sections indépendantes, chacune avec son pointeur de dictionnaire. Les mots next-section, previous-section et extra-section permettent d’allouer de nouveaux espaces sans impacter les sections existantes, ce qui est utile pour les définitions imbriquées ou les bibliothèques chargées dynamiquement.
Les nouvelles formes de valeurs (value:, cvalue:, wvalue:, 2value:, fvalue:, etc.) et leurs variantes par tâche (uvalue, udefer) offrent une granularité fine pour le stockage d’état. Les closures sont introduites sous forme de jetons d’exécution associés à des données (free-closure, [n:l, {: :}l, …). Cette capacité à capturer un environnement d’exécution rend possible la création de fonctions anonymes avec état persistant, comparable aux lambdas dans d’autres langages.
->v // to v;
+>v // +to v;
'v // addr v;
@>d // action-of d;
=>d // is d.Ces exemples montrent la syntaxe raccourcie pour les opérations de compilation et d’exécution, réduisant le nombre de mots nécessaires pour manipuler les variables et les adresses.
Améliorations de l’IDE et de l’interpréteur
L’interface utilisateur gagne une ligne d’état affichant la base numérique, les piles et l’ordre de recherche, accessible via les commutateurs -status et +status. Le mode .s a été enrichi d’un « Smart .s » qui interprète le type des éléments de pile et les présente de façon lisible, tout en conservant le comportement brut du .s original.
Le système de localisation supporte les chaînes préfixées par l", ainsi que les fonctions de gestion de locale (locale@, locale!, default locale-csv-out, …). Cette prise en charge facilite le développement d’applications multilingues sans recourir à des bibliothèques externes.
Enfin, le support C a été élargi : les mots c-value, c-variable, c-funptr et les options de compilation (add-libpath, add-cflags, c-callback, etc.) permettent d’intégrer du code natif, d’appeler des fonctions C et de gérer des callbacks depuis le thread Forth. Cette couche d’interopérabilité renforce la capacité de Gforth à servir de glue entre le code bas‑niveau et les scripts de haut niveau.