Est-ce que la qualité du code de gcc progresse ?

Introduction

En octobre 2001, voilà-t-y pas que j'ai envi de voir si un vieux gcc compile aussi bien qu'un gcc moderne.

La première étape consiste a installer un vieux gcc.

Retrouver un vieux gcc

On peut se dire que retrouver une veille version de gcc c'est facile, un petit coup de google ou d'altavista et hop c'est dans la poche. Hé bien faut croire que je n'ai pas eu de chance. J'ai rien trouvé a ce sujet.

La deuxième étape consiste à fouiner un peu sur le site ftp.gnu.org. J'ai sauté de joie quand j'ai un répertoire old-gnu, mais quand j'ai vu le contenu, j'ai moins apprécié, ce n'est pas du si ancien que cela.

En faite c'est en regardant le répertoire où sont proposées les versions courantes que j'ai trouvé mon bonheur : gcc-1.42. Donc pour ne pas surcharger le site du gnu, je suis allé faire un petit tour sur un site mirroir, c'est à dire le site ftp de l'Inria, dans le répertoire gnu, ou il y a un gcc-1.42.

Installer gcc-1.42

Le deuxième stade, qui je pense ne sera pas des plus facile consiste à installer sur une distribution linux de l'époque (pour ma part une Mandrake 8.0), une "antiquité", mais ceci ne devrait pas être insurmontable.

La première étape consiste bien sur à décompresser l'archive :

Ready tar zxvf gcc-1.42.tar.Z
Après bien sur il faut suivre les instructions. Un des problèmes rencontrer est que j'ai du remplacer un certain nombre de ligne de ce genre :
extern char *sys_errlist[];
par
extern __const char *__const sys_errlist[];
Je n'ai pas réussi à faire une installe propre. Je me suis contenté d'un make qui réussi et d'un make install.

Compiler avec le gcc-1.42 pourri que j'ai installé

Comme je l'ai expliqué dans le paragraphe précédent, le gcc-1.42 que j'ai installé est particulièrement pourri, donc la compilation est particulièrement sportive. En prenant pour exemple le programme mandelbrot.c, la compilatin donne :

Ready gcc-1.42 -s mandelbrot.c -o mandelbrot.s

<< edition de mandelbrot.s remplacement de _main par main >>

Ready as mandelbrot.s -o mandelbrot.o
Ready gcc-3.0.2 mandelbrot.o -o mandelbrot
Ready ./mandelbrot
Ready

Et on constate que j'arrive à executer le programme.

Comparaison des temps

Je vais être bref pour les résultats, voici le temps d'execution user (le temps system est négligeable) pour gcc-1.42 et gcc-3.0.2 (ajout de 3.1) :

versiontemps d'execution user
3.144.9
3.0.245.9s
1.42174.4s

Conclusion

On serait tenté de dire : ah ils sont forts ces développeurs gcc, au grés des versions, le code compilé va vraiment plus vite !

Je ne m'emballerais pas trop vite, car je soupçonne que gcc-1.42 peut faire beaucoup mieux si on lui donne les bonnes options. Je vous tiendrai au courant de mes nouveaux tests.

Liens

retour


Emmanuel DUMAS, emmanuel point dumas arobase free point france
Last modified: Thu May 23 12:52:33 CEST 2002