FAQ du langage Ada ( présentation )

Questions et Réponses pour aimer Ada

Présentation…

Une FAQ de présentation pour le langage Ada, une FAQ qui répond aux questions auxquelles vous pensiez, et même celles auxquelles vous n’aviez peut-être pas pensé ( hihihi ). À qui s’adresse cette mini-FAQ : aux autodidactes consciencieux(ses), aux indépendant(e)s investi(e)s dans le développement d’applications et qui aimeraient préserver et capitaliser leurs créations logicielles ( capital d’autant plus précieux à préserver que l’on travail seul-e ) sur la durée, aux professionnel(le)s qui aimeraient pérenniser une solution soutenant la communication entre développeur(se)s sur un même source ou encore la reprise de projet par des équipes éventuellement différentes des équipes conceptrices, et enfin, aux scientifique de tous domaines ( pour les secteurs à doubles compétences ), qui aimeraient retrouver un langage aussi joli et esthétique que les formalismes qu’ils ou elles ont l’habitude de manipuler dans leurs explorations de leurs réalités quotidiennes. Cette FAQ s’adresse à vous, à toutes ces personnes, qui sont à la recherche de ce capital conception, ou plutôt, c’est Ada qui vous en parle à travers cette FAQ.

Dans cette page …

  1. Débuter : Ada est-il recommandable pour débuter en conception ou programmation ?
  2. Pascal : Le Pascal n’est-il pas préférable à Ada ?
  3. C : Ada n’est-il pas moins efficace que le C pour la programmation système ?
  4. Difficile : Ada n’est-il pas trop compliqué à aborder ?
  5. Actualité : Ada n’est-il pas vieux et démodé ?
  6. Verbosité : Pourquoi les codes ( les sources ) Ada sont-ils souvent si longs ?
  7. Compilateurs : Quels sont les compilateurs ou interpréteurs Ada disponibles ?
  8. Disponibilité : Pourquoi les compilateurs ou interpréteurs Ada sont-ils si rares ?
  9. Prestataires : Quiconque a-t-il ou a-t-elle le droit de créer un compilateur Ada ?
  10. Aider : Quelle est la meilleure manière de répondre à des questions sur le langage Ada ?
  11. Légalité : Les spécifications de Ada sont-elles publiques ?
  12. Rareté : Pourquoi Ada est-il si peu utilisé ou répandu ?
  13. Niches : Qui utilise Ada de nos jours ?
  14. Exceptions : Le modèle des exceptions en Ada n’est-il pas obsolète ou primitif ?
  15. « Class » : Pourquoi n’y a-t-il pas de mot clé « class » en Ada ?
  16. « Private » : Pourquoi peut-on trouver une section « private » dans les spécifications publiques ?
  17. Programme : Faut-il créer un fichier de spécification pour les programmes ?
  18. Coopération : Où rencontrer des personnes pour apprendre ou collaborer sur un projet Ada ?
  19. Support : Quelles sont les sociétés fournissant un support professionnel pour Ada ?
  20. GNAT : Qu’est-ce que GNAT ?
  21. Prononciation : Comment le sigle « GNAT » se prononce t-il ?
  22. Liens : Puis-je faire un ou des liens vers cette FAQ ?
  23. La suite…

Débuter : Ada est-il recommandable pour débuter en conception ou programmation ?

Oui, et il est même conseillé de débuter avec un langage verbeux et typé tel que Ada, ou à défaut, tel que Pascal. Apprendre avec un langage permissif ( comme le C ou le JavaScript ) et qui vous laisse tout faire, y compris et surtout des erreurs, fera regretter sur le tard, et peut-être trop tard, d’avoir pris de mauvaises habitudes. Il est également compréhensible que commencer avec un langage verbeux et typé pour éventuellement poursuivre plus tard ( en production par exemple ), avec un langage structurellement imposé, comme C ou JavaScript est préférable plutôt que le contraire. En effet, commencer avec C ou JavaScript, laissera dans l’incompréhension au moment d’aborder un langage plus stricte quand son besoin s’en fera sentir finalement. Enfin, les habitudes strictes prises avec Ada aident à maîtriser l’exécution de programmes écrits dans des langages dynamiques ou peu strictes. En d’autres mots, apprendre à programmer avec Ada, sera un bénéfice même pour écrire de meilleurs programmes en C ou en JavaScript, alors que l’inverse n’est pas démontrable : apprendre à programmer en C ou JavaScript, n’apprendra pas à écrire de meilleurs programmes dans d’autres langages ( et même bien au contraire ).

