Le langage ADA est utilisé dans le monde du logiciel embarqué, de l'automatisme, du temps réel et dans le logiciel critique en général parce que c'est le seul langage certifié qui garantit son résultat. C'est donc un langage qui fournit des solutions robustes, extrêmement sures. On le trouve donc essentiellement dans l'aéronautique, le militaire, le transport, càd tous les systèmes ou une erreur peut entraîner une catastrophe humaine ou technologique. Il est apprécié pour enseigner l'algorithmique à cause de sa puissance sémantique, on écrit facilement en quelques lignes des choses qui peuvent être extrêmement complexes. Il permet de présenter les concepts fondamentaux de la programmation. Nous allons voir ici comment travailler en ADA sous Ubuntu.
La première chose à faire est d'installer les paquets gnat.
Une fois ceci terminé, vous pouvez d'ores et déjà commencer à compiler vos programmes ADA de la façon suivante :
Dans votre terminal :
cd repertoire_ada/ gnatmake votre_programme.adb ./votre_programme
La première ligne, avec la commande cd, vous permet de vous placer dans le répertoire où vous avez enregistré votre programme ADA. Exemple : j'ai mis mon programme ADA dans Documents/IUT/ada, donc je vais taper cd Documents/IUT/ada.
La deuxième ligne compile votre programme ADA.
La troisième ligne lance le résultat de la commande précédente, qui est le fichier exécutable créé par GNAT. Il a le même nom que votre fichier source sans le .adb .
Emacs est un éditeur de texte utilisé par de nombreux développeurs. Il permet de travailler rapidement sur les sources et éventuellement de les compiler. La mise en forme du code (coloration syntaxique, indentation et autocomplétion) est parfaitement gérée par Emacs.
Pour éditer un fichier utilisez la commande suivante :
emacs mon_fichier.adb
Note : Si vous souhaitez ouvrir plusieurs fichiers à la fois il est conseillé d'utiliser le menu File → Open File dans Emacs plutôt que de lancer plusieurs fois la commande ci-dessus. A chaque fois que vous éxecutez cette commande le systéme va créer un nouveau processus ce qui nécessite pas mal de ressources s'il y a beaucoup de fichiers ouverts. Il convient mieux d'avoir un seul processus Emacs avec plusieurs fichiers ouverts à l'interieur.
Pour compiler avec Emacs, choisissez Compile dans le menu Tools → Compile. Dans le prompt en bas de la fenétre, tapez :
gnatmake mon_fichier.adb
L'éditeur de texte par défaut de Ubuntu, Gedit reconnaît directement la syntaxe ADA. Pour le lancer Accessoires → Éditeur de texte.
On va maintenant personnaliser un peu Gedit pour pouvoir compiler et lancer nos programmes directement depuis l'éditeur de texte (façon Adagide ).
La première chose à faire est d'activer le greffon Outils externes dans Édition → Préférences → Greffons. Ces outils externes vont nous permettre de définir deux commandes personnalisées pour lancer et compiler nos programmes. Activez-le, puis cliquez sur Configurer le greffon.
Une fenêtre s'ouvre avec à droite la liste des commandes et à gauche leur descriptif. Créez tout d'abord une nouvelle commande en cliquant sur Nouveau, et appelez-la (à votre guise) "Compiler en ADA". Complétez les champs Description ("Compile en ADA"), Shortcut Key (Raccourci clavier, moi j'ai mis F3), et dans Command, collez ça :
gnatmake $GEDIT_CURRENT_DOCUMENT_NAME -o executable
Vous l'aurez compris, cette commande transmet à GNAT le document courant à compiler, avec le fichier exécutable (-o) dans executable.
Créez ensuite une seconde commande, remplissez les champs précédents (moi j'ai Exécuter en ADA, raccourci F4), et dans le champ Command:
gnome-terminal -x bash -c "./executable; read x"
Cette commande envoie à gnome-terminal la commande ./executable, notre programme ADA compilé précédemment, puis read x qui attend une action de l'utilisateur pour fermer le terminal.
Vous n'avez plus qu'à taper F3 pour compiler, et F4 pour exécuter.
GPS est un IDE développé par AdaCore. Il permet notamment l'auto-complétion et le débogage. Il supporte nativement le langage ADA, mais également C, JavaScript, Pascal et Python.
Pour obtenir GPS, il suffit d'installer le paquet gnat-gps. Il suffit de lancer GPS avec la commande
gnat-gps
Lorsque l'on installe le paquet "gnat-gps", aucun lanceur n'apparaît dans le menu Application. On peut alors en créer un nouveau avec la commande "gnat-gps".
Le gros intérêt de travailler avec GPS est qu'il s'agit d'un environnement intégré, genre Eclipse, qui donne directement les classes, méthodes etc.. par de l'auto-completion, en clair, il propose au terminaliste les différentes méthodes possibles. Un autre intérêt est qu'il est souvent plus bavard, à la compilation, que la ligne de commande.
Il est important de bien comprendre que GPS n'édite pas directement les fichiers sources ada. GPS connaît seulement le projet. Le projet est l'ensemble exhaustif de tous les paramètres nécessaires à la compilation du programme principal (l'équivalent du "main" en C si l'on veut). Tous ces paramètres sont regroupés dans un fichier texte, d'extension "gpr", manipulés à travers un langage "ada like", définit par AdaCore https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/gnat_project_manager.html On exécute donc GPS avec comme unique paramètre ce fichier gpr. Et c'est à travers ce fichier gpr que GPS donne accès aux sources et qu'il peut donc connaître les méthodes possibles, accéder aux bibliothèques, compiler etc.. C'est ce même fichier gpr que l'on peut aussi citer directement en ligne de commande, par ex.
gnatmake -P<nom-du-fichier>.gpr
si l'on choisit de travailler avec un terminal en ligne de commande (les 2 modes en même temps ça fonctionne aussi).
Lors de la compilation, GNAT crée des fichiers .ali, .o et un fichier exécutable. Si vous désirez nettoyer votre répertoire, tapez :
gnatclean *
dans le répertoire de vos programmes, et GNAT supprimera tous les fichiers à l'exception de vos sources (.adb).
Le langage est extrêmement riche et la dernière norme 2022 embarque nativement de nombreuses fonctionnalités comme la généricité, la programmation objet, le tasking et le temps réel, la garantie de précision des calculs, la possibilité de manipuler de façon sure différents alphabets et codages, la manipulation de très grandes chaînes de caractères et aussi des containers qui fournissent tout un tas de choses utiles au programmeur, comme des listes doublement chaînées avec index par ex. Tout ceci est natif au langage qui garantit sa norme, ce qui veut dire qu'une implémentation qui s'appelle "Ada" doit garantir sa norme et rien que sa norme, la norme interdisant d'y ajouter quoique ce soit de sa propre initiative. A coté du langage lui même, il existe d'autres sources pour se procurer des fonctions.
La 1ere source importante est la société AdaCore qui fournit le compilateur gnat. Elle fournit en sus toute une collection de fonctions supplémentaires, comme l'accès à de la DB, via gnat.coll ou une solution graphique avec GtkAda https://www.adacore.com/gtkada
La 2ième source est la communauté qui fournit des fonctions de manipulation des APIs, de la logique client/serveur HTTP et des IHM avec HTML5. https://github.com/stcarrez/swagger-ada.git https://sourceforge.net/projects/gnoga.
-Bien que les modes d'installation classiques via GitHub et autres restent bien sur disponibles, AdaCore fournit maintenant l'outil Alire https://alire.ada.dev/docs/#first-steps qui est une espèce de Snap, au sens Ubuntu, qui garantit l'utilisation des bonnes bibliothèques dans les bonnes version, via une logique de graphe de dépendances des composants, entièrement gérée par Alire et complètement transparente pour l'utilisateur. -Alire comprend de nombreux exemples. Il y a 2 cas;
-Le lien https://learn.adacore.com/courses/intro-to-ada/index.html fournit de la documentation sur l'apprentissage et l'utilisation du langage Ada. Notamment un bon ouvrage complet en pdf, par les gens d'AdaCore, pour débuter sérieusement avec des exemples complets, via un fichier à télécharger, page 1. Les exemples sont fournis "prêts à compiler", le code source, le fichier paramètre pour la compilation, les valeurs des pragmas qui sont les directives de compilation (utilisés par le fichier paramètre précédent) et un fichier json pour retrouver le tout plus facilement (qui n'a bien sur rien à voir du tout avec la compilation), via un répertoire avec une clé MD5.