Pourquoi Ada c'est Bien ?

 

Choisir Ada comme principal langage de programmation peut paraître étrange à première vue. Etrange, parce que la plus part des gens programment aujourd'hui en C/C++, et qu'imposer Ada comme langage de base en forcera beaucoup à apprendre un nouveau langage, dans le meilleur des cas, et à ne pas participer au projet, dans le pire. Alors pourquoi imposer Ada ? Un langage qui, comme beaucoup le disent, est nettement plus lent que le C++ ?

Lorsque l'on parle d'Ada, il faut avant tout bien différencier ses différentes versions : Ada 83, Ada 95 et bientôt Ada 2005. Ada 83 est à langage très lourd à utiliser, qui n'implémente pas les objets, et qui souffre d'une réputation déplorable à bien des égards. Il est à Ada 95 ce que C est à C++. Son successeur est beaucoup plus évolué. Tout en conservant la philosophie de l'idée originale, il y ajoute, entre autres, tout l'arsenal orienté-objet (héritage, polymorphisme, généricité, exceptions...).

Parlons un peu techinque. Ada n'est pas plus lent que le C++, ses performances sont largement comparables, voire même meilleures dans certains cas. Le mythe selon lequel Ada est moins rapide que le C++ vient de deux faits : tout d'abord, Ada effectue énormément de tests à l'exécution, pour prévenir d'éventuelles erreur de programmation, ensuite ses performances sont énormément dépendantes des compilateur, le langage étant beaucoup plus éloigné de la machine que le C++. Les premiers compilateurs Ada étaient effectivement extraordinairement mauvais, et construisaient des programmes très peu optimisés. Aujourd'hui, un compilateur tel que GNAT (que nous utiliserons) bénéficie exactement de la même technologie que C (via gcc) pour passer de l'arbre syntaxique au code assembleur. D'autre part, le nombre et la position des tests sont réduits au strict nécessaire, ce qui évite les nombreuses redondances dont souffraient les premiers compilateurs. Le seul reproche qu'on peut faire, et que l'on pourra toujours faire, à Ada concerne la taille des exécutables, sensiblement plus importante que celles de ses homologues en C/C++. Dans un monde où le prix du Mégaoctet est en perpétuelle décroissance, et où finalement seule comptent les Mégahertz, une telle limitation n'entre pas en ligne de compte.

Sachant maintenant que du point de vue des performances, ces deux langages se valent, pourquoi choisir Ada ? Revenons en arrière, concernant le C dont est issu le C++. Ce sont des étudiants d'une université américaine qui l'on mis au point, pour pouvoir développer ensuite leur système d'exploitation, une version gratuite d'Unix (qui donnera Linux plus tard). Le langage n'a pas été l'objet d'une vraie réflexion en termes d'intelligence de la syntaxe, mais juste pour pallier à un assembleur ingérable. Il est donc largement permissif, et une programmation propre réduit au minimum l'utilisation des facilités syntaxiques qu'il propose. Le problème est qu'il est fréquent, à la suite d'une erreur d'inattention, de tomber dans l'une de ces facilitée non attendues et de créer ainsi un programme qui plante. Le débugger peut alors prendre de longues heures. Ada a été pensé par un groupe de personnes qui recherchait un langage capable de résoudre à la compilation le maximum d'erreurs d'inattention, et de déceler à l'exécution avec le plus de précision possible les bugs. Ce qui rend les programmes Ada particulièrement fiables et fonctionnels par rapport à leurs homologues C.

D'autre part, et même après l'avènement des technologies objet, partager du code en C++ reste une complexe affaire de normalisation. Les fichiers d'entête sont souvent incompréhensibles et l'utilisation antédiluvienne des macros rend énormément de codes illisibles. Ada est fondé sur une séparation stricte des spécifications et de l'implémentation, ce qui rend les fichiers d'entête tellement clairs qu'il est, la plus part du temps, inutile d'y joindre la moindre documentation.

Enfin, la norme C++ évolue perpétuellement, et aucun compilateur n'est tenu de la respecter, ce qui entraîne que chacun y lit à peu près ce qu'il y veut. Un programme parfaitement fonctionnel avec un compilateur ne passera pas la phase de compilation pour un autre. Concernant Ada, un compilateur n'est pas autorisé à ne pas respecter la norme. Cela rend, entre autres, la portabilité Linux / Windows quasi sans douleurs. Cette portabilité est l'un des points du cahier des charges du jeu Âmes.

Pour ces raisons, il nous a semblé préférable d'innover, et d'imposer un langage habituellement cantonné à des applications critiques, comme les calculs embarqués ou les logiciels militaires. Ada n'est pas un langage intrasèquement difficile à apprendre. Sa syntaxe a beaucoup de points communs avec Pascal, et implémente tous les concepts objets classiques. Il existe un grand nombre d'outils gratuits permettant de l'utiliser, environnement de développement, débuggeurs, compilateurs, et son intégration avec d'autres langages est parfaitement possible. Nous espérons que les programmeurs intéressés ne nous tiendront pas trop rigueur de notre choix, dans les premiers temps, et sommes persuadés qu'ils l'approuveront dès qu'ils se seront essayés à ce langage.

Si toutefois vous restez sceptique, n'hésitez pas à nous envoyez vos remarques !