Connaissez-vous le langage Ada?
L’Ada n’est pas un “vieux langage” ou un langage qu’on apprend qu’à l’école : il s’agit bel et bien d’un langage utilisé dans différentes industries dans des environnements critiques (avionique, ferroviaire…). Dans ces environnements, la défaillances d’un logiciel peut entraîner des dommages matériels, voire des pertes humaines. Je me propose de vous faire un petit retour d’impressions après 4 jours de formation pratique.
Le langage Ada est intrinsèquement conçu pour lever toute ambiguïté entre l’intention du programmeur et ce que fait réellement le code. Bien souvent, il est facile dans la plupart des langages de commettre une erreur par inadvertance qui altère le comportement attendu. Il peut alors en résulter des recherches laborieuses pour remettre le code en ordre.
Prenons un exemple de code C:
if (the_signal == clear)
{
open_gates(...);
}
Il est très facile de produire un code qui va compiler mais qui aura un comportement complètement inattendu. Voici deux façons exemples d’altérer le comportement :
if (the_signal = clear)
{
open_gates(...);
}
ou bien alors
if (the_signal == clear);
{
open_gates(...);
}
Dans le premier cas, l’opérateur égalité a été remplacé par une affectation. Dans le second, un point-virgule a été placé à la fin de l’instruction d’évaluation. Avec Ada il n’est pas possible de commettre de telles erreurs. En Ada le code serait le suivant
if the_Signal = clear then
Open_Gates(...);
end if
En Ada si l’égalité @=@ est remplacée par une affectation @:=@, il en résulte une erreur de compilation. De même qu’il n’est pas possible d’écrire then;car l’instruction “nulle” doit être explicitement signalée par le programmeur.
Autre aspect du langage : le typage très fort. Ada permet d’abstraire fortement les entités du mondé réel représentées, même si elles sont représentées physiquement de la même façon.
Par exemple :
type Euro is new Integer;
type Dollar is new Integer;
Compte_Euro : Euro;
Compte_Dollar : Dollar;
La dérivation de type et le typage fort nous permettent d’éviter de mélanger des valeurs qui n’ont pas de rapport (à moins de le dire explicitement) :
Compte_Euro := Compte_Dollar;
sera tout simplement rejeté par le compilateur, car Compte_Dollar n’est pas du même type que Compte_Euro.
Dans la plupart des langages, il serait nécessaire de créer de nouvelles classes, alors qu’on ne cherche ici qu’à abstraire des types simples (des types numériques).
Ces exemples simples illustrent le fait que ce langage contraint totalement le programmeur à expliciter le comportement qu’il désire implémenter. Pour certains, cette contrainte peut être vécue de façon contre-productive : la plupart des langages sont plus tolérants et permettent d’emprunter des raccourcis, de coder plus vite. Cette liberté est souvent appréciée.
Néanmoins, si notre propos
- est de produire du code plus lisible (non ambigu)
- est de détecter les problèmes potentiels de notre code le plus tôt possible
nous sommes en droit de considérer le langage Ada comme une bonne réponse. La faible tolérance du compilateur Ada est vue alors comme une aide précieuse pour produire du code de meilleure qualité.
Saviez-vous que Ada fut le premier langage POO standardisé (avant même le C++)?
Le langage Ada est avant tout un standard dont la première version a été normalisée en 1983. La version 95 de la norme supporte la POO. La particularité de l’approche objet du langage Ada est, contrairement aux autres langages, de ne pas mélanger les concepts de typage et d’encapsulation. La dernière norme est la version 2005, et la future 201X est en cours de normalisation.
Il existe des implémentations de Ada pour bon nombre d’architectures et de plateformes. Signalons qu’il existe des implémentations pour la JVM JAVA et .NET. Notons que le langage Ada possède de nombreuses propriétés avancées, qu’il serait long de décrire. Citons notamment : la gestion intrinsèque de la communication entre tâches (dans la sémantique du langage) qui permet d’écrire avec élégance et simplicité des applications concurrentes, le support des types point-fixes, les systèmes répartis, gestion sûre des pointeurs, séparation de la spécification et de l’implémentation, unités de compilation séparées (packages), …
Ada favorise-il une approche agile de développement?
Je réponds sans hésiter oui à cette question. A l’heure où nous essayons tous d’améliorer nos pratiques afin de réaliser des produits de meilleurs qualité, qui sont ouverts aux changements, faciles à maintenir, le langage Ada me semble être du pain béni. Citons le cas d’un constructeur en avionique dont des équipes basées à Valence (France) travaillent en Scrum/XP avec le langage Ada 2005, en intégration continue, TDD et même spécifications exécutables
: leurs résultats sont tels que leur client les ont félicité officiellement (une première)!
Et vous, quelle est votre avis sur la question?
Remerciements
Je voudrais remercier Christophe Baillon de la société Sogilis basée à Grenoble, pour m’avoir fait découvrir Ada durant nos 4 jours de formation. J’avoue avoir été séduit par ce langage.
Remerciements également à AdaCore pour l’excellent compilateur GNAT, qui nous donne des messages d’erreurs très détaillés. La version GNAT GPL est librement téléchargeable sur http://libre.adacore.com.
Enfin citons ce livre mis à disposition ici d’où sont repris certains exemples.