Ada Resource Association
Ada Aperçu
Ada est un langage de programmation moderne conçu pour les applications de grande taille à longue durée de vie – et les systèmes embarqués en particulier – où la fiabilité et l’efficacité sont essentielles. Il a été initialement développé au début des années 1980 (cette version est généralement connue sous le nom d’Ada 83) par une équipe dirigée par le Dr Jean Ichbiah chez CII-Honeywell-Bull en France. Le langage a été révisé et amélioré de manière compatible vers le haut au début des années 1990, sous la direction de M. Tucker Taft d’Intermetrics aux États-Unis. Le langage résultant, Ada 95, a été le premier langage orienté Objet normalisé au niveau international (ISO). Sous les auspices de l’ISO, une nouvelle révision (mineure) a été achevée en tant qu’amendement à la norme; cette version de la langue est connue sous le nom d’Ada 2005. Une révision plus importante a été achevée (y compris la prise en charge des annotations de programme) et est connue sous le nom d’Ada 2012. Une autre révision importante devrait être achevée en 2022.
Le nom ” Ada” n’est pas un acronyme; il a été choisi en l’honneur d’Augusta Ada Lovelace (1815-1852), une mathématicienne parfois considérée comme la première programmeuse au monde en raison de son travail avec Charles Babbage. Elle était également la fille du poète Lord Byron.
Ada connaît une utilisation importante dans le monde entier dans des domaines à haute intégrité / critiques pour la sécurité / haute sécurité, notamment l’avionique des avions commerciaux et militaires, le contrôle du trafic aérien, les systèmes ferroviaires et les dispositifs médicaux. Avec son incarnation des principes modernes du génie logiciel, Ada est un excellent langage d’enseignement pour les cours d’introduction et de perfectionnement en informatique, et il a fait l’objet d’importantes recherches universitaires, en particulier dans le domaine des technologies en temps réel.
Aperçu de la langue
L’Ada est multiforme. D’un point de vue, il s’agit d’un langage général classique basé sur une pile, non lié à une méthodologie de développement spécifique. Il a une syntaxe simple, des instructions de contrôle structurées, des installations de composition de données flexibles, une vérification de type solide, des fonctionnalités traditionnelles de modularisation du code (“sous-programmes”) et un mécanisme de détection et de réponse aux conditions d’exécution exceptionnelles (“gestion des exceptions”).
Mais il comprend également beaucoup plus:
Plages scalaires
Contrairement aux langages basés sur la syntaxe C (tels que C++, Java et C#), Ada permet au programmeur de spécifier simplement et explicitement la plage de valeurs autorisées pour les variables de types scalaires (type entier, virgule flottante, virgule fixe ou énumération). La tentative d’attribution d’une valeur hors plage provoque une erreur d’exécution. La possibilité de spécifier des contraintes de plage rend l’intention du programmeur explicite et facilite la détection d’une source majeure d’erreurs de codage et d’entrée utilisateur.
Programmation dans la grande
La conception originale de l’Ada 83 a introduit la construction de paquets, une fonctionnalité qui prend en charge l’encapsulation (“masquage d’informations”) et la modularisation, et qui permet au développeur de contrôler l’espace de noms accessible dans une unité de compilation donnée. Ada 95 a introduit le concept d ‘”unités enfants”, ajoutant une flexibilité considérable et facilitant la conception de très grands systèmes. Ada 2005 a étendu les fonctionnalités de modularisation du langage en permettant des références mutuelles entre les spécifications des paquets, facilitant ainsi l’interface avec des langages tels que Java.
Modèles génériques
Une clé des composants réutilisables est un mécanisme de paramétrage des modules par rapport aux types de données et autres entités de programme, par exemple un paquet de pile pour un type d’élément arbitraire. Ada répond à cette exigence grâce à une installation connue sous le nom de “génériques”; puisque le paramétrage est effectué au moment de la compilation, les performances à l’exécution ne sont pas pénalisées.
Programmation orientée objet (POO)
L’Ada 83 était basée sur des objets, permettant le partitionnement d’un système en modules correspondant à des types de données abstraits ou à des objets abstraits. La prise en charge complète de la POO n’a pas été fournie car, premièrement, elle ne semblait pas nécessaire dans le domaine en temps réel qui était la cible principale d’Ada et, deuxièmement, le besoin apparent de collecte automatique des ordures dans un langage OO aurait nui à des performances prévisibles et efficaces.
Cependant, les grands systèmes en temps réel ont souvent des composants tels que des interfaces graphiques qui n’ont pas de contraintes en temps réel et qui pourraient être développés le plus efficacement possible en utilisant des fonctionnalités de POO. En partie pour cette raison, Ada 95 fournit un support complet pour la POO, grâce à sa fonction “type étiqueté”: classes, polymorphisme, héritage et liaison dynamique. Ada 95 ne nécessite pas de collecte automatique des ordures, mais fournit plutôt des fonctionnalités de définition permettant au développeur de fournir des opérations de récupération de stockage spécifiques au type (“finalisation”). Ada 2005 a fourni des fonctionnalités supplémentaires de POO, y compris des interfaces de type Java et une notation d’appel d’opération traditionnelle.
L’Ada est neutre sur le plan méthologique et n’impose pas de “frais généraux distribués” pour la POO. Si une application n’a pas besoin de POO, les fonctionnalités de POO ne doivent pas être utilisées et il n’y a pas de pénalité d’exécution.
Programmation concurrente
Ada fournit une installation structurée de haut niveau pour la concurrence. L’unité de concurrence est une entité de programme appelée ” tâche “.” Les tâches peuvent communiquer implicitement via des données partagées ou explicitement via un mécanisme de contrôle synchrone appelé rendez-vous. Un élément de données partagé peut être défini de manière abstraite comme un “objet protégé” (une fonctionnalité introduite dans Ada 95), avec des opérations exécutées sous exclusion mutuelle lorsqu’elles sont invoquées à partir de plusieurs tâches. Les interactions de tâches asynchrones sont également prises en charge, en particulier les délais d’expiration et la fin des tâches. Un tel comportement asynchrone est différé lors de certaines opérations, pour éviter la possibilité de laisser des données partagées dans un état incohérent. Les dernières versions d’Ada incluent des mécanismes légers pour tirer parti des architectures multicœurs, permettant un calcul parallèle très efficace, tout en préservant la portabilité et en restant dans le modèle de concurrence Ada sûr et bien défini.
Programmation des systèmes
Tant dans le langage “core” que dans l’annexe de programmation des systèmes, Ada fournit les fonctionnalités nécessaires pour permettre au programmeur de se rapprocher du matériel. Par exemple, vous pouvez spécifier la disposition des bits pour les champs d’un enregistrement, définir l’alignement et la taille, placer des données à des adresses de machine spécifiques et exprimer des séquences de code spécialisées ou critiques dans un langage d’assemblage. Vous pouvez également écrire des gestionnaires d’interruptions dans Ada, à l’aide de la fonction de type protégé.
Programmation en temps réel
Les fonctions de tâches d’Ada vous permettent d’exprimer des idiomes communs en temps réel (tâches périodiques, tâches pilotées par des événements), et l’annexe en temps réel fournit plusieurs fonctionnalités qui vous permettent d’éviter les inversions de priorités illimitées. Une stratégie de verrouillage d’objet protégé est définie qui utilise des plafonds de priorité ; cela a une implémentation particulièrement efficace dans Ada (les mutex ne sont pas requis) car les opérations protégées ne sont pas autorisées à se bloquer. Ada 95 a défini une stratégie de répartition des tâches qui nécessite essentiellement que les tâches s’exécutent jusqu’à ce qu’elles soient bloquées ou préemptées, et Ada 2005 en a introduit plusieurs autres, y compris la première date limite.
Systèmes à haute intégrité
En mettant l’accent sur des principes de génie logiciel solides, Ada soutient le développement d’applications à haute intégrité, y compris celles qui doivent être certifiées conformément aux normes de sécurité telles que DO-178B et aux normes de sécurité telles que les Critères communs. Par exemple, un typage fort signifie que les données destinées à un seul but ne seront pas accessibles via des opérations inappropriées; des erreurs telles que le traitement des pointeurs comme des entiers (ou vice versa) sont évitées. Et la vérification des limites de tableau d’Ada empêche les vulnérabilités de dépassement de tampon courantes en C et C ++.
Cependant, le langage complet est inapproprié dans une application critique pour la sécurité, car la généralité et la flexibilité peuvent interférer avec les exigences de traçabilité / certification. Ada résout ce problème en fournissant une directive de compilateur, pragma Restrictions, qui vous permet de contraindre les fonctionnalités du langage à un sous-ensemble bien défini (par exemple, en excluant les installations de POO dynamiques).
L’évolution de l’Ada a vu l’augmentation continue de la prise en charge des applications critiques et de haute sécurité. Ada 2005 a normalisé le profil Ravenscar, un ensemble de fonctionnalités de concurrence suffisamment puissantes pour la programmation en temps réel, mais suffisamment simples pour rendre la certification pratique. Ada 2012 a introduit des fonctionnalités d’annotation pour ajouter des pré-conditions, des post-conditions et des invariants aux programmes. Ada 2022 les étend avec des annotations supplémentaires pour les conditions initiales par défaut, les propriétés stables, le non-blocage et l’utilisation globale des objets. Ceux-ci peuvent servir à la fois pour la vérification de l’exécution et comme entrée dans des outils d’analyse statique.
Résumé des avantages Ada
- Vous aide à concevoir un code sûr et fiable
- Réduit les coûts de développement
- Prend en charge les technologies nouvelles et changeantes
- Facilite le développement de programmes complexes
- Aide à rendre le code lisible et portable
- Réduit les coûts de certification pour la sécurité – logiciels critiques
Résumé des fonctionnalités Ada
- Programmation orientée objet
- Typage fort
- Abstractions pour s’adapter au domaine du programme
- Programmation/modèles génériques
- Exception gestion
- Installations pour l’organisation modulaire du code
- Bibliothèques standard pour les E/ S, la gestion des chaînes, le calcul numérique, les conteneurs
- Programmation des systèmes
- Programmation concurrente
- Programmation en temps réel
- Programmation des systèmes distribués
- Traitement numérique
- Interfaces vers d’autres langages (C, COBOL, Fortran)
En bref, Ada est un langage normalisé au niveau international combinant des fonctionnalités de programmation orientée objet, des fonctionnalités de concurrence bien conçues, une prise en charge en temps réel et des fonctionnalités intégrées fiabilité. Outil approprié pour résoudre les problèmes réels auxquels sont confrontés les développeurs de logiciels aujourd’hui, Ada est utilisé dans un certain nombre de grandes industries pour concevoir des logiciels qui protègent les entreprises et les vies.
Leave a Reply