From: Samuel Tardieu <sam@rfc1149.net>
Newsgroups: fr.comp.lang.ada,fr.usenet.reponses
Subject: [FAQ] fr.comp.lang.ada
Supersedes: <fr.comp.lang.faq-ada-1042778580.528465@godet.glou.org>
Followup-To: poster
Date: Sun, 2 Feb 2003 04:42:55 GMT
Approved: fr-reponses@frmug.org
User-Agent: MaintFaq version 2.1b
Expires: Wed, 19 Feb 2003 04:42:55 GMT
Message-ID: <fr.comp.lang.faq-ada-1044160975.334079@godet.glou.org>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
Summary: Questions fréquemment posées sur le groupe de discussion
    fr.comp.lang.ada, dédié au langage Ada
X-No-Productlink: yes
X-Modified: yes
Lines: 846
Path: asynchrone!news.stben.net!news.glou.org!fr-chartes!maintfaq
Xref: asynchrone fr.comp.lang.ada:1076 fr.usenet.reponses:8897

WWW-Archive-Name: http://www.rfc1149.net/fcla/
Last-Modified: Wed, 29 Jan 2003 14:36:02 +0100
Maintainer: sam@rfc1149.net (Samuel Tardieu)
Archive-Name: fr/comp/lang/faq-ada


FAQ fr.comp.lang.ada

Samuel Tardieu

   École Nationale Supérieure des Télécommunications
   Département Informatique et Réseaux

   Copyright © 2001,2002,2003 par Samuel Tardieu et les différents
   auteurs des réponses
   Historique des versions
   Version 0.106 Wed, 29 Jan 2003 14:36:02 +0100

   Cet article est livré en l'état, sans garantie déclarée ni implicite.
   Bien que tous les efforts aient été déployés pour s'assurer de la
   validité des informations contenues dans ce document, l'auteur ne
   pourra être tenu pour responsable d'erreurs, ou d'omissions, ni
   d'éventuels dommages résultant de leur utilisation.

   Ce document peut être librement copié et distribué pour peu qu'il le
   soit dans son intégralité et que notamment cette notice soit conservée
   intacte. L'origine de ce document ne doit pas être dissimulée ou
   transformée.
     _________________________________________________________________

   Table des matières
   1. Généralités
   2. Le langage Ada
   3. Bibliothèques
   4. Compilateurs et outils
   5. Sociétés et associations liées à Ada
     _________________________________________________________________

