Comment ça marche, PLUSHIE ?

Détails techniques

Architecture Minimale Nécessaire

Outre un ordinateur et son système d'exploitation (voir niveaux de complexité), PLUSHIE se repose sur :
une structure légère
  • La mémoire
  • PLUSHIE manipule uniquement des adresses mémoires. En pratique, on simule la mémoire par un tableau unidimensionnel extensible d'entiers de type Mémoire[].
    Le moteur automate de PLUSHIE doit juste pouvoir générer une nouvelle adresse mémoire disponible quand la dernière adresse disponible a été utilisée.


  • Données de base
  • Pour pouvoir construire des architectures de données complexes, une adresse mémoire doit permettre d'accéder à 2 adresses mémoires au moins. La première est appelée Tête et la seconde Suite

Cellule mémoire élémentaire :
      Tête
      Suite

Moteur

Le moteur de PLUSHIE est un programme mécanique de type automate, non modifiable pendant l'exécution, qui assure les actions suivantes :
Instructions de niveau -1
  • Si mémoire saturée, obtenir une nouvelle cellule mémoire

  • Copier sur le registre Destination la valeur mémoire pointée par le pointeur d'exécution
  • Destination=Mémoire[Mémoire[Exec]]

  • Avancer le pointeur d'exécution
  • Mémoire[Exec]=Mémoire[Suiv[Mémoire[Exec]]]

  • Copier sur le registre Source la valeur mémoire pointée par le pointeur d'exécution
  • Mémoire[Exec]=Mémoire[Suiv[Tete[Exec]]]

  • Avancer à nouveau le pointeur d'exécution

  • Effectuer l'instruction unique
  • Mémoire[Mémoire[Destination]]=Mémoire[Mémoire[Source]]

  • Pointer Suite sur la seconde adresse
  • Mémoire[Mémoire[Adressedesuite]] = Suiv[Mémoire[Mémoire[Variablesuite]]]

  • Si le registre Entrée est vide, lire un caractère dans le registre Entrée

  • Si Le registre Sortie est non vide, Afficher Sortie

  • Boucle tant que fin non atteinte

Et c'est tout. Le moteur ne comprend rien. Il avance, copie, lit et écrit. Et pourtant, le comportement supérieur apparaît.

En pratique, ce moteur automate est programmé en VB.net dans un module commenté de 400 lignes, dans l'interface proposée au téléchargement. Il est écrit en JavaScript sur ce site. Le code source est disponible sur simple demande à Plushie.langage (à) free.fr

Fichier mémoire de démarrage

Afin de pouvoir analyser du texte et interagir, il est nécessaire de disposer d'une structure déjà chargée en mémoire, donc d'un fichier de boot.

Ce fichier, plusbase.mem est composé de 300 cellules mémoires environ, soit presque 600 adresses entières.
Il est de niveau 0, c'est à dire qu'il est modifiable pendant l'exécution du système (au prix de grandes précautions).
Il contient l'interpréteur de base fourni avec PLUSHIE, qui pourra être modifié ultérieurement pendant son exécution, et même totalement oublié.

L'interpréteur de base est lui-même écrit en PLUSHIE. Il est généré par un fichier de création de mémoire écrit en simili plushie d'environ 600 lignes, non fourni avec l'interface de démonstration. Il peut être entièrement entré à la main, adresse par adresse.

L'algorithme de l'interpréteur actuel sera fourni sur simple demande à Plushie.langage (à) free.fr. Il est expliqué plus en détail ici-même.

