Page suivante Page précédente Table des matières

12. Gnat et Linux : C++ et Java, l'épreuve du feu

12.1 Index rapide :

12.2 Environnement d'utilisation

  • Sessions longues.
  • Environnements hostiles.
  • Règles complexes.
  • Systèmes de guidage de missiles.

On va ici traiter du langage informatique que beaucoup de personnes connaissent sous le nom d'Ada. De nos jours, l'Ada ressemble plus au Delphi d'Inprise qu'à son ancêtre préhistorique et sera bientôt en mesure de produire des applets Java que vous pourrez intégrer à vos sites web. Cependant, est-il capable de se confronter aux autres langages disponibles sous Linux?

12.3 Plus récent que Java

La nouvelle norme Ada est connue sous le nom d'Ada 95. De deux ans plus jeune que Java, c'est le premier langage de programmation orienté objet à être normalisé internationalement. Cela signifie que tous les compilateurs Ada et leurs librairies devraient marcher de la même manière sur tout système d'exploitation en donnant un niveau additionnel de portabilité aux programmeurs Linux.

Le C++ est la norme de facto en matière de programmation Linux. Après tout, le noyau lui-même est écrit en C. Cependant, le C++ n'est pas adapté à tous les projets compte tenu du fait que des langages informatiques différents ont des atouts et des défauts différents. Ada a été conçu pour le développement en équipe et les systèmes embarqués, ce qui lui donne un avantage sur C en matière de temps de développement et de déboguage. Une étude en détail en 1995 de Stephen F.Zeigler ( http://sw-eng.falls-church.va.us/AdaIC/docs/reports/cada/cada_art.html) a montré que le développement en Ada coûte à peu près la moitié de celui du C++. Elle indique également que Ada produit "presque 90% de bogues en moins pour l'utilisateur final".

Le compilateur de test pour Ada 95 était gnat.

12.4 Gnat : gcc comprend l'Ada

Le compilateur Ada produit par Ada Core Technologies (ACT),gnat, est disponible gratuitement pour Linux. Gnat est également disponible sur d'autres plates-formes dont Sun Solaris, Silicon Graphics, DEC Alpha et Microsoft Windows.

Gnat a été développé en étroite liaison avec gcc, le compilateur C natif pour Linux. A la différence de la plupart des compilateurs qui traduisent un programme en C et donnent ensuite le programme en C à gcc, gcc dispose d'un support intégré du langage Ada. Comme g++, gnat marche bien avec gcc, ce qui lui permet de produire des exécutables rapides et de qualité sans étapes intermédiaires.

Cette intégration donne une grande liberté aux programmeurs qui veulent ou ont besoin d'un support pour de multiples langages. Gnat propose un ensemble exhaustif de fonctionnalités pour le partage de variables et d'appels de fonction entre Ada et C/C++. Il peut importer des objets C/C++ dans Ada et exporter des objets Ada vers C/C++. Vous pouvez également lier des fonctions Ada indirectement dans Java en utilisant la possibilité de Java d'importer des fonctions C++.