1. Généralités

   1.1. Qu'est ce qu'une FAQ?
   1.2. Qu'est-ce que cette FAQ?
   1.3. Que puis-je trouver ici?
   1.4. Je ne trouve pas de réponse à ma question
   1.5. Une réponse est fausse ou incomplète!
   1.6. Mais qui écrit cette FAQ?
   1.7. Où trouver la dernière version de cette FAQ?
   1.8. Dans quel format cette FAQ est-elle disponible?
   1.9. Il faudrait rajouter une question/réponse
   1.10. Écrit-on ada, ADA ou Ada?
   1.11. Quel type de contenu est approprié sur le groupe
          fr.comp.lang.ada?

   1.12. Est-il possible d'accéder au groupe fr.comp.lang.ada par
          courrier électronique?

   1.13. Existe-t-il une archive de ce groupe?
   1.14. J'ai l'impression que vous favorisez tel ou tel produit ou
          vendeur, est-ce le cas?

   1.15. Où trouver des pointeurs sur le langage Ada?
   1.16. Où puis-je trouver un cours d'Ada?
   1.17. J'ai un devoir à faire en Ada, pouvez-vous m'aider?
   1.18. Qui utilise Ada en France?

   1.1. Qu'est ce qu'une FAQ?

   Une FAQ (Foire Aux Questions, ou Frequently Asked Questions en
   anglais) est un endroit qui centralise les questions courantes sur un
   thème donné, et qui propose des réponses.

   1.2. Qu'est-ce que cette FAQ?

   Cette FAQ est consacrée au groupe de discussions fr.comp.lang.ada,
   consacré au langage de programmation Ada.

   1.3. Que puis-je trouver ici?

   Vous trouverez dans cette FAQ des réponses aux questions les plus
   fréquemment posées dans le groupe fr.comp.lang.ada.

   1.4. Je ne trouve pas de réponse à ma question

   Si vous ne trouvez pas de réponse à votre question dans cette FAQ,
   vous êtes invité à la poser dans le groupe fr.comp.lang.ada. Cette FAQ
   a été construite à partir des questions fréquemment posées. Ce n'est
   pas parce qu'une question n'apparaît pas ici qu'elle n'est pas
   intéressante voire importante.

   1.5. Une réponse est fausse ou incomplète!

   N'hésitez pas à soumettre des changements à Samuel Tardieu, ils seront
   accueillis avec gratitude.

   1.6. Mais qui écrit cette FAQ?

   Cette FAQ a été créée et est actuellement maintenue par Samuel
   Tardieu. Les réponses, conseils et corrections fournis par les
   personnes suivantes ont servi à la construire: Nicolas Brunot, Damien
   Carbonne, Olivier Devuns, Lionel Draghi, Alexandre Duret-Lutz, Daniel
   Feneuille, Guillaume Foliard, Tristan Gingold, Laurent Guerby, Jérôme
   Haguet, Peter Hermann, Jérôme Marant, Sébastien Martin, Gautier de
   Montmollin, Matthieu Moy, Pascal Obry, Pascal Pignard, Thomas Quinot,
   Jean-Pierre Rosen, Claude Simon, Samuel Tardieu, Léopold Weinberg.

   1.7. Où trouver la dernière version de cette FAQ?

   La dernière version se trouve sur le site www.rfc1149.net.

   1.8. Dans quel format cette FAQ est-elle disponible?

   Cette FAQ est disponible:
     * au format HTML
     * en tant qu'un seul gros fichier au format HTML
     * au format PDF
     * au format Postscript
     * au format DVI
     * au format Plucker pour PalmOS; Plucker est un lecteur de document
       pour PalmOS disponible gratuitement et sous licence de Logiciel
       Libre sur le site de Plucker
     * au format texte seul
     * au format RTF

   1.9. Il faudrait rajouter une question/réponse

   Si vous pensez qu'une question ou une réponse supplémentaire mérite
   d'être ajoutée dans ce document, envoyez un courrier électronique à
   Samuel Tardieu.

   1.10. Écrit-on ada, ADA ou Ada?

   Le nom du langage vient de lady Ada, comtesse de Lovelace. L'écriture
   correcte est donc «Ada», et non pas «ADA» comme il a été écrit par le
   passé.

   1.11. Quel type de contenu est approprié sur le groupe
   fr.comp.lang.ada?

   Le groupe fr.comp.lang.ada est dédié aux discussions autour des
   différentes versions du langage Ada. Les conseils d'utilisation de
   fr.comp.lang.ada détaillent ce qui est approprié.

   1.12. Est-il possible d'accéder au groupe fr.comp.lang.ada par
   courrier électronique?

   Une passerelle bidirectionnelle vous permet de recevoir le groupe
   fr.comp.lang.ada par courrier électronique ainsi que d'y participer.
   Voir http://ada.eu.org/mailman/listinfo/fr.comp.lang.ada.

   1.13. Existe-t-il une archive de ce groupe?

   Les archives de ce groupe de discussions sont disponibles sur Google
   Groups.

   1.14. J'ai l'impression que vous favorisez tel ou tel produit ou
   vendeur, est-ce le cas?

   Absolument pas. Si vous pensez qu'il manque quelque chose, ou qu'un
   point de vue est biaisé, n'hésitez pas à contacter Samuel Tardieu; il
   s'agit probablement d'un malentendu.

   1.15. Où trouver des pointeurs sur le langage Ada?

   L'Open Directory Project a une section Ada en français.

   1.16. Où puis-je trouver un cours d'Ada?

   Le cours de Daniel Feneuille donné à l'IUT d'Aix-en-Provence est
   disponible sur le site d'ACT Europe.

   1.17. J'ai un devoir à faire en Ada, pouvez-vous m'aider?

   La réponse est simple: NON. Si vous avez une question précise sur Ada,
   posez la et vous aurez probablement une réponse. Par contre, personne
   ne fera votre devoir à votre place.

   1.18. Qui utilise Ada en France?

   Ada est utilisé, entre autres:
     * chez Thales, dans les radars, les systèmes de contrôles aériens,
       l'avionique embarquée
     * dans l'industrie ferroviaire (systèmes de contrôle des trains)
     * pour la télévision numérique (Canal+)
     * dans le milieu banquaire (BNP)
     * pour le contrôle commande des centrales nucléaires palier N4
     * dans le domaine des systèmes d'information à EDF R&D

   Il est cependant probable qu'un certain nombre de sociétés utilisent
   Ada mais n'éprouvent pas le besoin de l'afficher à l'extérieur.
     _________________________________________________________________

