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.
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.
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.ZAprè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.
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.
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) :
version | temps d'execution user |
---|---|
3.1 | 44.9 |
3.0.2 | 45.9s |
1.42 | 174.4s |
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.