Gnat est fourni avec plus de 140 bibliothèques standard. Celles-ci incluent des bibliothèques numériques et de traitement de chaînes de caractères, des opérations sur les fichiers, les tables de hachage et les tris. Si vous préférez travailler directement avec les bibliothèques C Linux, un échantillon de librairies de "lien" existe, disponible sur la Public Ada Library ou sur The Home of the Brave Ada Programmers. Celles-ci comprennent des liaisons pour les applications POSIX (c'est-à-dire le noyau), X Windows, Motif, TCL et CGI WWW.

Bien que gnat soit distribué sous licence GPL, gnat et ses librairies peuvent être utilisés dans des applications commerciales.

12.5 Fonctionnalités et compatibilité

L'année dernière, j'ai effectué quelques tests simples avec gnat, le kit de développement Java et gcc.

Comparaison des performances des langages

(Pentium 90, 10 millions d'itérations, les résultats sont en secondes CPU)

JavaAdaC
JDK 1.0.1 gnat 3.09 gcc 2.7.2.1
Test
Assignement de constantes 20.68 0.36 0.23
Assignement d'entiers longs (long int) 20.88 0.35 0.22
Multiplication d'entiers longs 29.50 0.38 0.23
Accès à des tableaux 24.52 0.64 0.23
Appels de fonction 15.63 1.07 0.22
Concaténation de chaînes de caractères 19.29 0.35 2.75
 
Gnat s'est bien comporté face à gcc. Malgré les nombreuses vérifications d'erreur de gnat au moment de l'exécution, les programmes de test ont tourné en moyenne un tiers moins vite que gcc. Avec la désactivation de ces vérifications, vous devriez obtenir des performances comparables à celles de C. Du fait de sa nature de langage interprété, Java s'est avéré plusieurs fois moins rapide qu'Ada ou C.

La table suivante présente un résumé de certaines fonctionnalités courantes sous la forme d'une comparaison avec d'autres langages (dont Delphi) :

 

 Résumé de fonctionnalités courantes  

C++ Java Ada Delphi
 Fonctionnalité
Objets & classes oui oui oui oui
Caractères 16 bits NON oui oui oui
Court-circuits NON oui oui oui
Surcharge oui certains* oui oui *pas d'opérateurs infixes
Inlining oui NON oui oui
Multithreading intégré NON oui oui* oui *dispose de deux sortes
Héritage multiple oui interfaces NON NON
Polymorphisme oui oui oui oui
Champs privés oui oui oui oui
Support système distribué intégré NON NON+ oui* NON *nécessite un add-on gratuit +pas intégré, utilise une classe
Ramasse-miette NON oui oui* oui *non implémenté par gnat
 

Comme vous pouvez le voir, Ada ne fait pas pâle figue face à Java.

12.6 Installation

Compte tenu de son intégration avec gcc, les binaires gnat sont compilés pour une version spécifique de gcc et ne marcheront qu'avec cette version. La dernière version publique d'ACT est la 3.10p qui a été compilée pour gcc 2.7.2.1. Si vous avez cette version, le programme d'installation vous permet d'installer directement gnat sur votre système. Cela remplacera votre copie de gcc par celle qui dispose du support Ada.

Si vous n'avez pas gcc 2.7.2.1, vous pouvez spécifier un répertoire distinct dans lequel gnat s'installera avec sa copie personnelle de gcc 2.7.2.1.

Pour pouvoir utiliser gnat, vous devez effectuer les deux étapes suivantes :

  1. Le programme d'installation créée un script shell qui contient les variables d'environnement que vous pouvez copier dans le script de démarrage de votre shell sous bash, c'est le fichier profile). Gnat utilise ces variables pour trouver ses fichiers importants.
  2. Mettez le répertoire de gnat en tête de votre path de manière à empêcher gnat d'utiliser la version de gcc qui est fournie avec votre distribution Linux. (Ne faîtes ceci que quand vous voulez lancer gnat.)

Quand j'ai essayé d'installer gnat sur ma RedHat, j'ai rencontré un certain nombre de problèmes. Selon ACT, ils sont au courant des problèmes d'exécution de gnat sous la RedHat et les instructions sur la manière de le faire marcher se trouvent sur le canal de discussion gnat et sur les archives de comp.lang.ada. De toute manière, les gens d'ACT disent qu'ils fourniront une version publique de gnat compatible avec la RedHat 5.1 dans un futur relativement proche.

Une fois les binaires installés, les plus aventureux d'entre vous pourraient vouloir recompiler gnat pour leur version de gcc :

  1. Vous devez disposer d'une copie des sources de gcc de manière à compiler une copie de gcc qui soit compatible avec gnat. Celles-ci devraient être disponibles avec votre distribution Linux. La version minimum est la 2.7.2.
  2. Téléchargez une copie des sources de gnat qui sont disponibles en téléchargement sur le site de gnat et ses miroirs.
  3. Recompilez gcc et gnat. Assurez vous de suivre les recommandations de gcc pour l'activation du support Ada.

12.7 Disponibilité et support commercial

Les sources du compilateur et l'exécutable pour le grand public sont disponibles gratuitement sur ftp://cs.nyu.edu/pub/gnat et ses miroirs.

De même que Samba, ACT peut fournir un support commercial mais cela coûte des milliers de dollars. Le support inclut une priorité dans la correction des bogues de même que la dernière version de gnat (compilé avec n'importe laquelle des versions de gcc que vous puissiez utiliser). Le support commercial n'est pas réellement requis pour des projets importants à l'instar de Samba. Une assistance technique est disponible sur Internet et dans la mesure où le compilateur tient compte des normes internationales et a été intensivement testé, la version publique est aussi bien construite et fiable que gcc lui-même. Le support commercial est destiné aux projets substantiels qui nécessitent un support de haut niveau tels que les projets cruciaux pour le succès d'une affaire ou d'un département.

Gnat est fourni avec une abondante documentation au format HTML que vous pourrez consulter avec lynx ou Netscape. Ceci inclut une couverture complète de toutes les fonctionnalités et options spécifiques à gnat. Malheureusement, aucun tutorial Ada n'est fourni.  

12.8 Byte Code Java et applications distribuées

L'année dernière, ACT a annoncé que sa prochaine version de gnat sera non seulement capable de produire des programmes exécutables mais également des exécutables Java (qualifiés de "byte code"). Un programme gnat pourra tourner sur n'importe quel interpréteur Java, comme par exemple des applets d'un site web tournant sous un navigateur disposant du support Java. Ceci donne au programmeurs web Linux une alternative à l'utilisation de Java.

ACT fournit aussi un add-on gratuit à gnat appelé "Glade" qui permet le support intégré des applications distribuées d'Ada 95. Les programmes utilisant Glade peuvent fonctionner ensemble de manière transparente à travers un réseau.

12.9 Inconvénients

J'ai rencontré quelques problèmes lors de mon utilisation de gnat.

Lors de mes tests de gnat, j'ai trouvé un problème mineur lié au pragma normalize_scalers. C'est une directive du compilateur qui aide à détecter les variables utilisées avant leur initialisation. La directive fonctionnait bien à l'exception d'un paquetage contenant des définitions d'objet. Toutes les autres fonctionnalités du langage que j'ai testées ont semblé bien se comporter sous Linux y compris le multitâche.

Les exécutables gnat peuvent atteindre plusieurs fois la taille d'un exécutable gcc. Gnat propose des directives du compilateur pour réduire la taille d'un programme mais si une petite taille est important pour vous, peut-être devrez vous éviter gnat.

Il manque également à gnat un Environnement de Développement Intégré mais cela est un problème commun aux langages sous Linux.

Ma plus grande reproche n'est pas sur le langage : elle concerne l'aide inégale fournie aux clients. Bien que j'ai toujours reçu des réponses rapides de la part d'ACT, ils n'ont pas toujours été courtois ou efficaces et j'ai bien plus souvent été frustré que surpris.

Un jour, je suis allé au magasin de photocopie de mon quartier pour faire des copies du manuel de gnat et ils ont refusé de les faire car le manuel contient des restrictions de copie. J'ai envoyé un mél à ACT et ils ne mirent pas beaucoup de temps à me répondre que le copyright allait être changé dans la prochaine édition. Cela fait plus d'un an qu'ils ont mis à jour leur site FTP et j'attends toujours d'y voir ce subtil changement.

A un autre moment, ma compagnie de logiciels étudiait la conformité de gnat comme plate-forme de développement sous Linux. Autant que nous sachions, ACT pouvait être lancé sans les bases jetées par Robert Dewar. Nous voulions nous assurer qu'il y aurait des versions futures de gnat avant de nous lancer dans le développement d'une base logicielle et d'encourir les stigmates de la programmation en Ada. On nous a d'abord dit que nous ne devions pas penser à développer avec gnat sans disposer de leur support commercial. Ensuite, on nous a dit qu'ils ne fourniraient pas de support commercial pour une compagnie telle que la nôtre. Si ACT nous avait donné une réponse claire, nous avait dit que nous serions tout de même assistés sur la base d'un niveau non prioritaire et nous avait souhaité bonne chance pour notre continuation, nous aurions été plus que contents. Au lieu de cela, nous avons pensé qu'ils n'avaient pas été honnêtes avec nous et qu'ils nous n'avaient pas pris au sérieux quand nous avions considéré d'utiliser gnat dans un premier temps.

Aucune compagnie ne devrait être méprisante ou manquer de respect à ses clients. Ils ont droit à des réponses claires, des corrections de bogues ainsi qu'à des "s'il vous plaît" et "merci" pour leur montrer que leur intérêt pour le produit est apprécié.

12.10 Recommendations

Sans doute permis, gnat tient la route face aux autres outils de développement sous Linux. Je recommanderais gnat et Ada pour les raisons suivantes  :

  • Tout projet nécessitant un contexte d'équipe, de multiples langages informatiques ou une grande précision. Ada surpasse C++ et Java dans ces cas là.
  • C'est une alternative intéressante du point de vue financier pour les universités et les grandes écoles. La structure forte d'Ada, ses riches fonctionnalités et sa syntaxe facile à lire en fait l'objet idéal des cours d'introduction en Informatique.
  • Toute personne qui se sent plus en confiance avec des langages de type Pascal tels que les programmeurs Delphi ou BASIC nouveaux venus à Linux.

De même, toute personne faisant du développement Java sous Linux devrait penser à jeter un oeil sur la prochaine version de gnat.

Robert Dewar, président d'ACT, m'a assuré qu'"ACT se destine à fournir des produits Ada 95 de qualité pour Linux. Nous disposons d'une bonne base d'utilisateurs Ada sérieux sous Linux et nous pensons continuer à alimenter ce marché Linux pour de tels utilisateurs."

Au sujet de la croissance exponentielle de Linux ces deux dernières années, Mr Dewar n'a pas mis longtemps à mettre en exergue que le marché Linux de gnat est pour le moment assez étroit. ACT n'est pas intéressé par la promotion de la norme Ada 95. Ils préféreraient passer leur temps à améliorer leurs produits et à les vendre au marchés Ada existants. Le fait que la communauté Linux ait largement méprisé gnat n'est pas surprenant.

La différence entre un projet réussi et un échec peut souvent se décider sur le choix du bon outil de développement pour le travail considéré et gnat a beaucoup à offrir de ce point de vue. Gnat apporte à Linux un environnement de développement versatile, un compilateur efficace et un riche ensemble d'outils de développement  : la communauté Linux ne devrait pas ignorer ces points. Que gnat ait un avenir brillant ou non avec Linux est un mystère pour tout le monde mais cela serait une honte que de passer à côté d'un logiciel libre de si haute qualité. C'est une leçon que tous les fervents partisans de Linux ont bien compris.

12.11 Ressources

Sites Web

Livres

  • Professional Java Fundamentals. Cohen, Shy et al. Wrox Press, 1996.
  • Programming in Ada 95. Barnes, John. Addison Wesley, 1996.
  • C++ for Professional Programmers. Blaha, Stephen. Int'l Thomson Computer Press, 1995.


Copyright © 1998, Ken O. Burtch - Publié dans le numéro 33 de la Linux Gazette d'octobre 1998.

Adaptation française de Pierre Tane


Page suivante Page précédente Table des matières