Pascal : Le Pascal n’est-il pas préférable à Ada ?

Non, car Ada n’est pas plus compliqué que Pascal, et peut même se montrer encore plus simple, car plus clair, si Ada est présenté avec une pédagogie adaptée ( l’erreur serait de copier telle-quelle la pédagogie Pascal pour la coller à Ada ). Ada étant plus verbeux et plus stricte que Pascal, Ada aidera même à apprendre à écrire de meilleur programmes Pascal par la suite ( voir la question précédente ). Un autre avantage est qu’Ada est standardisé avec précision : il y a un langage Ada, tandis qu’il exist des ( plusieurs ) dialectes Pascal incompatibles entre eux, même si certains compilateurs tentent de les émuler tous ( mais de manière toujours imparfaite et en tous les cas instable à travers le temps ).

C : Ada n’est-il pas moins efficace que le C pour la programmation système ?

Non, car Ada permet de spécifier les types de données et les conventions d’appels de procédures ou de fonctions, avec un niveau de précision et de clarté même plus élevé que ce que permet d’exprimer le C. Ainsi on pourra en Ada, par exemple dire qu’un type « T » est enregistré sur 17 bits et qu’il peut contenir des valeurs entières comprises entre « A » et « B », et indiquer que ce type « T » fonctionne avec une arithmétique en modulo « Z »… chose absolument impossible en C, ou alors au prix de « bricolages » hasardeux et non portables. Et justement, l’autre avantage de Ada sur le C, en ce qui concerne la programmation système, c’est la portabilité. Le C est un langage non-portable ( on crois que l’existence de compilateurs C pour diverses plateformes est un gage de portabilité, mais la portabilité ce n’est pas simplement la présence d’un compilateur pour une plateforme XYZ ), alors qu’un programme écrit en Ada aura exactement la même sémantique sur toutes les plateformes où il pourra être compilé. La programmation concurrente et les tâches sont plus fiables en Ada qu’avec n’importe bibliothèque spécialisée : la programmation concurrente et les tâches sont des concepts intrinsèques du langage Ada et de sa runtime ( librairie implémentant la sémantique du langage ), et peuvent directement bénéficier de la validation par le typage et le contrôle statique du compilateur ( validation inaccessible en C ).

Difficile : Ada n’est-il pas trop compliqué à aborder ?

Non, et il est même plus simple que les autres langages procéduraux. Ada semble compliqué, parce qu’il est stricte, alors que les autres langages semblent plus simple, parce qu’ils laissent tout passer. Mais quand un langage laisse tout passer, il ne fait que reporter la complexité qui se trouve étalée dans le temps passé au débogage ou à des étapes de re-conception itératives qui auraient put êtres économisées. Ada n’est pas plus un langage compliqué dès lors que l’on comprend que l’on ne « code » pas en Ada, mais que l’on écrit en Ada, et que par sa verbosité, les programmes complexes écrits en Ada sont plus faciles à lire que ceux codés dans d’autres langages ; la comparaison ne s’applique bien sûr pas pour les domaines disposant de langages de haut niveau spécifiques… quoi que ces langages puissent tout de même bénéficier de faire implémenter leurs interpréteurs en Ada.

Actualité : Ada n’est-il pas vieux et démodé ?

Non, Ada est toujours d’actualité, et il est toujours utilisé de nos jours dans des projets importants. Ada est né à la fin des années 1970, et peut donc être qualifié d’ancien. Mais il n’est pas démodé pour autant, puisque son ancienneté lui fait bénéficier d’une expertise et d’une stabilité d’où il tire la sérénité qu’il procure. De plus, choisir un langage au prétexte qu’il serait à la mode serait une mauvaise démarche, vouée à laisser de mauvaise surprises à plus ou moins brève échéance ( c’est effectivement ce qui se produit souvent, et les dégâts sont d’autant plus important que les désillusions viennent tard, quand une grande quantité de sources ont déjà été écrits ou qu’un grande quantité d’investissement humain a déjà été dépensée ).