Cet interpréteur n'est qu'une proposition. Il se veut minimaliste et ne présuppose l'existence d'aucun séparateur. La seule necessité est la connaissance d'un premier mot connu, programmé en dur dans le fichier mémoire de démarrage.
plus de détails
Ce mot, actuellement Lien, est un pointeur de niveau 2 vers l'adresse Suite qui donne la seconde valeur pointée par la variable Suitede. Suite pointe au départ vers Suitede ce qui permet de l'externaliser. Ainsi, la séquence d'initialisation
Éveil Lien Suite Éveil 
donne au mot clé Suite la valeur de l'adresse à laquelle le moteur de base donne toujours la valeur de la suite de l'adresse pointée par Suitede, puis
Suitede< Suite 
externalise un pointeur vers la variable Suitede. À partir de là, dès que Suitede recevra une valeur, Suite donnera la seconde adresse que cette valeur pointe.

Dans les différentes séquences de démarrages proposées ici, vous trouverez des mots différents. Mais le principe (et leurs valeurs) reste identique.

Fichier d'initialisation

Le fichier d'initialisation ini.txt est un fichier texte composé de plusieurs parties :

Le niveau 1, ou éveil, sert à "externaliser" les variables de fonctionnement du niveau -1, c'est-à-dire à leur donner un nom sous forme d'une chaîne de caractères affichables (qui pourra être modifiée plus tard) afin de pouvoir les adresser dans les fichiers de code au format .txt (en ANSI).

Variables minimales à nommer au niveau 1
  • Suitede et Suite
  • Suite contient l'adresse de la seconde case mémoire pointée par Suitede.

  • Mémoirelibre
  • Mémoirelibre contient la valeur de la prochaine adresse mémoire disponible.

  • Exécuter
  • Pointeur de la chaîne d'exécution

  • Sortie
  • l'adresse ou le caractère affecté à Sortie est affiché à l'écran.

Note : on peut donner le nom que l'on souhaite à ces variables dans le fichier ini.txt, ou en créer des alias plus tard.

Le niveau 2 du fichier ini.txt crée les premières fonctions fondamentales qui facilitent l'écriture des fonctions suivantes de niveau supérieur.

Fichiers de code

Les fichiers de code sont des fichiers au format texte brut (.txt en ANSI). Leur niveau de complexité dépend des fonctions de niveau inférieures utilisées.

La plupart des fichiers de code fournis nécessitent le chargement préalable du fichier ini.txt en mémoire pour être correctement exécutés.

Niveaux de complexité

Plus de détails

Par convention, on distingue les différentes couches nécessaires au fonctionnement de PLUSHIE par "niveaux de complexité". Les niveaux négatifs sont ceux qui ne peuvent pas être modifiés pendant l'exécution d'un programme en PLUSHIE.

  • Niveau - 5
  • Hardware

  • Niveau - 4
  • Séquence de boot (BIOS)

  • Niveau - 3
  • Système d'exploitation (Windows)

  • Niveau - 2
  • Interface utilisateur (form Windows)

  • Niveau - 1
  • Moteur automate écrit en vb.net

  • Niveau 0
  • Fichier mémoire initial en PLUSHIE

  • Niveau 1
  • Externalisation des variables

  • Niveau 2
  • Fonctions primaires

  • Niveau 3 et plus
  • Code avancé

    Notons que les niveaux négatifs peuvent être remplacés par un automate en hardware (voir la proposition de définition de la complexité dans la page dédiée à venir).

Fonctionnement de l'interpréteur de base

Cet interpréteur est codé en PLUSHIE dans le ficher plusbase.mem. Il lit le caractère contenu dans le registre d'entrée, puis l'ajoute à la liste chaînée de lecture.
Liste chaînée :


Il détermine ensuite si les derniers caractères de la liste de lecture correspondent à un mot connu.
Si non, il continue à lire.
Si oui, il apprend le mot correspondant à la partie de la liste de lecture qui précède le mot connu, sous forme d'un atome connu :

Valeur
Nom
P
L
U
S
H
I
E

ensuite, il exécute immédiatement l'instruction principale de PLUSHIE: la copie en double indirection

X
X

💡 Exemple

    Affiche Bonjour le monde À l'écran
    Bonjour le monde 
        

Ici, une nouvelle expression, Bonjour le monde, est définie puis utilisée immédiatement.

Voir la démo