Salut !

Je débute en Forth, et après avoir implémenter des tas de structures statiques, il me faut maintenant faire de même pour les dynamiques (en commençant bien sûr par le tableau dynamique). Je n'ai jamais été confronté à un langage qui ne les propose pas dans son core, donc je suis en territoire inconnu .

Je pensais utiliser la technique de l'expansion géométrique de tableaux : lorsque le tableau (en réalité statique) devient trop petit, on en alloue un nouveau x fois plus gros. Seulement je ne suis pas capable de coder un truc pareil :
  • Je ne sais pas comment libérer de la mémoire en Forth (d'ailleurs, je me demande comment ça fonctionne, puisqu'une fois que HERE a été incrémenté comment revenir en arrière ?)
  • Si le tableau venait à changer d'adresse au cours de son redimensionnement, cela ne risque-t-il pas de poser des problèmes chez les codes exploitants ?
  • Suis-je obliger d'implémenter d'abord les structures C-like ? PArce que sinon je ne vois pas comment associer un nom de tableau a une capacité théorique, comme dans l'exemple de Wikipédia :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function insertEnd(dynarray a, element e)
        if (a.size = a.capacity)
            // resize a to twice its current capacity:
            a.capacity ← a.capacity * 2  
            // (copy the contents to the new memory location here)
        a[a.size] ← e
        a.size ← a.size + 1


Il serait peut-être plus simple de penser à une autre solution, du genre listes doublement chaînées ? Quel est l'usage en Forth ?

Merci d'avance !

PS : gforth propose des tas de trucs utiles, dont quelques structures de données dont peut-être les tableaux dynamiques; mais j'ai une petite envie de mettre les mains dans le camboui .