GAZETTE N°25: Des nouvelles des compilateurs

Des nouvelles des compilateurs

Par Larry Ayers.

Adaptation française de Pierre Tane


Précédent Suivant Table des matières

5. Des nouvelles des compilateurs

5.1 Introduction

Le compilateur GNU gcc est l'un des programmes de la Free Software Foundation les plus appréciés. Il fait maintenant partie intégrante des distributions Linux. L'existence de gcc et de ses utilitaires annexes (make, autoconf, etc) permet de distribuer le code source de n'importe quoi, du noyau Linux à une impressionnante panoplie d'applications et d'utilitaires du logiciel libre. Cet état de fait est vital pour la survie et la bonne santé de Linux. Des gens différents utilisent des noyaux et des distributions différents, et ce serait trop demander aux développeurs bénévoles de créer des distributions directement utilisables (dites « binaires ») pour toutes les variantes de Linux et des autres OS basés sur Unix. Richard Stallman a bien raison d'insister sur la dépendance de Linux vis-à-vis d'un certain nombre d'utilitaires GNU.

Ces derniers temps, une certaine effervescence règne dans le monde des activistes de gcc, entraînant de nombreuses mises-à-jour et donnant aux utilisateurs de Linux un choix plus étendu pour leur environnement de développement.

Les personnes travaillant sur les projets GNU opèrent plutôt en vase clos : l'utilisateur moyen ne peut facilement accédeder aux nouvelles, ni aux rapports d'avancement. La mise à disposition d'une nouvelle version est généralement la seule indication que le développement avance. Comme les logiciels GNU sont distribués sous la licence GNU, rien n'empêche les autres développeurs d'en modifier le code et d'en distribuer des variantes. Il existe une autre approche du développement du logiciel libre, dans laquelle les patches et les versions d'évaluation sont librement disponibles pour tous. Le noyau Linux (avec mise à disposition, à la fois des versions stables et des versions instables de développement) en est un exemple évident et qui fait école. XEmacs, KDE et GNOME en sont d'autres. Depuis l'avènement d'egcs, il semblerait que les développeurs GNU se mettent à ce modèle de développement, si l'on se réfère à ce qui est disponible sur le site web du projet GNU.

