SetLgg

Description du projet

SetLgg est un ensemble de logiciels libres sous license GPLv3.

Le compilateur

Le cœur du projet est un compilateur destiné à montrer qu'il est possible de créer en langage de programmation où le compilateur peut vérifier les opérations sur les valeurs du programme de la création de ces valeurs jusqu'à leur destruction. Cela permet d'éviter qu'un programme plante parce qu'une opération illogique a pu être introduite dans le comportement légitime d'une valeur. Le langage sera dans un premier temps dédié à l'utilisation de bases de données non relationnelles fondées sur la notion d'ensemble.

Par exemple, le compilateur a pour vocation de refuser un code qui pourrait extraire une valeur d'une liste vide si le type représentant une liste l'interdit.

Le compilateur n'est pour le moment qu'à l'état de spécifications et les bonnes idées s'amassent sans toutefois trouver suffisamment de cohérence entre elles pour avoir un langage utilisable en pratique.

L'architecture destination

Description générale

Le code produit par le compilateur sera exécutable sur une petite machine virtuelle, pensée pour simplifier le travail de rédaction d'un compilateur. Elle a été en outre conçue pour simplifier les opérations de maintenance en présentant une interface utilisateur composée uniquement de fichiers textes consultables avec n'importe quel éditeur de texte.

En soit, la machine virtuelle peut être utilisée seule pour apprendre quelques notions sur le langage machine dans un environnement plus convivial qu'une machine réelle qui demande un apprentissage relativement long pour écrire le plus simple des programmes.

Un petit exemple de programme (un classique du genre, le calcul de la suite de Fibonacci) pour montrer à quoi ressemble le langage machine de la machine virtuelle :

   :new PTR/parametres, INT/entree, INT/sortie
   :read :stdin ~d LINE -> entree
   :call fibonacci parametres
   :write :stdout ~d @sortie
   :write :stdout ~s "\n"
   :delete parametres, entree, sortie
   :shutdown

:label fibonacci # PTR iINT oINT
   :goto calcul_fib :when @(:current+1)>1
   @(:current+1) -> (:current+2)
   :return
:label calcul_fib
   :new PTR, INT, INT, PTR, INT, INT -> :current
   @(:current+1) - 1 -> (&@:current+1)
   :call fibonacci &@:current
   @(:current+1) - 2 -> (&@:current+4)
   :call fibonacci (&@:current+3)
   @(&@:current+2) + @(&@:current+5) -> (:current+2)
   :delete &@:current*6
   :return

Ce qui donne à l'exécution :

pappy@archeos:~/setlgg$ setlgg_machine fib.setlggasm fib.setlggmem
25
75025
pappy@archeos:~/setlgg$ cat fib.setlggmem 
# Memory:
# Aliases:
# Free addresses:
# From &0 on 147 addresses
# Free blocks:
# Block of 147 free addresses from &0
# End of memory
pappy@archeos:~/setlgg$ 
					

Notez bien qu'il s'agit ici du langage machine, directement exécuté par le processeur après une simple transformation technique visant une plus grande rapidité d'exécution.

Caractéristiques de la machine virtuelle

La machine virtuelle est composée de plusieurs parties :

Le jeu d'instructions du processeur permet de manipuler les éléments de la machine virtuelle comme le flot de contrôle des instructions et la mémoire :

Le jeu d'instructions du processeur comprend également une gamme d'appels au système sous-jacent pour pouvoir accéder à bas niveau à des opérations normalement complexes comme :

Extensions

Enfin, la machine est extensible par plugins écrits a priori en C ou C++, à travers des bibliothèques partagées (.so) :

La machine virtuelle est fournie avec des plugins de base pour un support minimal des nombres à virgule flottante (supportés par le type double du C++) ainsi que les opérations mathématiques minimales sur ces nombres.

Pour jouer avec ?

Le projet

Pour télécharger l'archive et la compiler, il vous faudra les outils standards de compilation. Sous gentoo, ces outils sont installés de base dans le système. Sur une debian-like, il faudra build-essential, flex et bison pour pouvoir compiler la machine virtuelle.

Les dernières versions utilisables sont :

Les versions du projet sont élaborées en fonction des changements dans le projet :

Des bibliothèques

Pour accélérer vos développements, des petites bibliothèques écrits en langage machine sont disponibles :

Elles sont données en l'état, sans aucune garantie de fonctionnement avec une version de la machine virtuelle ne correspondant pas à la date indiquée sur l'archive des bibliothèques.

Pour contribuer ?

Le projet n'étant pas terminé, des petites contributions seront appréciées :

Me contacter…

Pour une question sur le projet, une amélioration possible, un rapport de bug, envoyez-moi un email à l'adresse projet.setlgg [chez] pappy.tf en précisant dans le sujet s'il s'agit du compilateur ou de la machine virtuelle et, s'il s'agit d'un rapport de bug, d'une question ou d'une suggestion, merci !

Licence Creative Commons
Cette page de Julien Bruguier est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.