Verbosité : Pourquoi les codes ( les sources ) Ada sont-ils souvent si longs ?

Les applications de Ada sont verbeuses pour être plus lisibles. Et pour être plus exacte, on ne devrait même je jamais parler de codes Ada, mais bien plutôt de textes en Ada. La lisibilité des textes de programmes en Ada permet de les lire même lorsqu’on en est pas soi-même l’auteur, ou quand on en est l’auteur et qu’on y reviens après un long délais ( en mois ou en années ). En résumé, si programmes Ada sont si longs à lire, c’est pour être lisible pendant longtemps et par tout le monde. Cette verbosité devrait même faire de Ada la langage de prédilection de l’Open-Source ( si son unique principe n’était pas le prix, mais la qualité, ce qui n’est malheureusement pas vraiment le cas ).

Compilateurs : Quels sont les compilateurs ou interpréteurs Ada disponibles ?

Le principal compilateur Ada est GNAT, qui se décline en trois versions : GNAT 3.15p, GNAT GPL et GNAT Pro. Deux autres compilateurs, qui sont plutôt des interpréteurs existent également : SmallAda, qui peut être téléchargé depuis www.ada95.ch  et GWµAda, téléchargeable depuis la même page. SmallAda pèse 234 KB, installé sans les programmes d’exemple, et GWµAda, pèse lui, 3.79 MB. Pour le plus lourd de tous, GNAT, prévoyez environ 40 MB. Pour les personnes faisant des expériences de programmation sur de petites machines, SmallAda est donc le plus recommandé ( mais il n’implémente pas toute la spécification Ada ).

Disponibilité : Pourquoi les compilateurs ou interpréteurs Ada sont-ils si rares ?

Parce qu’ils sont plus difficiles et plus complexes à construire. De plus, les spécifications du langage Ada sont strictes et sont à respecter à la lettre, ne laissant pas de place pour l’improvisation personnelle ( c’est ce qui garantie la portabilité ). Tandis que les autres compilateurs n’ont pas une sémantique aussi riche, et sont moins bien spécifiés, laissant une large place à l’improvisation et aux écarts ( au détriment de la portabilité ). En bref, les compilateurs Ada sont plus rares car ils sont soumis à des règles exactes, tandis que les autres compilateurs d’autres langages sont plus fréquents, car on peut quasiment les implémenter n’importe comment ( pardon pour la sévérité, mais la remarque est trop bien fondée ). En résumé, en matière de compilateur, Ada préfère la qualité plutôt que la quantité.

Prestataires : Quiconque a-t-il ou a-t-elle le droit de créer un compilateur Ada ?

Oui, tout à fait. Mais sachez tout de même que cela ne s’improvise pas, et que cela vous demandera beaucoup de travail à plein temps pendant de longs mois ou de longues années. Cependant, il est possible pour vos besoins ou ceux de quelques personnes, de créer un compilateur qui ne compile qu’un sous ensemble d’Ada. Pourtant ce compilateur n’aura alors pas le droit de s’autoproclamer « compilateur Ada », car pour porter ce nom, un compilateur doit supporter tout les spécifications Ada ou au moins l’une des anciennes spécifications Ada 85 ou Ada 95, la dernière étant Ada 2005 ), qu’il conviendra d’indiquer explicitement.

Aider : Quelle est la meilleure manière de répondre à des questions sur le langage Ada ?

La meilleure manière de rendre service à quelqu’un(e) qui vous pose des questions sur Ada, que ce soit en privé ou sur un forum, concernant la logique du langage, est de lui expliquer de manière naturelle bien sûr, mais surtout d’accompagner les explications d’une référence exacte à la spécification : Ada Reference Manual ARM ). Cette référence est organisée un peu à la manière d’un texte de lois, et on peut donc faire référence à chaque détail syntaxique ou sémantique en indiquant un numéro de section, suivit d’un numéro de sous section, etc, etc.

Légalité : Les spécifications de Ada sont-elles publiques ?

