Soit un paquetage déclarant un compteur :
Avec GNAT, l’ajout du simple pragma Shared_Passive rend ce compteur
C’est cette dernière propriété qui nous intéresse ici.
Vous trouverez ci-après deux sources vous permettant de vérifier rapidement cette propriété de persistance sur votre plateforme favorite.
Il y a :
un paquetage Preferences, déclarant des variables à sauver,
et une procédure principale nomée Run qui modifie et affiche ces variables.
Ce petit exemple se compile par gnatmake run.
Exécutons le plusieurs fois. Que constate-t-on ?
d’abord, je l’espère, que ca marche :-), c’est à dire que, par exemple, le compteur d’exécution augmente à chaque fois.
ensuite, que des fichiers se sont créés dans le répertoire d’exécution. Nommés paquetage.variable, ils sont aisément identifiables. Si on les affiches, on vérifiera qu’ils sont bien dans un format binaire.
Quelques remarques complémentaires :
il s’agit d’une technique spécifique à GNAT. Ces sources sont de l’Ada légal, et sont donc compilable avec n’importe quel compilateur. Mais, avec un autre compilateur que GNAT, les variables reprendront leurs valeurs par défaut à chaque exécution. Cette limitation de portabilité ou de fonctionnalité est à mettre dans la balance.
moyennant le positionnement d’une variable d’environnement, GNAT peut effectuer la sauvegarde dans un autre répertoire que le répertoire courant.
Dans notre exemple, le fichier preferences.level n’est créé qu’a la troisième exécution : un fichier n’est créé que lorsque la variable correspondante est modifiée.
On peut utiliser des objets protégés pour gérer de possibles écritures simultanées par plusieures applis sur les mêmes variables. La encore, l’aspect persistance est transparent, il s’agit de code "normal".
Enfin, et pour peu que l’on remplace le paquetage standart de gestion des IO des Stream de GNAT par la version XDR de GLADE, ces fichiers sont partageables entre plateformes d’endianess différente.
Pour une description plus précise de ces points, il faut se reporter au GNAT Reference Manual.
En conclusion, pour sauvegarder avec GNAT des données simples, dans un format binaire, pensez au pragma Shared_Passive.