====== Développer en ADA sur Debian ======
* Objet : Programmation, ADA
* Niveau requis : débutant
* Commentaires : Installer, compiler, développer en ADA
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
===== Introduction =====
La première norme du langage Ada a été publiée en 1983 ; elle a ensuite été révisée et améliorée en 1995, 2005 et 2012, chaque révision apportant de nouvelles fonctionnalités utiles.
Aujourd'hui, Ada est largement utilisé dans les systèmes embarqués en temps réel, dont beaucoup sont critiques pour la sécurité. Bien qu'Ada soit et puisse être utilisé comme un langage à usage général, il brillera vraiment dans les applications de bas niveau :
- Systèmes embarqués avec de faibles besoins en mémoire (aucun ramasse-miettes autorisé).
- Interfaçage direct avec le matériel.
- Systèmes temps réel souples ou durs.
- Programmation de systèmes de bas niveau.
Les domaines spécifiques où Ada est utilisé comprennent l'aérospatiale et la défense, l'aviation civile, le rail et bien d'autres. Ces applications nécessitent un haut degré de sécurité : un défaut logiciel n'est pas seulement une nuisance, mais peut avoir de graves conséquences.
Ada fournit des fonctionnalités de sécurité qui détectent les défauts à un stade précoce, généralement au moment de la compilation ou à l'aide d'outils d'analyse statique. Ada peut également être utilisé pour créer des applications dans divers autres domaines, tels que :
Programmation de jeux vidéo
Audio en temps réel
Modules du noyau
Il s'agit d'une liste non exhaustive qui, espérons-le, éclaire sur le type de programmation dans lequel Ada est bon.
En termes de langages modernes, les plus proches en termes de cibles et de niveau d'abstraction sont probablement C++ et Rust.
Dans ce wiki on n'apprend à coder en ADA, mais à installer une infrastructure pour pouvoir le faire.
Un très bon tutoriel quand même pour prendre en main ce merveilleux langage :
[[https://learn.adacore.com/courses/intro-to-ada/index.html|LEARN.ADACORE.com]]
Voir aussi : [[https://lea-linux.org/documentations/Ada#T%C3%A9l%C3%A9chargement|Ada Léa Linux]]
===== Installation =====
apt update && apt install gcc gnat
=====Compilation manuelle =====
1. On édite un fichier .adb par exemple avec le code ci-dessous
-- On commence avec du pascada ^^
with Ada.Text_IO;
use Ada.Text_IO;
procedure Hello is
begin
Put_Line ("Hello WORLD!");
end Hello;
2. On compile. Il y a plusieurs étapes manuelles :
- On compile le fichier .adb:
~/Programmation/ADA$ ls -l
total 12
-rw-r--r-- 1 n n 104 23 nov. 11:03 hello.adb
n@debian-fixe:~/Programmation/ADA$ gcc -c hello.adb
n@debian-fixe:~/Programmation/ADA$ ls -l
total 12
-rw-r--r-- 1 n n 104 23 nov. 11:03 hello.adb
-rw-r--r-- 1 n n 2163 23 nov. 11:03 hello.ali
-rw-r--r-- 1 n n 1456 23 nov. 11:03 hello.o
- on vérifie la cohérence :
n@debian-fixe:~/Programmation/ADA$ gnatbind hello
n@debian-fixe:~/Programmation/ADA$ ls -l
total 44
-rw-r--r-- 1 n n 9346 23 nov. 11:09 b~hello.adb
-rw-r--r-- 1 n n 18159 23 nov. 11:09 b~hello.ads
-rw-r--r-- 1 n n 104 23 nov. 11:03 hello.adb
-rw-r--r-- 1 n n 2163 23 nov. 11:03 hello.ali
-rw-r--r-- 1 n n 1456 23 nov. 11:03 hello.o
- édition de lien :
n@debian-fixe:~/Programmation/ADA$ gnatlink hello
n@debian-fixe:~/Programmation/ADA$ ls -l
total 44
-rwxr-xr-x 1 n n 30912 23 nov. 11:14 hello
-rw-r--r-- 1 n n 104 23 nov. 11:03 hello.adb
-rw-r--r-- 1 n n 2163 23 nov. 11:03 hello.ali
-rw-r--r-- 1 n n 1456 23 nov. 11:03 hello.o
Toutes ces étapes peuvent être remplacée par l'unique commande ''gnatmake'' ci-dessous.
Pour la tester, supprimer tous les fichiers issues de la précédente compilation hello hello.ali hello.o
gnatmake hello.adb
3. On exécute :
n@debian-fixe:~/Programmation/ADA$ ./hello
Hello WORLD!
Rappel : \\
1. compilation du source : ''gcc -c hello.adb'' \\
2. test de cohérence des différentes unités : ''gnatbind'' \\
3. édition des liens : ''gnatlink''
=====Compilation automatique avec Makefile =====
Voir : [[utilisateurs:hypathie:makefile-pour-les-nulls|Makefile pour les nulls]]
1. Installation de make
sudo apt install make
2. Edition d'un fichier Makefile
Nommé ainsi pour que la commande make trouve ce fichier sans lui indiquer le nom de fichier
CC=gcc -c $(FLAGS)
# quand on met l'option -c à la commente gcc on demande de compiler en debug
FLAGS=-g
all: hello
#hello.o: hello.adb
# $(CC) hello.adb
#b~hello.ads: hello.o
# gnatbind hello
#hello: b~hello.ads
# gnatlink hello
hello: hello.adb
$(CC) hello.adb
gnatbind hello
gnatlink hello
3. Exécution de la commande make qui lit le fichier Makefile
n@debian-fixe:~/Programmation/ADA$ make
ls -l
-rwxr-xr-x 1 n n 30912 23 nov. 12:44 hello
-rw-r--r-- 1 n n 137 23 nov. 11:42 hello.adb
-rw-r--r-- 1 n n 2163 23 nov. 12:44 hello.ali
-rw-r--r-- 1 n n 1456 23 nov. 12:44 hello.o
-rw-r--r-- 1 n n 501 23 nov. 12:35 Makefile
Si on a pas modifié le fichier hello.adb et qu'on relance la commande ```make```, il ne recompile pas pour rien.
n@debian-fixe:~/Programmation/ADA$ make
make: rien à faire pour « all ».
ls -l
make
4. On exécute le programme ADA
./hello