Oui, l’accès aux spécifications du langage Ada sont libres de droit, et aucune compensation participation n’est dût pour leur usage. Vous pourrez par exemple ( mais pas exclusivement ) la consulter en ligne sur le site AdaIC AdaInformation Clearinghouse ), via la page « Ada 2005 Reference Manual » ou télécharger une version Windows CHM de la référence via Référence Ada 2005 au format CHM  ou Référence Annotée de Ada 2005 au format CHM  pour la référence annotée.

Rareté : Pourquoi Ada est-il si peu utilisé ou répandu ?

Probablement à cause des préjugés dont il est victime, notablement le préjugé de sa supposé trop grande complexité, mais également tout aussi probablement à cause de son origine dans le milieu militaire. Les milieux universitaires, aux états unis comme aussi dans d’autres pays du monde, sont le plus souvent anti-militaristes. C’est une bonne chose en-soi ( normal qu’un étudiant se rêve plus en chercheur qu’en chaire à canon ), mais c’était une erreur naïve que de croire que c’est parce qu’Ada a été créé par des militaires, qu’utiliser Ada aurait signifié un soutien aux organisations militaires. Bien sûr que non, et même au contraire, quand il est utilisé dans des applications critiques, comme celles qui régissent le trafique aérien, le langage Ada contribue même à préserver des vies. Enfin : le fait de parler Russe signifie t-il une adhésion à Poutine ? Bien sûr que non, et il en va de même avec Ada : utiliser Ada ne signifie aucune adhésion ni aucun soutient particulier à aucune armée.

Niches : Qui utilise Ada de nos jours ?

Principalement les domaines d’applications critiques où des vies sont en jeux ou des millions d’euros ou de dollars ou des données scientifique de grande valeurs ou des processus technique ou chimique délicats, etc. Bref, on utilise principalement Ada partout où la fiabilité quasi absolue est une exigence. Mais Ada peut rendre de bons services même à des développeurs(ses) du dimanche, des petites entreprises de logiciel, des petites applications personnelles, car on se demande bien pourquoi la fiabilité ne serait pas la bien venue également dans ces domaines. De plus, Ada offre un grand avantage au développeurs(ses) qui travail sur de petits projets ou qui ne peuvent que s’y attarder occasionnellement : la lisibilité. Avec Ada, vous pouvez travailler sur une application pendant quelques temps, la laisser temporairement en suspend, et y revenir des mois ou même des années plus tard, sans aucun soucis. Cette lisibilité des textes Ada, devrait, si on était plus censé, donner la prédominance à Ada dans le domaine de l’Open-Source également. Voilà bien de belles niches potentielles pour Ada.

Exceptions : Le modèle des exceptions en Ada n’est-il pas obsolète ou primitif ?

Non, il n’est pas primitif, mais simple, et cette simplicité est bienvenue dans le domaine du traitement des exceptions. Les autres modèles de traitement qui ont cours dans d’autres langages représentent typiquement les exceptions par des objets.

Deux commentaires viennent au sujet de cette manière de faire. Le premier commentaire est que l’objet est une chose complexe en soit, et qu’il est mal venu pour une exception de créer un objet, et de se mettre en situation de générer potentiellement des erreurs ( comme un échec d’allocation de mémoire par exemple, ou de pile ), alors que l’état du programme se trouve déjà dans un traitement d’erreur et donc une situation plus ou moins instable. Pour s’épargner la situation inconfortable pour l’état d’un programme, d’être en situation de double erreur, il est préférable de ne pas exécuter de d'instructions sensibles lors d’une levé ou d’un traitement d’exception, et donc par exemple d’éviter de faire reposer le mécanisme de levé d’exception sur la création d’objet. Le deuxième commentaire et qu’une exception est une erreur inattendue, cela impliquant que l’appelant peut difficilement fournir un traitement pour tous les cas imaginables. Et dans la vraie vie en effet, un appelant recevant une exception, aura d’abord ( c’est recommandé ) comme priorité de faire place nette, et de ramener le programme à un état stable, et ceci de manière fiable, et donc sans faire de suppositions trop certaines sur une situation d’exception. C’est là qu’est la conclusion du deuxième commentaire : il est inutile pour une exception de transmettre une foule d’informations ( ce qui généralement espéré à travers les membres de l’objet ) sur l’exception produite, car prendre en charge cette quantité d’informations dans l’appelant recevant l’exception, signifierait que ce traitement pèse dans la conception de cette appelant, et que donc sa programmation est organisée pour une grande part autour de ce traitement. Cette organisation ne serait évidement pas net, et ne participerait pas à la création d’un programme fiable. La reformulation de cette erreur, qui est de loin la plus fréquente, est celle-ci ( formulée explicitement ) : c’est l’erreur qui consiste à programmer avec des exceptions, et à employer les exceptions comme une structure de contrôle du flux du programme, c’est-à-dire une erreur qui consiste à employer le mécanisme des exceptions de la même manière que l’on emploierait le mécanisme des boucles ou des instructions conditionnelles. Mais voilà, les exceptions ne sont pas des structure de contrôle comme les autres, et comme son nom l’indique, l’exception est à réserver aux situations d’exception. Et si un processus doit pouvoir transmettre des informations concernant certaines erreurs prévisibles ou courantes, alors ce type d’erreur, bien qu’on puisse l’appeler « erreur », doit être assimilé à un résultat renvoyé par le processus. Car c’est alors une erreur seulement au sens de l’interprétation humaine, mais pas au sens du déroulement du programme ( comme par exemple tenter d’ouvrir un fichier inexistant ).

