Copyright © 2002 Thomas Adam
Copyright © 2002 Joëlle Cornavin
Copyright © 2002 Encolpe Degoute
Article paru dans le n°81 de la Gazette Linux d'août 2002.
Traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.
Relecture de la traduction française par Encolpe Degoute
<encolpe POINT degoute CHEZ free POINT fr>
.
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.
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.
À 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 :
Avions
Systèmes de contrôle du trafic aérien
Systèmes financiers
Systèmes de télécommunications
Appareils médicaux
Cette liste n'est en aucun cas exhaustive !
À 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].
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 !
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 :
Coloration syntaxique ;
Prise en charge du compilateur ;
Définitions de mots-clés ;
Modèles prédéfinis.
Les deux que je vous conseille tout particulièrement sont :
TIA (TIny Ada) : un EDI basé de type console écrit en Ada et construit autour de l'utilisation de GNAT.
GRASP : un EDI X11 qui prend en charge entre autres langages, Ada !
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.
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 :
Les paquetages (modules), types et objets apparentés peuvent tous être définis.
Les paquetages et les types de données peuvent être rendus génériques.
La représentation des données offre un moyens de gérer la programmation système.
La programmation orientée objet est prise en charge.
Les erreurs peuvent être détectées et corrigées explicitement.
Les tâches (threads parallèles multiples) peuvent être créées et utilisées. Cette capacité est inhérente à Ada95 et peu commune dans la plupart des autres langages.
Les interfaces à d'autres langages (tels que C, Fortran, COBOL) peuvent être incluses dans le langage.
Ada prend en charge les types de données forts, pour à la fois l'entrée/la sortie textuelle et mathématique. En conséquence, Ada est bien adapté pour écrire et maintenir des systèmes complexes.
En plus des fonctionnalités, on trouve égalements celles-ci :
Les paquetages
Les fonctions
Les procédures
Les unités de tâches
Les enregistrements
Les tableaux
Ainsi que beaucoup d'autres...
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 :
.ads : spécification du paquetage Ada
.adb : corps ou programme du paquetage Ada
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 :
bonjour_monde.ali : les fichiers .ali sont des fichiers de liaison GNAT qui contiennent des informations sur le débogage et l'édition de liens pour le programme principal
bonjour_monde.o : les fichiers .ali sont des fichiers de liaison GNAT qui contiennent des informations sur le débogage et l'édition de liens pour le programme principal.
En bref, à moins que vous ne projetiez de déboguer votre programme, vous pouvez supprimer ces fichiers.
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 :
put : nous avons déjà parlé de son action.
put_line : fait la même chose que put, si ce n'est qu'elle commence sur une nouvelle ligne.
get
get_line
new_line : commande émise d'elle-même, qui démarre une nouvelle ligne. Si vous l'employez, veillez à placer un point-virgule à la fin, comme dans :
new_line; |
Plus beaucoup d'autres...
Cette instruction sur le point-virgule (;) vaut pour chaque commande que vous saisissez en Ada. |
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...
Affichez votre nom sur l'écran.
Affichez votre adresse sur l'écran, en n'utilisant que put et new_line.
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.
[1] | Il semble que le projet initial ne soit plus maintenu (N. d. T.). |
[2] | Ce paquetage semble introuvable (N. d. T.). |