Ada est un langage de programmation de haut niveau structuré , statiquement typé , impératif et orienté objet , inspiré de Pascal et d'autres langages. Il intègre la conception par contrat (DbC), un typage extrêmement fort , la concurrence explicite, les tâches, la communication synchrone par messages , les objets protégés et le non-déterminisme . Ada améliore la sécurité et la maintenabilité du code en privilégiant la détection des erreurs par le compilateur plutôt que par l'exécution . Ada est une norme technique internationale , définie conjointement par l' Organisation internationale de normalisation (ISO) et la Commission électrotechnique internationale (CEI). La norme ISO/IEC 8652:2023 est appelée Ada 2022 de manière informelle.
Ada a été initialement conçu par une équipe dirigée par l' informaticien français Jean Ichbiah de Honeywell, sous contrat avec le département de la Défense des États-Unis (DoD) de 1977 à 1983 , afin de remplacer plus de 450 langages de programmation alors utilisés par le DoD. Ada a été nommé en l'honneur d' Ada Lovelace (1815-1852), considérée comme la première programmeuse informatique.
Caractéristiques
Ada a été initialement conçu pour les systèmes embarqués et temps réel . La révision Ada 95, conçue par S. Tucker Taft d' Intermetrics entre 1992 et 1995, a amélioré la prise en charge des systèmes, du calcul numérique, de la finance et de la programmation orientée objet (POO).
Ada offre notamment un typage fort , des mécanismes de programmation modulaire ( packages ), la vérification à l'exécution , le traitement parallèle ( tâches , passage de messages synchrone , objets protégés et instructions select non déterministes ), la gestion des exceptions et les génériques . Ada 95 a introduit la prise en charge de la programmation orientée objet , incluant la répartition dynamique .
La syntaxe d'Ada minimise les choix de méthodes pour effectuer les opérations de base et privilégie les mots-clés anglais (tels que ` `else` orphelin qui pourrait s'associer à une expression `if` imbriquée incorrecte dans d'autres langages tels que C ou Java.
Ada est conçu pour le développement de systèmes logiciels de très grande envergure. Les paquets Ada peuvent être compilés séparément. Les spécifications des paquets Ada (l'interface du paquet) peuvent également être compilées séparément, sans l'implémentation, afin de vérifier leur cohérence. Ceci permet de détecter les problèmes dès la phase de conception, avant même le début de l'implémentation.
Un grand nombre de vérifications à la compilation sont prises en charge afin d'éviter les bogues qui, dans d'autres langages, ne seraient détectables qu'à l'exécution ou qui nécessiteraient l'ajout de vérifications explicites au code source. Par exemple, la syntaxe exige la fermeture explicite des blocs pour prévenir les erreurs dues à des jetons de fin incorrects. Le typage fort permet de détecter de nombreuses erreurs logicielles courantes (paramètres incorrects, violations de limites, références invalides, types incompatibles, etc.) soit à la compilation, soit à l'exécution. La concurrence étant intégrée à la spécification du langage, le compilateur peut, dans certains cas, détecter les interblocages potentiels . Les compilateurs vérifient également fréquemment les identificateurs mal orthographiés , la visibilité des paquets, les déclarations redondantes, etc., et peuvent fournir des avertissements et des suggestions utiles pour corriger l'erreur.
Ada prend également en charge les vérifications d'exécution afin de se prémunir contre les accès à la mémoire non allouée, les erreurs de dépassement de tampon , les violations de plage, les erreurs de décalage d'une unité , les erreurs d'accès aux tableaux et autres bogues détectables. Ces vérifications peuvent être désactivées pour optimiser l'exécution, mais peuvent souvent être compilées efficacement. Ada inclut également des outils facilitant la vérification des programmes . Pour ces raisons, Ada est parfois utilisé dans des systèmes critiques, où toute anomalie pourrait avoir des conséquences très graves, comme un décès accidentel, des blessures ou des pertes financières importantes. Parmi les systèmes utilisant Ada, on peut citer l'avionique , le contrôle aérien , les chemins de fer , le secteur bancaire, le secteur militaire et les technologies spatiales .
, une série de documents énonçant les critères qu'un langage de programmation devait respecter. De nombreux langages existants ont été formellement examinés, mais l'équipe a conclu en 1977 qu'aucun ne répondait aux spécifications. Ces exigences ont été créées par le Département de la Défense des États-Unis dans le cadre du programme « Langage commun de haut niveau du Département de la Défense » en 1978. Les documents précédents étaient successivement appelés « Strawman », « Woodenman », « Tinman » et « Ironman ». Ces exigences étaient axées sur les besoins des applications informatiques embarquées et mettaient l'accent sur la fiabilité, la maintenabilité et l'efficacité. Elles incluaient notamment la gestion des exceptions , la vérification à l'exécution et le calcul parallèle .
Il a été conclu qu'aucun langage existant ne répondait suffisamment à ces critères , et un concours a donc été organisé afin de créer un langage s'en rapprochant. Le langage lauréat est devenu le langage de programmation Ada. Ce langage respectait de près les exigences de Steelman, sans toutefois les suivre à la lettre.

Un appel d'offres pour un nouveau langage de programmation fut lancé et quatre entreprises furent engagées pour développer leurs propositions sous les noms de code Rouge ( Intermetrics, dirigée par Benjamin Brosgol), Vert ( Honeywell , dirigée par Jean Ichbiah ), Bleu ( SofTech , dirigée par John Goodenough) et Jaune ( SRI International , dirigée par Jay Spitzen). En avril 1978, après consultation publique, les propositions Rouge et Verte furent retenues pour la phase suivante. En mai 1979, la proposition Verte, conçue par Jean Ichbiah chez Honeywell, fut choisie et baptisée Ada, en hommage à Augusta Ada King, comtesse de Lovelace, plus connue sous le nom d' Ada Lovelace . Cette proposition s'inspirait du langage LIS qu'Ichbiah et son équipe avaient développé dans les années 1970. Le manuel de référence préliminaire d'Ada a été publié dans les ACM SIGPLAN Notices en juin 1979. Le manuel de référence de la norme militaire a été approuvé le 10 décembre 1980 (jour de l'anniversaire d'Ada Lovelace) et a reçu le numéro MIL-STD-1815 en hommage à son année de naissance. En 1981, Tony Hoare a profité de son discours de remise du prix Turing pour critiquer Ada, le jugeant trop complexe et donc peu fiable , avant de sembler se rétracter dans la préface d'un manuel d'Ada

Ada a suscité un vif intérêt au sein de la communauté des programmeurs dès ses débuts. Ses promoteurs et d'autres prédisaient qu'il pourrait devenir un langage dominant pour la programmation généraliste, et pas seulement pour les applications liées à la défense. Ichbiah a déclaré publiquement que d'ici dix ans, il ne resterait que deux langages de programmation : Ada et Lisp . Les premiers compilateurs Ada peinaient à implémenter ce langage vaste et complexe ; les performances, tant à la compilation qu'à l'exécution, étaient généralement lentes et les outils rudimentaires. Les fournisseurs de compilateurs ont consacré l'essentiel de leurs efforts à la réussite de la suite de validation ACVC ( Ada Compiler Validation Capability ) , un test de conformité au langage exigé par le gouvernement et requis pour une autre caractéristique novatrice du développement du langage Ada.
La première implémentation validée d'Ada fut le traducteur NYU Ada/Ed , certifié le 11 avril 1983. NYU Ada/Ed est implémenté dans le langage ensembliste de haut niveau SETL . Plusieurs entreprises commerciales ont commencé à proposer des compilateurs Ada et des outils de développement associés, notamment Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , TLD Systems et Verdix . Les fabricants d'ordinateurs ayant une activité importante dans les secteurs de la défense, de l'aérospatiale ou des industries connexes ont également proposé des compilateurs et des outils Ada sur leurs plateformes ; parmi eux figuraient Concurrent Computer Corporation , Cray Research, Inc. , Digital Equipment Corporation , Harris Computer Systems et Siemens Nixdorf Informationssysteme AG .
En 1991, le département de la Défense des États-Unis a imposé l'utilisation d'Ada (le mandat Ada ) pour tous les logiciels , bien que des exceptions à cette règle aient souvent été accordées . Ce mandat a été progressivement supprimé en 1997, le département de la Défense ayant alors commencé à privilégier les technologies commerciales sur étagère (COTS) . Des exigences similaires existaient dans d'autres pays de l'OTAN : Ada était requis pour les systèmes de commandement et de contrôle de l'OTAN , ainsi que pour d'autres fonctions, et constituait le langage imposé ou privilégié pour les applications liées à la défense dans des pays comme la Suède, l'Allemagne et le Canada
À la fin des années 1980 et au début des années 1990, les compilateurs Ada avaient amélioré leurs performances, mais il existait encore des obstacles à la pleine exploitation des capacités d'Ada, notamment un modèle de tâches différent de celui auquel la plupart des programmeurs en temps réel étaient habitués.
Grâce à ses fonctionnalités critiques de sécurité, Ada est désormais utilisé non seulement pour des applications militaires, mais aussi dans des projets commerciaux où un bogue logiciel peut avoir de graves conséquences, comme l'avionique et le contrôle aérien , les lanceurs commerciaux tels qu'Ariane 4 et 5 , les satellites et autres systèmes spatiaux, le transport ferroviaire et le secteur bancaire. Par exemple, le de vol électriques du Boeing 777 , a été écrit en Ada, tout comme les systèmes de commandes de vol électriques de l' Eurofighter Typhoon , du Saab Gripen , du Lockheed Martin F-22 Raptor et le système de commandes de vol DFCS de remplacement du Grumman F-14 Tomcat . Le système canadien de gestion automatisée du trafic aérien (CATAS) a été écrit en un million de lignes de code Ada ( SLOC count). Il intégrait un traitement distribué avancé , une base de données Ada distribuée et une conception orientée objet. Ada est également utilisé dans d'autres systèmes de contrôle aérien ; par exemple, le système de contrôle aérien britannique de nouvelle génération
Ada 95 , la norme conjointe ISO/IEC/ANSI ISO/IEC 8652:1995 a été publiée en février 1995, devenant ainsi le premier langage de programmation orienté objet normalisé par l'ISO. Afin de faciliter la révision de la norme et son adoption future, l' US Air Force a financé le développement du compilateur GNAT . Ce dernier fait actuellement partie de la collection de compilateurs GNU .
Les travaux se sont poursuivis pour améliorer et mettre à jour le contenu technique du langage Ada. Un corrigendum technique à Ada 95 a été publié en octobre 2001, et un amendement majeur, ISO/IEC 8652:1995/Amd 1:2007 , a été publié le 9 mars 2007, communément appelé Ada 2005 car les travaux sur la nouvelle norme ont été terminés cette année-là.
Lors de la conférence Ada-Europe 2012 à Stockholm, l'Ada Resource Association (ARA) et Ada-Europe ont annoncé la finalisation de la conception de la dernière version du langage Ada et la soumission du manuel de référence à l' ISO/IEC JTC 1/SC 22 /WG 9 de l' Organisation internationale de normalisation (ISO) et à la Commission électrotechnique internationale (CEI) pour approbation. La norme ISO/IEC 8652:2012 (voir le manuel de référence d'Ada 2012 ) a été publiée en décembre 2012 sous le nom d' Ada 2012. Un rectificatif technique, ISO/IEC 8652:2012/COR 1:2016, a été publié (voir le manuel de référence 2012 avec le TC 1 ).
La technologie SPARK, basée sur Ada, a été rendue possible grâce aux caractéristiques propres au langage Ada, notamment la séparation de la spécification et de l'implémentation via des paquets, la prise en charge des types scalaires définis par l'utilisateur et la prise en charge de l'utilisation de types composites sans recourir aux pointeurs. La révision Ada 2012 a été particulièrement importante pour SPARK, car la prise en charge des contrats au sein du langage a permis de repenser SPARK dès le départ afin d'atteindre son objectif : le co-développement des programmes et de leurs preuves de correction.
Le 2 mai 2023, la communauté Ada a vu l'approbation officielle de la publication de l' édition Ada 2022 de la norme du langage de programmation.
Malgré les appellations Ada 83, 95, etc., il n'existe juridiquement qu'une seule norme Ada, la dernière norme ISO/CEI : l'adoption d'une nouvelle version entraîne le retrait de la précédente. Les autres appellations sont informelles et font référence à une édition particulière.
Parmi les autres normes connexes, citons ISO/IEC 8651 -3:1988 Systèmes de traitement de l'information—Infographie—Liaisons de langage du système de noyau graphique (GKS)—Partie 3 : Ada .
constructions du langage
Ada est un langage de programmation de type ALGOL doté de structures de contrôle avec des mots réservés tels que `if` , `then` , `else` , `while` , `for` , etc. Cependant, Ada offre également de nombreuses fonctionnalités de structuration de données et d'autres abstractions absentes de la version originale d'ALGOL 60 , comme les définitions de types , les enregistrements , les pointeurs et les énumérations . Ces constructions sont en partie héritées de Pascal ou s'en inspirent .
"Bonjour, monde !" en Ada
Un exemple courant de syntaxe d'un langage est le programme « Hello, World! » : (hello.adb)
Ce programme peut être compilé à l'aide du compilateur open source gratuit GNAT , en exécutant :
Types de données
Le système de types d'Ada ne repose pas sur un ensemble de types primitifs prédéfinis , mais permet aux utilisateurs de déclarer leurs propres types. Cette déclaration ne se base pas sur la représentation interne du type, mais sur la description de l'objectif à atteindre. Cela permet au compilateur de déterminer une taille mémoire appropriée pour le type et de vérifier les violations de définition de type à la compilation et à l'exécution (par exemple, les violations d'intervalle, les dépassements de tampon, la cohérence des types, etc.). Ada prend en charge les types numériques définis par un intervalle, les types modulo, les types agrégés (enregistrements et tableaux) et les types énumérés. Les types d'accès définissent une référence à une instance d'un type spécifié ; les pointeurs non typés ne sont pas autorisés. Parmi les types spéciaux fournis par le langage figurent les types de tâches et les types protégés.
Par exemple, une date peut être représentée comme suit :
Les types Day_type, Month_type, Year_type et Hours sont incompatibles, ce qui signifie que par exemple l'expression suivante est illégale :
L'opérateur plus prédéfini ne peut additionner que des valeurs de même type ; l'expression est donc invalide.
Les types peuvent être affinés en déclarant des sous-types :
Les types peuvent être modifiés par des attributs tels que limité, abstrait, privé, etc. Les types privés ne révèlent pas leur structure interne ; les objets de types limités ne peuvent pas être copiés. Ada 95 ajoute des fonctionnalités supplémentaires pour l’extension orientée objet des types.
structures de contrôle
Ada est un langage de programmation structuré , ce qui signifie que le flux d'exécution est organisé en instructions standard. Toutes les constructions standard et les sorties anticipées de bas niveau sont prises en charge ; l'utilisation des commandes « aller à », également prises en charge, est donc rarement nécessaire.
Paquets, procédures et fonctions
Un programme Ada comprend notamment des packages, des procédures et des fonctions.
Les fonctions se distinguent des procédures par le fait qu'elles doivent renvoyer une valeur. Les appels de fonction ne peuvent pas être utilisés « comme une instruction », et leur résultat doit être affecté à une variable. Cependant, depuis Ada 2012, les fonctions ne sont plus tenues d'être pures et peuvent modifier leurs paramètres dûment déclarés ou l'état global.
Exemple : Spécification du package (exemple.ads)
Corps du package (exemple.adb)
Ce programme peut être compilé, par exemple, en utilisant le compilateur open-source gratuit GNAT , en exécutant
Les packages, les procédures et les fonctions peuvent s'imbriquer à n'importe quel niveau, et chacun peut également constituer le bloc logique le plus externe.
Chaque package, procédure ou fonction peut avoir ses propres déclarations de constantes, de types, de variables et d'autres procédures, fonctions et packages, qui peuvent être déclarés dans n'importe quel ordre.
Pragmas
Une directive pragma est une directive du compilateur qui transmet des informations à ce dernier afin de permettre une manipulation spécifique du code compilé. Certaines directives pragma sont intégrées au langage, tandis que d'autres sont spécifiques à l'implémentation.
Des exemples d'utilisation courante des pragmas du compilateur seraient de désactiver certaines fonctionnalités, telles que la vérification de type à l'exécution ou la vérification des limites d'indice de tableau, ou d'indiquer au compilateur d'insérer du code objet au lieu d'un appel de fonction (comme le fait C/C++ avec les fonctions en ligne ).