Programmation Ada : premiers pas sur le bureau

Qui ne souhaite pas utiliser un langage de programmation conçu pour être fiable, simple à apprendre et également certifié pour tout, de l'avionique aux fusées et ICBM ? Malgré les racines solides et l'héritage impressionnant d'Ada, le jeu a la réputation parmi les amateurs moyens d'être « compliqué » et « obscur », mais cela ne pourrait être plus éloigné de la vérité, comme expliqué précédemment. En fait, toute personne ayant une certaine expérience en programmation, voire aucune, peut apprendre Ada, car le principe même d'Ada est qu'il supprime la complexité et l'ambiguïté de la programmation.

Dans cette première partie d'une série, nous examinerons comment être opérationnel avec un environnement de développement de bureau de base sous Windows et Linux, et exécuterons du code Ada qui vous familiarisera avec la syntaxe et les principes de base de la syntaxe Ada. En ce qui concerne la version Ada utilisée, nous ciblerons Ada 2012, car la nouvelle norme Ada 2022 vient tout juste d'être approuvée en 2023 et ne change rien de significatif pour nos besoins.

Choses de la chaîne d'outils

La chaîne d'outils Ada incontournable pour ceux qui n'aiment pas dépenser de grosses sommes d'argent pour des chaînes d'outils Ada propriétaires, certifiées et très coûteuses est GNAT, qui à un moment donné signifiait GNU NYU Ada Translator. C'est le résultat de l'attribution par l'armée de l'air américaine d'un contrat à l'Université de New York (NYU) en 1992 pour un compilateur Ada gratuit. Le résultat de cela a été la chaîne d'outils GNAT, qui, selon les stipulations du contrat, serait sous licence GNU GPL et ses droits d'auteur seraient attribués à la Free Software Foundation. La version commercialement supportée (par AdaCore) de GNAT s'appelle GNAT Pro.

Obtenir une copie de GNAT est très simple si vous utilisez une distribution Linux courante, avec le package gnat pour les distributions basées sur Debian et gcc-ada si vous êtes basé sur Arch. Pour Windows, vous pouvez soit télécharger AdaCore GNAT Community Edition, soit si vous utilisez MSYS2, vous pouvez utiliser son gestionnaire de packages pour installer le mingw-w64-ucrt-x86_64-gcc-ada package pour par exemple le nouvel environnement ucrt64. Ma préférence personnelle sous Windows est la méthode MSYS2, car elle fournit également un shell et des outils de style Unix, ce qui rend le développement multiplateforme encore plus facile. C’est également l’environnement qui sera supposé tout au long de l’article.

Bonjour Ada

La partie la plus importante de toute application est son point d’entrée, car c’est lui qui détermine où commence l’exécution. La plupart des langues ont une sorte de nom fixe pour cela, tel que mainmais dans Ada, vous êtes libre de nommer le point d'entrée comme vous le souhaitez, par exemple :

with Ada.Text_IO;
procedure Greet is
begin
    -- Print "Hello, World!" to the screen
    Ada.Text_IO.Put_Line ("Hello, World!");
end Greet;

Ici, le point d'entrée est le Greet procédure, car c'est la seule procédure ou fonction du code. La différence entre une procédure et une fonction est que seule la dernière renvoie une valeur, tandis que la première ne renvoie rien (semblable à void en C et C++). Les commentaires commencent par deux tirets et les packages sont importés à l'aide du with déclaration. Dans ce cas, nous voulons le Ada.Text_IO package, car il contient les routines de sortie standard telles que Put_Line. Notez que comme Ada n'est pas sensible à la casse, nous pouvons également saisir tous ces noms en minuscules.

On pourrait également remarquer l'évitement de tout symbole où un mot anglais peut être utilisé, comme l'utilisation de is, begin et end plutôt que des accolades. Lors de la fermeture d'un bloc avec end, celui-ci est post-fixé avec le nom de la fonction ou de la procédure, ou de la structure de contrôle qui est fermée (par exemple un bloc ou une boucle if/else). Cela sera développé plus tard dans la série. Enfin, tout comme en C et C++, les lignes se terminent par un point-virgule.