2. Le langage Ada

   2.1. Comment transformer un entier en chaîne de caractères?
   2.2. Comment transformer une chaîne de caractères en entier?
   2.3. Comment obtenir le code ASCII d'un caractère?
   2.4. Est-il possible de définir un nouvel attribut (par exemple Somme,
          qui ferait la somme de plusieurs valeurs d'un type donné)?

   2.5. Comment obtenir le minimum (resp. maximum) de deux entiers?
   2.6. Comment saisir une chaîne de caractères de taille variable?
   2.7. Pourquoi après un Ada.Text_IO.Get_Line le curseur ne se trouve
          t'il pas en début de la ligne suivante?

   2.8. Quel est le caractère de fin de chaîne?
   2.9. Comment récupérer la ligne de commande?
   2.10. Comment effacer l'écran?
   2.11. Comment tracer un trait?
   2.12. Comment effacer l'écran sous Windows?
   2.13. Comment libérer un pointeur?
   2.14. Doit-on vraiment instancier Ada.Unchecked_Deallocation pour
          chaque type?

   2.15. Existe-t-il un ramasse-miettes pour Ada?
   2.16. Comment créer une chaîne de caractères de taille inconnue a
          priori?

   2.17. Est-il possible de gérer les chaînes de caractères comme en C?
   2.18. Est-il possible de gérer des chaînes de caractères de taille
          variable?

   2.19. Que signifie le pragma Pure?
   2.20. Comment convertir une chaîne de caractères en minuscules?
   2.21. Comment faire des opérations bit à bit?
   2.22. Est-il possible d'obtenir des tranches de tableaux
          multi-dimensionnels?

   2.23. Comment attendre un temps donné?
   2.24. Comment effectuer un tirage aléatoire?
   2.25. Où se trouvent les fonctions mathématiques?
   2.26. Comment augmenter la taille de la pile d'une tâche?
   2.27. Comment écrire un paquetage générique prenant, en paramètre, une
          classe dérivée d'une classe donnée?

   2.1. Comment transformer un entier en chaîne de caractères?

   En Ada, les types scalaires tels que les entiers, les réels et les
   types énumérés disposent d'un attribut Image qui permet d'obtenir une
   chaîne de caractères à partir d'une valeur de ce type et un attribut
   Value qui permet d'effectuer l'opération inverse. L'usage de ces deux
   attributs est illustré dans l'Exemple 1.

   Exemple 1. Renvoyer une chaîne contenant un montant en Euros
function Euros (Montant : Natural) return String is
begin
  return Natural'Image (Montant) & "EUR";
end Euros;

   2.2. Comment transformer une chaîne de caractères en entier?

   Comme indiqué dans la question précédente, les types scalaires
   disposent d'un attribut Value, comme illustré dans l'Exemple 2.

   Exemple 2. Lire la valeur d'un entier
A : constant Integer := Integer'Value ("10");  -- A vaut 10

   2.3. Comment obtenir le code ASCII d'un caractère?

   Dans ce cas également, des attributs sur le type Character existent:
   Pos, qui sert à obtenir la position d'une valeur dans le type énuméré
   qui le définit, et Val qui effectue l'opération inverse. L'Exemple 3
   illustre l'utilisation de ces attributs.

   Exemple 3. Obtenir le code ASCII d'un caractère
X : constant Integer   := Character'Pos ('A');  -- X vaut 65
Y : constant Character := Character'Val (66);   -- Y vaut 'B'

   2.4. Est-il possible de définir un nouvel attribut (par exemple Somme,
   qui ferait la somme de plusieurs valeurs d'un type donné)?

   Non. Seuls certains attributs existants peuvent être modifiés, mais en
   aucun cas un nouvel attribut ne peut être ajouté par l'utilisateur.

   2.5. Comment obtenir le minimum (resp. maximum) de deux entiers?

   Les types numériques disposent d'un attribut Min (resp. Max) qui
   permet d'obtenir le minimum (resp. le maximum) de deux nombres de ce
   type. L'Exemple 4 présente l'utilisation de ces attributs.

   Exemple 4. Maximum de deux entiers
--  La fonction suivante retourne le double du maximum de deux entiers
function Double_Maximum (X, Y : Integer) return Integer is
begin
   return 2 * Integer'Max (X, Y);
end Double_Maximum;

   2.6. Comment saisir une chaîne de caractères de taille variable?

   On peut utiliser Ada.Text_IO.Get_Line, qui prend deux paramètres en
   lecture/écriture. Le deuxième paramètre contient la position du
   dernier caractère dans le tampon de saisie, comme illustré dans
   l'Exemple 5.

   Exemple 5. Lire une chaîne de taille variable
with Ada.Text_IO;
[...]
declare
   Buffer : String (1 .. 30);         -- Tampon de 30 caractères
   Last   : Natural;
begin
   Ada.Text_IO.Get_Line (Buffer, Last);   -- Lit au plus 30 caractères

   if Last = 0 then
      Ada.Text_IO.Put_Line ("Vous n'avez entré aucun caractère");
   else
      Ada.Text_IO.Put_Line ("Ok, vous avez entré: " & Buffer (1 .. Last));
   end if;
end;

   2.7. Pourquoi après un Ada.Text_IO.Get_Line le curseur ne se trouve
   t'il pas en début de la ligne suivante?

   Si l'utilisateur rentre le nombre de caractères maximum fixé par le
   second paramètre de Get_Line, la saisie s'arrêtera à ce moment là et
   aucun retour chariot ne sera pris en compte. Une solution consiste à
   utiliser Ada.Text_IO.Set_Col (Ada.Text_IO.Standard_Input, 1) avant une
   nouvelle entrée ou une nouvelle sortie.

   2.8. Quel est le caractère de fin de chaîne?

   Aucun. Pour le langage C, une chaîne est uniquement une suite de
   caractères terminée par un caractère NUL (0). Ada dispose pour sa part
   d'un véritable type String qui permet de réprésenter une chaîne de
   caractères à l'aide de sa longueur, et non pas à l'aide d'un caractère
   arbitraire.

   2.9. Comment récupérer la ligne de commande?

   En utilisant le paquetage standard Ada.Command_Line, qui offre
   notamment les fonctions Argument_Count et Argument.

   2.10. Comment effacer l'écran?

   Cette question est trop imprécise: on n'utilisera pas la même méthode
   pour effacer l'écran sous DOS, sous Windows ou sous X-Window. Il n'y a
   pas de méthode normalisée en Ada.

   2.11. Comment tracer un trait?

   Même réponse que dans la Q : 2.10. ci-dessus: la question n'est pas
   assez précise.

   2.12. Comment effacer l'écran sous Windows?

   Il est possible d'utiliser le paquetage NT_Console.

   2.13. Comment libérer un pointeur?

   Il faut instancier la procédure générique Ada.Unchecked_Deallocation.
   L'instance fournit une procédure permettant de libérer un pointeur du
   type voulu, comme illustré dans l'Exemple 6.

   Exemple 6. Désallouer une zone mémoire
with Ada.Unchecked_Deallocation;

package Foo is
   type Tab is array (Natural range <>) of Integer;
   type Tab_Access is access Tab;
   procedure Free is
      new Ada.Unchecked_Deallocation (Tab, Tab_Access);
   --  Si on a une variable T de type Tab_Access, on
   --  peut maintenant invoquer Free (T).
end Foo;

   2.14. Doit-on vraiment instancier Ada.Unchecked_Deallocation pour
   chaque type?

   Oui. Cependant, en utilisant la programmation «class-wide», il est
   possible de créer un déallocateur pour l'ensemble de la hiérarchie,
   avec une seule instanciation.

   2.15. Existe-t-il un ramasse-miettes pour Ada?

   Très peu d'implémentations proposent un ramasse-miettes[1]. En règle
   générale, seuls les compilateurs ciblant la machine virtuelle Java en
   fournissent un. Si un compilateur Ada cible la machine virtuelle .NET,
   il est probable qu'il utilisera le ramasse-miettes sous-jacent.
   Cependant, le paquetage Ada.Finalization permet de contrôler la
   déallocation profonde d'un objet qui sort du contexte dans lequel il
   est défini.

   2.16. Comment créer une chaîne de caractères de taille inconnue a
   priori?

   Il faut initialiser la chaîne de caractères au moment de sa création,
   comme dans l'Exemple 7.

   Exemple 7. Création de chaîne
S : String := "ma chaîne"         -- S est de taille 9
T : String := F (X, Y);           -- T aura la taille requise
U : constant String := "bonjour"; -- U est de taille 7 et non modifiable

   2.17. Est-il possible de gérer les chaînes de caractères comme en C?

   Oui, c'est possible, en utilisant un type «pointeur sur chaîne de
   caractères», mais il existe la plupart du temps de meilleures
   solutions.

   2.18. Est-il possible de gérer des chaînes de caractères de taille
   variable?

   Il existe un type standard Ada.Strings.Unbounded.Unbounded_String qui
   permet de créer des chaînes de caractères de taille variable. Lorsque
   l'on connaît la taille maximale de la chaîne, le type standard
   Ada.Strings.Bounded.Bounded_String est généralement plus efficace.

   2.19. Que signifie le pragma Pure?

   Cette directive de compilation signifie que le paquetage auquel elle
   s'applique ne contient que des sous-programmes sans effet de bord, et
   déterministes. En gros, les sorties ne dépendent que des entrées, et
   pas d'un quelconque état interne ou externe.

   2.20. Comment convertir une chaîne de caractères en minuscules?

   Il faut utiliser la fonction To_Lower du paquetage
   Ada.Characters.Handling.

   2.21. Comment faire des opérations bit à bit?

   En Ada, les opérations bit à bit se font sur les types modulaires. Les
   opérations and, not, or et xor sont définies. Le paquetage standard
   Interfaces définit des opérations de décalage supplémentaires.

   2.22. Est-il possible d'obtenir des tranches de tableaux
   multi-dimensionnels?

   Non.

   2.23. Comment attendre un temps donné?

   Il faut utiliser l'instruction delay suivie d'un nombre de secondes en
   virgule fixe (type Duration), comme illustré dans l'Exemple 8.

   Exemple 8. Attendre deux secondes et demie
delay 2.5;    -- Attends 2,5 secondes

   2.24. Comment effectuer un tirage aléatoire?

   Ada propose plusieurs paquetages de gestion de nombres aléatoires. Le
   plus simple, pour obtenir un élément parmi une énumération, est
   d'utiliser Ada.Numerics.Discrete_Random, un paquetage générique qu'il
   faut instancier avec un type représentant l'ensemble tel qu'illustré
   dans l'Exemple 9. Pour un tirage aléatoire sur un nombre réel, il est
   possible d'utiliser le paquetage Ada.Numerics.Float_Random qui permet
   d'obtenir une variable aléatoire uniforme entre 0 et 1.

   Exemple 9. Tirer un nombre entre 0 et 36
with Ada.Numerics.Discrete_Random;
procedure Test is
   type Numero is range 0 .. 36;
   package La_Roulette is new Ada.Numerics.Discrete_Random (Numero);
   use La_Roulette;    -- Rend Generator, Reset et Random visibles
   A : Numero;
begin
   Reset (G);          -- Initialise le générateur (à faire une seule fois)
   A := Random (G);    -- Tire un nombre au hasard entre 0 et 36
end Test;

   2.25. Où se trouvent les fonctions mathématiques?

   Les fonctions mathématiques élémentaires (comme la racine carrée) se
   trouvent dans le paquetage Ada.Numerics.Elementary_Functions. Les
   fonctions présentent dans ce paquetage permettent de travailler sur le
   type de base Float.

   Pour utiliser de telles fonctions avec un autre type de nombres
   flottants, il faut utiliser une instantiation du paquetage générique
   Ada.Numerics.Generic_Elementary_Functions.

   2.26. Comment augmenter la taille de la pile d'une tâche?

   La directive de compilation Storage_Size permet de donner la taille,
   en unités de stokage (octets en pratique), de la pile d'une tâche ou
   d'un type de tâche, comme illustré dans l'Exemple 10.

   Exemple 10. Choisir la taille de la pile d'une tâche
task T is
   pragma Storage_Size (300_000);   -- 300 kilo-octets pour la pile
end T;

task body T is
  [...]
end T;

   2.27. Comment écrire un paquetage générique prenant, en paramètre, une
   classe dérivée d'une classe donnée?

   L'Exemple 11 montre un paquetage générique prenant en paramètre une
   classe dérivée d'une autre classe, appelée ici Classe_Abstraite.

   Exemple 11. Paquetage générique et classe dérivée
with Abstrait;
generic
   type Classe_Concrete is new Abstrait.Classe_Abstraite with private;
package Generic_Test is
  [...]
end Generic_Test;
     _________________________________________________________________

3. Bibliothèques

   1. Bibliothèques diverses

        3.1.1. Existe-t-il l'équivalent de la STL de C++ en Ada?
        3.1.2. Existe-t-il une bibliothèque XML en Ada?
        3.1.3. Existe-t-il une bibliothèque Posix en Ada?
        3.1.4. Comment accéder à une base de données depuis Ada?

   2. Programmation réseau

        3.2.1. Comment utiliser des sockets en Ada?
        3.2.2. Existe-t-il un serveur WWW en Ada?
        3.2.3. Existe-t-il une implémentation de SOAP en Ada?
        3.2.4. Est-il possible de programmer des systèmes répartis en Ada
                pur?

   3. GtkAda

        3.3.1. Qu'est-ce que GtkAda?
        3.3.2. GtkAda permet-il de créer des contrôles dynamiquement?
        3.3.3. Quelle version de GtkAda utiliser?
        3.3.4. Peut-on créer une application graphiquement avec GtkAda?

1. Bibliothèques diverses

   3.1.1. Existe-t-il l'équivalent de la STL de C++ en Ada?

   Il n'existe pas d'équivalent strict à la STL. Toutefois, d'autres
   ensembles de paquetages peuvent la remplacer avantageusement:
     * La Ada Standard Generic Library.
     * Les composants Booch.
     * Les composants Ada, disponibles sur le site d'AdaLog.

   3.1.2. Existe-t-il une bibliothèque XML en Ada?

   XML/Ada est disponible sur le site de développement de Logiciel Libre
   d'ACT Europe.

   3.1.3. Existe-t-il une bibliothèque Posix en Ada?

   Il y en a une pour l'ensemble des systèmes Posix, appelée Florist. Une
   version spécifique pour Windows est nommée Win32POSIX.

   3.1.4. Comment accéder à une base de données depuis Ada?

   Le projet GNADE, disponible librement sur
   http://www.sourceforge.net/projects/gnade, a pour ambition de donner
   accès à toutes sortes de bases de données depuis Ada.

   Une bibliothèque spécifique pour PostgreSQL est disponible librement
   sur http://www.rfc1149.net/devel/pgada.

2. Programmation réseau

   3.2.1. Comment utiliser des sockets en Ada?

   La distribution AdaSockets permet d'utiliser les sockets BSD en Ada
   sous Unix, Windows et OpenVMS. Il existe également une liste de
   diffusion (en anglais) qui traite des aspects techniques de
   AdaSockets.

   De plus, GNAT offre depuis la version 3.14 un paquetage appelé
   GNAT.Sockets permettant de faire des sockets basiques.

   3.2.2. Existe-t-il un serveur WWW en Ada?

   AWS, de Pascal Obry et Dmitriy Anisimkov, permet d'inclure un
   mini-serveur WWW dans une application Ada, permettant ainsi de
   l'instrumenter et de l'interroger à distance. Un ensemble de services
   tels que le module de session ou la gestion du push facilite le
   développement d'applications web. AWS permet également l'utilisation
   de SSL pour une connexion sécurisée. Cet environnement de
   développement dispose également d'une liste de diffusion.

   3.2.3. Existe-t-il une implémentation de SOAP en Ada?

   AWS, depuis la version 1.1, vous permet d'ajouter une interface SOAP à
   vos applications basées sur le protocole HTTP.

   3.2.4. Est-il possible de programmer des systèmes répartis en Ada pur?

   La norme Ada 95 définit, dans son annexe E, une manière de faire des
   systèmes répartis en Ada. Seul le compilateur GNAT implémente à
   l'heure actuelle cette annexe, appelée GLADE (à ne pas confondre avec
   Glade, le compilateur d'interface pour GtkAda, voir question Q :
   3.3.4.).

3. GtkAda

   3.3.1. Qu'est-ce que GtkAda?

   GtkAda est une bibliothèque permettant, sous Unix ou sous Windows, de
   créer des applications graphiques portables.

   3.3.2. GtkAda permet-il de créer des contrôles dynamiquement?

   Tout à fait; son interface ressemble à Delphi ou à Visual Basic.

   3.3.3. Quelle version de GtkAda utiliser?

   GtkAda pour Unix est numéroté 1.2.x, tandis que GtkAda pour Windows
   utilise la numérotation 1.3.x.

   3.3.4. Peut-on créer une application graphiquement avec GtkAda?

   C'est possible: GtkAda est interfacé avec Glade, un outil permettant
   de construire des interfaces graphiques (attention, ne pas confondre
   Glade, le compilateur d'interface, avec l'implémentation des systèmes
   répartis pour GNAT, qui porte le même nom, voir question Q : 3.2.4.).
     _________________________________________________________________

4. Compilateurs et outils

   Cette section répond à des questions techniques concernant les
   compilateurs et les outils associés.

   1. Outils génériques

        4.1.1. Existe-t-il un outil permettant de créer un programme C à
                partir d'un programme Ada?

        4.1.2. Existe-t-il un outil similaire à JavaDoc pour Ada?
        4.1.3. Existe-t'il un Ada pour Mac OS?
        4.1.4. Où trouver un environnement Ada95 graphique en logiciel
                libre pour Windows?

   2. GNAT

        4.2.1. Existe-t-il un dévermineur pour GNAT?
        4.2.2. Comment s'assurer que son code est compatible Ada 83?
        4.2.3. Existe-t-il des IDE pour GNAT?
        4.2.4. GNAT 3.14p fonctionne-t'il sur toutes les versions de
                Windows?

        4.2.5. Comment lancer un exécutable depuis un programme Ada?
        4.2.6. À quoi correspondent les fichiers .ali générés par GNAT?
        4.2.7. Comment déclarer une variable locale de plusieurs
                centaines de Ko avec GNAT?

        4.2.8. Comment lire le contenu d'un répertoire?
        4.2.9. Quel est le nom de l'exécutable du compilateur GNAT?
        4.2.10. Comment installer GNAT sous Debian GNU/Linux?
        4.2.11. J'utilise GNAT, est-ce que mon code doit être livré sous
                licence GPL? (en logiciel libre)

        4.2.12. Comment faire pour que mon application GNAT sous Windows
                n'ouvre pas de fenêtre console?

        4.2.13. Comment réduire la table de mon exécutable compilé avec
                GNAT?

1. Outils génériques

   4.1.1. Existe-t-il un outil permettant de créer un programme C à
   partir d'un programme Ada?

   Le compilateur d'Averstar permet de générer du C à partir d'un source
   Ada.

   4.1.2. Existe-t-il un outil similaire à JavaDoc pour Ada?

   Le projet AdaDoc de Julien Burdy et Vincent Decorges permet d'extraire
   des informations à partir d'un fichier source en Ada et de générer des
   pages HTML. Il est aussi possible d'utiliser AdaBrowse, qui génère des
   pages avec références croisées.

   4.1.3. Existe-t'il un Ada pour Mac OS?

   Un portage de GNAT pour MacOS 9 a d'abord été connu de façon
   confidentielle à travers les outils payants de Tenon (CodeBuilder).
   GNAT, depuis son intégration dans GCC 3.1, est disponible pour MacOS
   X, à partir du site http://www.adapower.net/macos.

   4.1.4. Où trouver un environnement Ada95 graphique en logiciel libre
   pour Windows?

   Il suffit de combiner GNAT et AdaGIDE, un éditeur graphique ciblant le
   langage Ada. On peut trouver GNAT à l'URL
   ftp://cs.nyu.edu/pub/gnat/3.14p/winnt/gnat-3.14p-nt.exe et AdaGIDE à
   l'URL ftp://ftp.usafa.af.mil/pub/dfcs/carlisle/adagide/.

2. GNAT

   4.2.1. Existe-t-il un dévermineur pour GNAT?

   La distribution source de GNAT inclut une modification de GDB, un
   dévermineur[2] très puissant, pour lui ajouter le support du langage
   Ada.

   De plus, l'interface graphique de GDB, appelée GVD (GNU Visual
   Debugger), a été développée entièrement en Ada.

   4.2.2. Comment s'assurer que son code est compatible Ada 83?

   Il faut utiliser le paramètre -gnat83 sur la ligne de commande de
   gnatmake.

   4.2.3. Existe-t-il des IDE pour GNAT?

   Il en existe plusieurs. On peut citer:
     * XEmacs ou Emacs, avec le mode Ada pour les systèmes Unix et
       Windows
     * GLIDE (fourni par ACT) intègre Emacs et le mode Ada pour les
       systèmes Unix et Windows
     * AdaGIDE est un système de développement complet sous Windows

   4.2.4. GNAT 3.14p fonctionne-t'il sur toutes les versions de Windows?

   GNAT 3.14p fonctionne sur Windows 95, Windows 98, Windows NT 4.0,
   Windows 2000, Windows ME et Windows XP. Cependant, il est conseillé
   d'utiliser Windows NT ou Windows 2000, qui sont plus stables que les
   autres.

   4.2.5. Comment lancer un exécutable depuis un programme Ada?

   Le paquetage GNAT.OS_Lib fournit deux sous-programmes, Spawn et
   Spawn_Non_Blocking, permettant respectivement de lancer en attendant
   un processus fils et de lancer sans attendre un processus fils.

   4.2.6. À quoi correspondent les fichiers .ali générés par GNAT?

   Ces fichiers contiennent des informations qui n'ont pas leur place
   dans le fichier objet (extension .o ou .obj selon les systèmes). Par
   exemple, un fichier foobar.ali contient, entre autres, la liste des
   paquetages dont dépendent foobar.ads et foobar.adb.

   4.2.7. Comment déclarer une variable locale de plusieurs centaines de
   Ko avec GNAT?

   La taille de la pile par défaut ne permet pas toujours de déclarer des
   variables locales importante. Il faut passer l'option --stack=XXX à
   l'éditeur de liens. Cela peut se faire en rajoutant -largs
   -Wl,--stack=0x8000000 (par exemple) à la fin de la ligne de commande
   de gnatmake.

   4.2.8. Comment lire le contenu d'un répertoire?

   GNAT fournit un paquetage GNAT.Directory_Operations.

   4.2.9. Quel est le nom de l'exécutable du compilateur GNAT?

   Cela dépend du système. Les distributions de GNAT distribuées par Ada
   Core Technologies prennent le nom gcc. Celles livrées en standard avec
   les distributions Linux, par exemple sur
   http://www.gnuada.org/alt.html, utilisent le nom gnatgcc, pour ne pas
   introduire de confusion involontaire avec le compilateur C. Les
   compilateurs livrés avec les distributions BSD (FreeBSD, NetBSD et
   OpenBSD) sont disponibles sous le nom adagcc.

   Toutefois, GNAT 5.0 sera basé sur la version courante de GCC. Le
   compilateur sera donc disponible sous le nom gcc, tout comme les
   autres langages.

   4.2.10. Comment installer GNAT sous Debian GNU/Linux?

   GNAT est disponible sous forme de paquet pour Debian GNU/Linux que ce
   soit pour architecture Intel, Sparc ou PowerPC. Pour l'installer, il
   faut utiliser la commande apt-get install gnat en mode
   super-utilisateur (root). La documentation peut être installée en
   tapant apt-get install gnat-doc.

   4.2.11. J'utilise GNAT, est-ce que mon code doit être livré sous
   licence GPL? (en logiciel libre)

   Le code du compilateur est sous licence GPL, ce qui signifie que si
   vous souhaitez distribuer un compilateur Ada basé sur GNAT, alors vous
   devrez conserver cette licence.

   Par contre, les bibliothèques Ada livrées avec GNAT ont une clause
   supplémentaire par rapport à la licence GPL standard, qui précise bien
   que vous avez le droit de les instancier ou de les utiliser sans que
   cela vous force à faire quoi que ce soit.

   La réponse à cette question est donc: non, ce n'est pas parce que vous
   utilisez GNAT que vous devez livrer votre code sous licence GPL. Vous
   êtes tout à fait libres de choisir la licence que vous souhaitez,
   comme avec n'importe quel autre compilateur Ada.

   4.2.12. Comment faire pour que mon application GNAT sous Windows
   n'ouvre pas de fenêtre console?

   Comme indiqué dans la documentation de GNAT, il faut rajouter l'option
   -largs -mwindows à la fin de la ligne de commande de gnatmake.

   4.2.13. Comment réduire la table de mon exécutable compilé avec GNAT?

   Il est possible de demander à gnatmake de supprimer les symboles
   additionnels utilisés pour le déverminage, en ajoutant -largs -s à la
   ligne de commande.
     _________________________________________________________________

