Ada est un langage de programmation structuré de haut niveau conçu principalement pour la programmation système et les applications en temps réel. Il a été nommé d'après Ada Lovelace, souvent considérée comme l'une des premières programmeuses informatiques. Ada est connu pour son typage fort, sa modularité et son support pour la programmation concurrente, ce qui le rend adapté aux systèmes critiques dans des secteurs tels que l'aérospatiale, l'automobile et la défense.
Ada a été créé à la fin des années 1970 dans le cadre d'un projet financé par le Département de la Défense des États-Unis (DoD) pour répondre au besoin d'un langage de programmation standardisé pour les systèmes embarqués et en temps réel. Le langage a été conçu par une équipe dirigée par Jean Ichbiah et a été officiellement publié en 1983. L'un des principaux objectifs était de réduire la diversité des langages de programmation utilisés dans les systèmes de défense, améliorant ainsi la maintenance et la fiabilité.
Ada s'inspire de plusieurs langages de programmation, notamment Pascal, C et ALGOL. Sa conception intègre des caractéristiques de ces langages, telles que le typage fort et la programmation structurée. Le développement d'Ada a également répondu aux défis posés par C, notamment en termes de sécurité des types et de support pour la programmation au niveau système.
Depuis sa création, Ada a subi plusieurs révisions, Ada 83 étant suivie par Ada 95, Ada 2005 et la dernière norme, Ada 2012. Ces révisions ont introduit de nouvelles fonctionnalités, telles que la programmation orientée objet et un meilleur support pour les systèmes en temps réel. Aujourd'hui, Ada est maintenu par l'Ada Resource Association et continue d'être utilisé, en particulier dans les systèmes critiques où la sécurité et la fiabilité sont primordiales.
Ada impose un contrôle strict des types, ce qui aide à détecter les erreurs à la compilation plutôt qu'à l'exécution.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- Ceci est valide
Count := 150; -- Cela provoquera une erreur de compilation
Le langage prend en charge la programmation modulaire grâce à l'utilisation de paquets, qui encapsulent des types, des données et des procédures connexes.
package Geometry is
type Point is record
X : Float;
Y : Float;
end record;
procedure Move(Point : in out Point; DeltaX, DeltaY : Float);
end Geometry;
Ada dispose d'un support intégré pour la programmation concurrente via des tâches, ce qui permet l'exécution simultanée de plusieurs processus.
task My_Task is
begin
-- code de la tâche
end My_Task;
Ada fournit des mécanismes robustes de gestion des exceptions, permettant aux développeurs de gérer les erreurs d'exécution avec élégance.
begin
-- code qui peut lever une exception
exception
when Constraint_Error =>
-- gérer l'erreur
end;
Ada prend en charge la programmation orientée objet avec des fonctionnalités telles que l'héritage et le polymorphisme.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- code pour afficher les informations du véhicule
end Display;
Les génériques permettent aux développeurs d'écrire du code flexible et réutilisable en définissant des types et des sous-programmes paramétrés.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
Ada prend en charge les types d'énumération, qui définissent un type avec un ensemble de valeurs nommées.
type Color is (Red, Green, Blue);
Les types contrôlés permettent un contrôle précis sur la création et la destruction des objets.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
Ada fournit des attributs qui peuvent être utilisés pour obtenir des informations sur les types ou les objets.
X : Integer := 10;
Size : Natural := X'Size; -- Obtention de la taille d'un entier
Ada met l'accent sur le concept de gestion de la mémoire grâce à un contrôle explicite sur le stockage et l'allocation des données.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
Ada peut être compilé à l'aide de divers compilateurs, GNAT étant l'un des plus largement utilisés. GNAT fait partie de la GNU Compiler Collection (GCC) et fournit un moyen gratuit et open-source de compiler du code Ada.
Il existe plusieurs environnements de développement intégrés (IDEs) disponibles pour Ada, tels que GNAT Studio, AdaGIDE et GPS (GNAT Programming Studio). Ces outils offrent des fonctionnalités telles que la coloration syntaxique, la complétion de code et des capacités de débogage.
Pour construire un projet Ada en utilisant GNAT, on écrirait généralement le code source Ada, puis utiliserait les commandes suivantes dans le terminal :
gnatmake my_program.adb
Cette commande compile le fichier source Ada et génère un exécutable.
Ada est principalement utilisé dans des systèmes critiques pour la sécurité, qui incluent, mais ne se limitent pas à :
Sa fiabilité et sa maintenabilité en font un choix privilégié dans ces secteurs.
Bien qu'Ada partage certaines similitudes avec d'autres langages de programmation, il se distingue par son accent sur la sécurité et la fiabilité.
Lorsqu'il s'agit de traduction source-à-source, il existe des outils spécifiques qui peuvent aider à convertir le code Ada en d'autres langages de programmation. Par exemple, des outils comme Gnat2Go peuvent être utilisés pour traduire le code Ada en Go. Cependant, il convient de veiller à ce que la fonctionnalité et les caractéristiques de sécurité du code Ada d'origine soient préservées lors du processus de traduction.
Quelques outils courants pour la traduction source-à-source incluent :