Pour une référence sur la syntaxe et bien plus encore, AdaCore propose une référence en ligne ainsi qu'un certain nombre de livres téléchargeables gratuitement, qui incluent une comparaison avec Java et C++. Le manuel de référence du langage Ada (LRM) est également disponible gratuitement.

Compiler et exécuter

Pour compiler l'exemple de code simple ci-dessus, nous devons l'introduire dans un fichier source, que nous appellerons greet.adb. Les extensions standards avec la chaîne d'outils GNAT sont .adb pour la mise en œuvre (corps) et .ads pour la spécification (un peu comme un fichier d'en-tête C++). Il est recommandé d'utiliser le même nom de fichier que le package principal ou le nom du point d'entrée (nom de l'unité) pour le nom de fichier. Cela fonctionnera s'il ne correspond pas, mais vous recevrez un avertissement en fonction de la configuration de la chaîne d'outils.

Contrairement à C et C++, le code Ada n'est pas seulement compilé et lié, mais comporte également une étape de liaison intermédiaire, car la chaîne d'outils détermine entièrement les packages, les dépendances et les autres éléments du projet avant d'assembler le code compilé en binaire.

Un facteur important ici est également qu'Ada ne fonctionne pas avec un préprocesseur et que les fichiers de spécifications ne sont pas copiés dans le fichier qui les référence avec un with instruction, mais ne prend note de la dépendance que lors de la compilation. Un avantage appréciable est que include les gardes ne sont pas nécessaires et les problèmes liés aux liens tels que l'ordre des liens des objets et des bibliothèques sont pratiquement éliminés. Cela se fait cependant au prix du traitement du classeur.

Bien que GNAT soit livré avec des outils individuels pour chacune de ces étapes, le gnatmake L'outil permet au développeur de gérer toutes ces étapes en une seule fois. Bien que certains préfèrent utiliser le logiciel développé par AdaCore gprbuild, nous n'utiliserons pas cela car cela ajoute une complexité rarement utile. Utiliser gnatmake pour compiler l'exemple de code, nous utilisons un Makefile qui produit le résultat suivant :

mkdir -p bin
mkdir -p obj
gnatmake -o bin/hello_world greet.adb -D obj/
gcc -c -o obj\greet.o greet.adb
gnatbind -aOobj -x obj\greet.ali
gnatlink obj\greet.ali -o bin/hello_world.exe

Même si nous venons d'appeler gnatmakeles étapes de compilation, de liaison et de liaison ont toutes été exécutées ultérieurement, ce qui a donné naissance à notre application Hello World extrêmement sophistiquée.

Pour référence, le Makefile utilisé avec l'exemple est le suivant :

GNATMAKE = gnatmake
MAKEDIR = mkdir -p
RM = rm -f

BIN_OUTPUT := hello_world
ADAFLAGS := -D obj/

SOURCES := greet.adb

all: makedir build

build:
	$(GNATMAKE) -o bin/$(BIN_OUTPUT) $(SOURCES) $(ADAFLAGS)
	
makedir:
	$(MAKEDIR) bin
	$(MAKEDIR) obj

clean:
	rm -rf obj/
	rm -rf bin/
	
.PHONY: test src

Prochaines étapes

Génial, vous disposez désormais d'un environnement de développement fonctionnel pour Ada avec lequel vous pouvez créer et exécuter n'importe quel code que vous écrivez. Naturellement, le sujet des éditeurs de code et des IDE est un sujet de guerre des flammes que je ne vais pas aborder ici. Comme mentionné dans mon article de 2019, vous pouvez utiliser le studio de programmation GNAT (GPS) d'AdaCore pour une expérience d'environnement de développement intégré, si tel est votre problème.

Mon propre environnement de développement est une constellation lâche de Notepad++ sous Windows et de Vim sous Windows et ailleurs, avec Bash et des shells similaires comme environnement pour exécuter la chaîne d'outils Ada. S'il y a suffisamment d'intérêt, je serais plus qu'heureux d'y jeter un œil. dans d'autres environnements de développement également dans les articles à venir, alors n'hésitez pas à vous exprimer dans les commentaires.

Pour le prochain article, j'examinerai plus en profondeur ce qu'il faut pour écrire une application Ada qui fasse réellement quelque chose d'utile, en utilisant les étapes préparatoires de cet article.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.