5. Sociétés et associations liées à Ada

   1. Associations dédiées à Ada

        5.1.1. Existe-t-il une association Ada-France?
        5.1.2. Qu'est-ce que l'association Ada-Europe?

   2. Sociétés liées à Ada

        5.2.1. Quelles sociétés fournissent des compilateurs Ada?
        5.2.2. Quelles sociétés vendent des formations Ada?

1. Associations dédiées à Ada

   5.1.1. Existe-t-il une association Ada-France?

   Oui. Cette association de loi 1901 est dédiée à la promotion du
   langage Ada dans les pays francophones. Elle dispose d'un site WWW,
   organise depuis 2001 un concours annuel (primé) de programmation en
   Ada, et est membre de l'association Ada Europe.

   5.1.2. Qu'est-ce que l'association Ada-Europe?

   L'association Ada Europe regroupe les associations Ada nationales,
   comme l'association Ada-France.

2. Sociétés liées à Ada

   5.2.1. Quelles sociétés fournissent des compilateurs Ada?

   Voici une liste non exhaustive des fabricants de compilateurs Ada:
     * Ada Core Technologies (ACT) et sa branche européenne ACT Europe
     * Aonix
     * DDC
     * GreenHills
     * Rational

   5.2.2. Quelles sociétés vendent des formations Ada?

   Voici une liste non exhaustive de sociétés fournissant des formations
   Ada en France:
     * ACT Europe
     * AdaLog
     * Aonix

  Notes

   [1]

   «garbage collector» en anglais
   [2]

   «debugger» en anglais