Un troisième commentaire pourrait venir : faire de l’exception un objet renvoyé par un processus, devrait normalement rendre obligatoire d’intégrer le type de cet objet dans la signature du processus ( la procédure ou la fonction ), ce qui exposerait indirectement des détails de l’implémentation interne de ce processus,… détails censés êtres privés, car ne constituant pas son interface ( erreur typique de la programmation en Java ). Donc loin d’être obsolète, le modèle de traitement des exceptions de Ada est au contraire d’une fiabilité appréciable.

En fait, peut-être que par « obsolète » certaines personnes pensent plutôt à « démodé ». Mais la mode, c’est le marketing, et le marketing, ce n’est pas la science ou l’expertise ( en l’occurrence, la science ou l’expertise de la bonne conception ).

« Class » : Pourquoi n’y a-t-il pas de mot clé « class » en Ada ?

La classe, dans les langages réputés êtres des références dans le domaine de la conception orientée objet, est à bien y regarder, un mélange de nombreux concepts orthogonaux qu’il est bon de séparer pour rendre le design des applications plus clair. Concrètement, ces langages mélanges pêle-mêle : espace de nom, structure, primitives, polymorphisme, discriminant et encapsulation. Et dès lors qu’une application écrite dans l’un de ces langages, a besoin de l’un de ces concepts, elle doit employer une classe, indistinctement de son besoin exact, ne laissant pas clairement apparaître l’intention première. Ada, qui comme à son habitude est plus claire, permet d’exprimer chacun de ces concepts séparément. Ada est donc bien un langage qui permet de faire ce que l’on nomme du « design orienté objet », mais Ada le fait différemment, en exprimant chacune de ces caractéristiques séparément, ce qui participe immédiatement à rendre le design de l’application nettement plus clair.

« Private » : Pourquoi peut-on trouver une section « private » dans les spécifications publiques ?

Les débutant(e)s en Ada sont souvent surpris(e)s sur l’on puisse trouver des sections privées dans les spécifications qui sont censées par nature êtres publiques. À-fin d’aider à comprendre cette apparente inconsistance, il sera utile de comprendre ou faire comprendre qu’un texte en Ada a toujours deux lecteurs : le lecteur humain et le compilateur, et que la compréhension du texte d’un programme utilisant un package ( paquet ), par un lecteur humain, n’implique pas les mêmes conditions que la compilation de ce programme dépendant de ce package. Il est aisé de comprendre ou faire comprendre que pour compiler un programme dépendant d’un paquet, le compilateur doit accéder à une interface de l’implémentation de ce paquet, et que malgré cela, le lecteur humain n’est pas concerné par ces mêmes détails, et surtout qu’il/elle ne doit pas s’y référer pour sa tâche de conception, qui diffère évidement de la tâche de compilation. Partant de là, il sera aisé d’en conclure qu’il y a deux sections dans un package : une destinée au lecteur humain, et une autre destinée exclusivement au compilateur.

