Introduction à la programmation Ada

Gazette Linux n°81 — Août 2002

Thomas Adam

Article paru dans le n°81 de la Gazette Linux d'août 2002.

Traduction française par Joëlle Cornavin .

Relecture de la traduction française par Encolpe Degoute .

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières
1. Introduction
2. Qu'est-ce que Ada ?
3. Compilateurs Ada
4. L'EDI de Ada
5. Fonctionnalités de Ada
6. Bonjour monde !
7. Explication : Bonjour monde
8. Exercices

1. Introduction

Je suis tout à fait démodé quand il s'agit d'ordinateurs. Je suis l'une de ces personnes qui préfère travailler sur une interface pilotée en ligne de commande plutôt qu'avec une interface graphique. Ainsi, vous ne serez pas étonné de constater que plusieurs des langages de programmation que j'y ai expérimentés sont également basés sur les entrées/sorties en mode texte. Ada, comme Perl, Bash, Sed, Awk, C, etc. n'y fait pas exception.

Au fil des ans, quelques langages de programmation ont été mentionnés dans laLinux Gazette®. Ben Okopnik a écrit deux excellents tutoriels sur le Perl et Bash, d'autres personnes ont contribué à la description d'autres langages, comme Smalltalk, C++, Python.


2. Qu'est-ce que Ada ?

À l'origine, Ada était un langage de programmation développé par le Ministère de la Défense américain (DoD). Standard connu au départ sous le nom de Ada83, il est maintenant obsolète, car il a été révisé récemment et rebaptisé Ada95. C'est maintenant la norme et l'implémentation préférées du langage de programmation Ada.

En 1983, Ada a été standardisé par l'ANSI (American National Standards Institute). Ainsi, il est passé par tous les requêtes officielles et cette année-là, cette première version a été publiée. Puis quatre ans après, en 1987, l'ISO ( International Standards Organisation) a publié une norme équivalente. À l'époque cependant, la notion de ce que l'on appelle OOP (Object-Oriented Programming, « programmation orientée objet ) était un concept qui n'avait pas été véritablement pris en considération.

Ada cependant, n'a pas été conçu par un comité. La conception originelle a été implémentée par Jean Ichbiah, qui a gagné un concours de conception de langage. Puis en 1995, Tucker Taft a dirigé un petit groupe de développeurs et Ada95. Contrairement à la précédénte version (Ada83), l'implémentation de Ada95 (ou Ada9X, comme on le nomme parfois) a subi un test de « performance » public, grâce auquel les testeurs du langage ont donné leurs réactions, ainsi que des suggestions pour améliorer l'efficacité de la disposition syntaxique et lexicographique.

Le nom « Ada » est attribué à une femme, Ada Loveless (1815-1852), considérée le premier programmeur du monde. Ada joue un rôle dans toutes sortes de situations et, comme c'est un langage de programmation concomitant, on l'utilise dans la plupart des systèmes embarqués courants. Ada a été utilisé dans certains des domaines suivants :

Cette liste n'est en aucun cas exhaustive !


3. Compilateurs Ada

À la différence d'autres langages de programmation par scripts (Perl, Bash, Python, tcsh, etc.), Ada comme C est compilé plutôt qu'interprété. Cela signifie que la personne qui va exécuter le programme n'a pas besoin de l'interpréteur installé pour l'utiliser. Les programmes Ada sont donc indépendants de tout type de paquetage Ada installé.

 

[À moins que vous n'ayez utilisé des pragmas pour interfacer Ada avec d'autres langages comme C, auquel cas vous pourriez avoir des bibliothèques, mais nous aborderons ce point ultérieurement.]

 
-- TA 

Le compilateur Ada que je vous recommande est appelé GNAT, qui signifie GNU NYU (New York University) Ada Translator. Il est libre (sous licence GNU) et on trouve énormément d'informations le concernant. Il est basé sur le compilateur gcc, dont la syntaxe Ada est comprise dedans.

Il est disponible sur le site web suivant, qui offre un lien vers le compilateur GNAT :

http://libre.adacore.com/GNAT/ ftp://cs.nyu.edu/pub/gnat [1].

Note

Je vous recommande de télécharger une version binaire précompilée de GNAT et d'utiliser le paquetage alien si nécessaire pour convertir en .DEB, .RPM, .TGZ, etc. La raison est que vous aurez besoin d'une version Ada de gcc (souvent appelée gnatcc) pour amorcer le compilateur. If this is the first time you are installing GNAT then the compilation from source code will not be possible.