L'article d'Éric Raymond, The Cathedral and the Bazaar, (NdT : Ce document a été adapté en français, et est disponible sur http://www.lifl.fr/~blondeel/traduc/) est une interprétation pertinente et intéressante de ces deux modèles différents de développement de logiciel libre. Il est à l'origine de l'une des premières variantes disponibles de gcc (à ma connaissance) :egcs.

5.2 egcs

gcc 2.7.2 est le compilateur standard de GNU depuis un certain temps déjà. La société Cygnus Corporation propose une assistance commerciale pour certains programmes GNU et a porté un certain nombre d'entre eux sous MS-Windows. Un groupe de programmeurs a tenté une expérience : à partir des sources de GNU, ils ont adapté les patches ce qui donna en fait gcc-2.8.0 (en terme de numérotation des sources de développement GNU) et ont ajouté des fonctions expérimentales qui n'intéressaient pas les développeurs GNU, ou qu'ils prévoyaient d'ajouter ultérieurement. L'idée était de rendre périodiquement librement disponible des versions d'évaluation dans l'espoir d'attirer de nouveaux développeurs. Cette approche semble fonctionner : je ne sais pas combien de nouveaux programmeurs apportent leur contribution au projet, mais les deux versions qu'ils ont pour l'instant distribuées (1.00 et 1.01) sont utilisées par un grand nombre de personnes sans aucun problème. Tout changement intéressant dans egcs sera mis à la disposition des développeurs de gcc afin de peut-être l'inclure dans les prochaines versions. C'est bon aussi bien pour les utilisateurs finals que pour les programmeurs GNU, dans la mesure où les utilisateurs essaient ces nouvelles fonctionnalités et ces nouvelles fonctions (ainsi les éventuels bugs sont signalés et corrigés). D'autre part, les sources peuvent être utiles aux gens de GNU qui s'occupent de gcc.

5.3 pgcc

gcc et egcs sont destinés à être compilés et utilisés sur une grande variété de processeurs. Cependant, un autre groupe de développeurs a modifié le code d'egcs afin qu'il emploie certaines des instructions spécifiques aux processeurs Intel Pentium. Pgcc consiste en un ensemble de patches qui peuvent être appliqués au code source d'egcs, ce qui permet de compiler du code avec des optimisations spécifiques au Pentium. Ces développeurs disent que le temps d'exécution (des exécutables compilés avec pgcc) peut être de cinq à trente pourcents inférieurs à ceux des binaires engendrés avec gcc. Une nouvelle distribution Linux appelée Stampede utilise pgcs pour compiler les binaires du noyau et les applications qu'ils comptent distribuer. Il est intéressant de noter que les patches originaux que les développeurs de pgcs ont utilisé comme point de départ proviennent d'une équipe de programmeurs de chez Intel.

5.4 Mon expérience

Bien que le compilateur gcc de GNU a toujours bien fonctionné chez moi, l'attrait de la nouveauté m'a conduit à tenter l'expérience avec egcs quand la première vraie version est apparue sur le site web d'egcs, fin 1997. La première chose que j'ai remarquée était que le compilateur tend à générer davantage d'avertissements que ne le faisait l'option -Wall de gcc 2.7.2. Ceux-ci ne semblent pas avoir des conséquences néfastes et j'ai entendu dire que gcc 2.8.0 avait le même comportement. Tout ce que j'ai essayé s'est bien compilé à part les sources de KDE. J'ai entendu dire que les problèmes allaient être réglés avec KDE Beta 3. Si vous n'avez jamais compilé une version de gcc à partir des sources, attendez vous à une compilation longue et gourmande en espace disque. Cela arrive à différentes étapes : lors de la dernière, le compilateur se compile lui-même, un procédé nommé le boot-strapping.

Quelques temps après avoir installé egcs, je suis tombé sur le site de pgcc. J'ai téléchargé un grand nombre de patches que j'ai appliqués au code source d'egcs. En plus de la dimution du temps d'exécution vantée (qui, dans la plupart des cas, n'est pas assez importante pour être remarquée), l'optimisation peut-être augmentée jusqu'à -O6 et un commutateur spécifique au Pentium, -mpentium peut être utilisé. Les exécutables obtenus ont tendance à être plus imposants que ceux de gcs à cause de l'inclusion par défaut de la gestion des exceptions. Cela peut être désactivé par l'option -fno-exceptions.

Jusqu'ici, j'ai compilé plusieurs noyaux Linux, XEmacs, mutt, slrn, Gimp, gzip, bzip2 et d'autres programmes sans aucun problème. J'aurais aimé être une personne bien organisée et avoir chronométré les temps d'exécution avant et après avoir utilisé pgcs mais ce n'est pas le cas. Par exemple, j'utilise XEmacs 20.5 beta-22 avec le noyau Linux 2.1.84 et l'éditeur me semble répondre plus rapidement qu'avant. Mais, est-ce dû au compilateur, au noyau, à la version d'XEmacs ou (plus probablement) aux trois ? Trop de variables et pas assez de temps !

Je ne vous recommande pas d'installer ces variantes de gcc, à moins que vous n'ayez l'intention de suivre activement les groupes de discussion, les sites webs ou les listes de diffusion. Heureusement, les problèmes et les moyens de les résoudre sont signalés rapidement et, bien sûr, vous pouvez toujours vous rattraper en réinstallant les paquetages de distribution de gcc si votre configuration commence à mal tourner. Il sera intéressant de voir ce qu'il sortira de cette bifurcation non compétitive dans l'évolution de gcc.


Précédent Suivant Table des matières

Copyright (c) 1998, Larry Ayers. Publié dans le Numéro 25 de la Linux Gazette

Adaptation française de Pierre Tane