Programme : Faut-il créer un fichier de spécification pour les programmes ?

Formellement, ce n’est pas obligatoire. Mais cela peut se montrer parfois utile en pratique. C’est le cas lorsque par exemple on souhaite tester le programme en l’intégrant dans un contexte ou environnement particulier. On concevra la chose comme si le programme à tester était un paquet dont la procédure principale sera appelée par le programme conçu pour effectuer le teste. Ceci sera utile par exemple pour tester une application CGI, qui devra être testée avant d’être installée sur son serveur d’accueil. Le programme de teste fixera des variables d’environnement comme le ferait un serveur, commandera le flux d’entrée et récupérera le flux de sortie. À cette fin, il fera référence à l’application CGI à tester comme à un paquet, et cela nécessitera qu’il existe une interface pour cette application CGI à tester. Créer un fichier de spécification n’est pas obligatoire donc, mais cela peut être utile pour effectuer le débogage de l’application. Un autre cas encore, serait celui on l’on ne souhaite pas documenter une application dans le texte de son implémentation, mais toujours dans un fichier de spécification comme on le fait pour toutes les autres unités de compilation Ada. La création d’un fichier de spécification recevant la documentation du programme sera alors la solution la plus attendue.

Coopération : Où rencontrer des personnes pour apprendre ou collaborer sur un projet Ada ?

Ici même, en passant par exemple par la page de commentaires du site, ou en envoyant un mail. Que vous soyez à la recherche d’une collaboration ou que vous souhaitiez vous proposer pour une collaboration concernant des projets d’applications conçues en Ada, alors vous pouvez vous faire connaître ici même. La description de vos intentions, tout comme votre e-mail de contact, seront conservés en privé, et pourront être communiqués sur votre accord préalable. S’il vous vient également des questions concernant la programmation Ada, ou d’autres aspects techniques, vous pouvez poser vos questions par le même biais qu’indiqué en début de ce paragraphe. Il vous sera alors répondu par mail, et si votre question peut se formuler sous une forme généraliste, alors elle fera l’objet d’un exposé sur une page dédiée de ce site.

Support : Quelles sont les sociétés fournissant un support professionnel pour Ada ?

Actuellement, la société AdaCore, qui fourni un support professionnel pour son compilateur GNAT Pro. Sachez toutes-fois que ce support conviendra plutôt à un grand compte, cela dut au montant de la cotisation annuelle qui sera probablement trop élevée pour des indépendant(e)s. Néanmoins, pour toute information, et afin d’être dans le vrai plutôt que dans les supposition, en cas de besoin avéré d’informations exactes, veuillez contacter la société AdaCore.

GNAT : Qu’est-ce que GNAT ?

GNAT est l’acronyme de GNU Ada Translator, quoiqu’en qu’en réalité, il ne s’agit pas d’un translator ( traducteur ), mais d’un front-end travaillant avec GCC ( le compilateur C de la fondation GNU ). N’oubliez pas qu’étant un front-end, il serait faux de croire que GNAT traduit le texte Ada en C : ce n’est pas le cas.

Prononciation : Comment le sigle « GNAT » se prononce t-il ?

GNAT ne se prononce pas « niat » comme pourrait le penser les francophones, mais se prononce GNAT en prononçant le « G » comme dans le mot « Gateau » ou « Gnou », un peu comme si on prononçais « GUANAT » en mangeant le premier « A » ( au moins tel que le prononce la responsable commerciale de AdaCore France ).

Liens : Puis-je faire un ou des liens vers cette FAQ ?

Oui, bien sûr, et aucune autorisation n’est évidement nécessaire pour cela. Mais il est tout de même recommandé à raison de l’annoncer par le biais d’un petit message par mail, car il est possible que cette FAQ change d’adresse à l’avenir, et il serait alors rassurant de pouvoir en informer toutes les personnes qui auraient put faire un lien vers celles-ci, à-fin que leurs liens puissent être mis à jour. Et puis last but not least, il est possible que votre propre site mérite d’être cité ici pour une raison ou une autre. Vous annoncer peut donc être utile pour vous faire connaître si votre site ou une partie de votre site offre un contenu utile concernant Ada que le présent site pourrait éventuellement aimer lier.