Cela dit, vous pouvez poursuivre et installer le paquetage une fois que vous l'avez téléchargé. Vous constaterez qu'avec la version RPM de GNAT ne comprend qu'un fichier, GNAT-3.13p-7.rpm [2] qui contient tout ce dont vous avez besoin pour commencer à programmer dans ce merveilleux langage !


4. L'EDI de Ada

Avant de commencer notre premier programme en Ada, je pense qu'il serait bon de vous faire prendre conscience de quelques bases sur les EDI (environnements de développement intégré ; en anglais, IDE (Integrated Development Environments). Ce sont des logiciels qui vous aident à programmer dans le langage spécifié, en vous offrant des fonctionnalités telles que :

Les deux que je vous conseille tout particulièrement sont :

Pour tous les fans d'Emacs, il y a une extension appelée Glade, installée comme élément à part entière de la distribution GNAT principale. C'est une extension Emacs qui prend en charge le compilateur GNAT, la coloration syntaxique, etc.

Vous n'êtes pas obligé de faire appel à un EDI pour pouvoir tirer parti de GNAT. À la place, j'utilise jed si je suis en mode console (bien que celui-ci ne gère pas encore la coloration syntaxique de ADA) et Nedit si je suis sous X11. Celui-ci prend en charge la coloration syntaxique de Ada.


5. Fonctionnalités de Ada

Ada95 a été considérablement amélioré par rapport à son précédesseur Ada83. L'amélioration la plus flagrante a été l'orientation objet, que beaucoup de gens trouvent utile. Voici quelques-unes des fonctionnalités de Ada :

En plus des fonctionnalités, on trouve égalements celles-ci :

Ainsi que beaucoup d'autres...


6. Bonjour monde !

Il est à présent temps d'écrire notre premier programme Ada. Tradition oblige, nous allons commencer par écrire un exemple de « Bonjour monde ». Ouvrez un éditeur de texte et saisissez les lignes suivantes :


with text_io;
use text_io;

procedure bonjour_monde is  

begin

  put("Bonjour monde !");

end bonjour_monde;

Facile, n'est-ce-pas ? Avant de lancer ce programme, nous devons l'enregistrer. Cependant, il lui manque le suffixe correct. GNU/Linux n'exige pas de suffixe (extension de fichier) en règle générale, mais c'est essentiel quand on programme en Ada et qu'on utilise le compilateur GNAT. Voici une liste d'extensions valides :

Note

Si vous enregistrez autre chose qu'un paquetage (ce qui n'est pas le cas pour le moment !), pensez à ajouter une extension .adb à votre nom de fichier. Ainsi, le compilateur sait que le fichier qu'il compile est un programme et non une spécification de paquetage !

Donc, enregistrez votre fichier sous bonjour_monde.adb.

Vous êtes maintenant prêt à commencer à compiler / construire le programme. Cette opération est nécessaire pour pouvoir l'exécuter. Vous ne pouvez pas lancer un programme Ada jusqu'à ce qu'il ait été compilé et construit.

Passez dans le répertoire dans lequel vous venez d'enregistrer le fichier et saisissez la commande suivante :



gnatmake bonjour_monde.adb

Elle compile -> édite les liens -> construit votre code Ada en un programme compilé.

Maintenant, si vous saisissez :



./bonjour_monde

vous obtenez :


Bonjour monde !

la sortie écran, puis le programme se termine.

Vous avez sans doute remarqué que la saisie de la commande a généré la sortie suivante :

 
gnatgcc -c bonjour_monde.adb
gnatbind -x bonjour_monde.ali
gnatlink bonjour_monde.ali

Vous pourriez, si vous le souhaitez, saisir chacune des commandes ci-dessus tour à tour pour à la fois compiler, construire l'exécutable et éditer les liens de votre programme (respectivement). Heureusement, gnatmake aumotatise l'opération. Si vous examinez à présent votre répertoire, en plus du programme principal, vous constatez que GNAT, en plus du programme principal, a également créé d'autres fichiers, notamment :

En bref, à moins que vous ne projetiez de déboguer votre programme, vous pouvez supprimer ces fichiers.


7. Explication : Bonjour monde

En Perl, vous pouvez saisir une commande telle que print("Bonjour"); qui soit la seule ligne de votre programme (à l'exclusion de la ligne de début) et il s'exécutera.

Ada cependant, a besoin qu'on lui indique exactement quels sont les paquetages à utiliser avant de pouvoir exécuter même la plus simple des commandes, comme les instructions echo à l'écran. Un paquetage est une collection de fonctions et de procédures qui effectuent des tâches données. Si vous ne les déclarez pas explicitement au début du programme, GNAT, au moment de le compiler, se fermera immédiatement.

Par conséquent, si nous souhaitons lire et écrire (E/S) (Entrée / Sortie) vers un terminal d'écran, il faut en faire état. Toutes les fonctions d'E/S se trouvent dans le paquetage text_io et les deux premières lignes de notre exemple bonjour_monde sont cruciales...


 with text_io;
use text_io;

L'instruction with en Ada indique que nous aurons besoin du paquetage nommé, dans ce cas text_io. S'il faut plus d'un paquetage, il est possible de l'ajouter en séparant chaque nom de paquetage par une virgule (,). Quand c'est terminé, nous ajoutons un point-virgule (;) à la fin de la ligne, similaire à celui de Perl. L'instruction with est une commande obligatoire qui doit TOUJOURS être présente au début de votre programme pour qu'il puisse fonctionner.

Le paquetage text_io, comme je l'ai déjà précisé, permet les fonctions procédures d'E/S. Ceci implique l'affichage de messages à l'écran, la saisie de l'entrée utilisateur, etc. C'est un paquetage utilisé dans pratiquement tout programme que vous écrirez jamais en Ada.

L'instruction use ne DOIT être employée qu'après l'instruction with. Elle permet de faire des références non qualifiées à des procédures et fonctions à partir d'autres paquetages. Sans l'utilisation de cette instruction, chaque appel de procédure ou de fonction porter le nom du paquetage auquel il appartient, suivi d'un point (arrêt complet) le précédéent. Par exemple, voici à quoi ressemblerait le programme bonjour_monde sans l'instruction use.


with text_io;
  
  procedure bonjour_monde is  

  begin

    text_io.put("Bonjour monde !"); 

  end bonjour_monde;

Vous pouvez constater à quel point cela a augmenté la quantité d'informations à saisir, si l'on n'emploie pas l'instruction use. Quand on utilise plus d'un paquetage susceptible d'avoir les mêmes noms de procédure ou de fonction, le compilateur peut en principe indiquer à quel paquetage vous faites référence, en fonction des paramètres qui lui ont été passés.

La troisième ligne :


procedure bonjour_monde is  

déclare que nous écrivons une nouvelle procédure avec le nom bonjour_monde. L'instruction is nous indique que nous allons démarrons la section délarative de la procédure. Nous y reviendrons ultérieurement.

Le mot-clé :


begin

nous indique ensuite que nous allons démarrer la partie exécutable de la procédure, c'est-à-dire là où toutes les instructions apparaîtront et seront exécutées, ce qui correspond dans notre cas à :


put("Bonjour monde !")

Cette commande appelle la procédure put à partir du paquetage text_io pour afficher le message « Bonjour monde ! » à l'écran.

La dernière ligne :


end bonjour_monde;

termine simplement la procédure nommée.

En bref, voici à quoi ressemble la structure de base d'un programme Ada :


with text_io;
use text_io;

procedure nom_programme is 

      [ partie déclarative ici ]

begin

      [ section exécutable ici ]  

end nom_programme;

De plus, avec le paquetage text_io, on a des commandes telles que :

Plus beaucoup d'autres...

Note

Cette instruction sur le point-virgule (;) vaut pour chaque commande que vous saisissez en Ada.


8. Exercices

C'est tout pour cet article. Je n'explique peut-être pas assez, mais tenter de creuser davantage à ce stade serait excessif. Je vous laisse à quelques exercices pour vous faire la main...

  1. Affichez votre nom sur l'écran.

  2. Affichez votre adresse sur l'écran, en n'utilisant que put et new_line.

  3. Répétez cet exercice, cette fois avec la commande put_line.

 
with text_io, ada.integer_text_io;
use text_io, ada.integer_text_io;

procedure bonne_programmation is

loop_number : integer :=0;

begin

  while loop_number /= 10 loop
    loop_number := loop_number + 1;
    put("Bonne programmation en Ada");
    new_line;
  end loop;

end bonne_programmation; 

Je m'appelle Thomas Adam. Âgé de 18 ans, j'étudie actuellement pour passer l'examen d'entrée à l'université (A-Levels). J'habite dans une petite ferme, dans le comté de Dorset, en Angleterre. Je suis un fervent partisan de Linux et j'essaie de résoudre les problèmes de serveurs mandataires (proxy) sous Linux lorsque je suis en classe. J'utilise Linux depuis environ six ans maintenant. Sinon, je joue du piano, j'aime la marche et le cyclisme.

Notes

[1]

Il semble que le projet initial ne soit plus maintenu (N. d. T.).

[2]

Ce paquetage semble introuvable (N. d. T.).