Liens connexes

Dépêche modérée par

Dépêche éditée par

: Sortie de la version 4.1 du compilateur GCC

Posté par patrick_g (page perso, ). Modéré le 01 mars 2006.
0
Écrit à l'origine par Richard Stallman le logiciel GCC (GNU Compiler Collection) est devenu le compilateur de référence du monde du logiciel libre.

Après le tant attendu GCC 4.0 qui a vu la refonte complète son architecture interne voici maintenant la version 4.1 qui arrive.
Comme prévu la technologie SSA (Static Single Assignement) qui est au c½ur du nouveau GCC permet maintenant d'optimiser plus facilement le code source afin d'obtenir des améliorations générales. Le SSA est (en très gros) une forme intermédiaire entre le code source et le binaire dans laquelle chacune des variables du code source n'est assignée qu'une seule fois. Cette assignation unique a de nombreux avantages :
  • Les définitions et les utilisations de chacune des variables deviennent claires et explicites.
  • La majorité des analyses statiques du code source ne propagent les informations qu'à l'endroit strictement nécessaire.
  • Un grand nombre d'optimisations sur la forme intermédiaire SSA deviennent linéaire en temps.
  • De nombreux algorithmes deviennent plus concis et plus simples dans le cadre du SSA.
Après la grande bascule vers cette toute nouvelle technologie lors de la version précédente, l'équipe de développement de GCC s'est maintenant consacrée à l'amélioration poussée du code binaire produit par le compilateur. C'est donc le début des vrais bénéfices pour les utilisateurs !

> Lire la dépêche (75 commentaires, moyenne: 4,5).  


Pour ce qui est des évolutions futures du compilateur on peut se pencher sur les articles (très) techniques issus de la publication du sommet GCC de 2005 à Ottawa.
On découvre que, expansion rapide de GNU/Linux aidant, beaucoup de grandes entreprises de logiciel et de hardware soutiennent le développement de GCC en payant des développeurs à plein temps : Intel consacre beaucoup d'effort au support de l'Itanium avec le projet Gelato et IBM fait de même avec le support de sa nouvelle architecture Cell. Ces deux types de processeurs étant très particuliers, ils nécessitent un compilateur extrêmement performant et moderne pour optimiser correctement le code généré.
Apple pour sa part finance l'amélioration du support du langage Objective-C alors que les deux poids lourd du monde Linux commercial, Novell/Suse et Red Hat, participent également activement aux améliorations du compilateur libre.
Bien entendu tout cela ne peut que renforcer le caractère incontournable de GCC dans le monde du logiciel libre et même au-delà.

PS1 : Pour faciliter son travail de développement l'équipe GCC a abandonné en fin d'année le logiciel de gestion des versions CVS et a migré vers Subversion (dont la version 1.3 est disponible). Après KDE c'est encore un poids lourd du monde du libre qui a basculé vers Subversion.
PS2 : Merci à alenvers pour ce post explicatif que j'ai repris sans aucune vergogne.

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Ca c'est de la bonne dépêche !

Posté par Cali_Mero () le 01/03/2006 à 10:55. (lien). Évalué à 10.

Merci à l'auteur et tous ceux qui ont contribué à nous apporter une information si claire et détaillée !

Une petite question tout de même : les améliorations apportées dans cette nouvelle mouture produisent donc des binaires plus performants au final pour le même code source, si j'ai bien compris. Mais qu'en est il du temps de compilation lui-même ? Y-a t'il un surcout à ce niveau ?

Sinon, pour quel type de code/projets bénéficiera t-on le plus des améliorations de gcc 4.1 ? Et peut-on redouter des incompatibilités de certains codes sources comme ce fut le cas lors du passage à gcc 4.0 ?

--
#define MAGIC 0xdefaced /* I should've patented this number -cliph */

Esperons que la qualité suivra

Posté par Ontologia (page perso, ) le 01/03/2006 à 11:07. (lien). Évalué à 10.

J'ai eu quelques problèmes avec GCC 4.1 qui est plus restrictif au niveau du code.

MPlayer ne veux pas compiler avec, il impose gcc-3. Je me suis amusé à le forcer à utiliser gcc 4, ça ne compile effectivement, et il génère une erreur interne.

De même, le code généré par le compilateur Lisaac, qui a la particularité de gérer lui-même sa mémoire (ie. un gros malloc au début, et une gestion "à la main" des zones mémoires dans le code), ne compile généralement pas le code généré par le compilateur. Ce code est pourtant conforme à C99 (au minimum tout le corps du code).
Remarque GCC 3 déconne aussi parfois. Avec le même code craché par le compilateur, on remarque, si l'on compile en -O {2,3,s}, que le compilateur invente des registres (!!!). C'est vraiment assez marrant à regarder.

Il serait donc peut être intéressant qu'un jour, une équipe, comme celle de Xavier Leroy à l'INRIA s'amuse à prouver quelques morceaux du compilateur.
Ce qui a été fait pour un compîlateur mini C.

http://pauillac.inria.fr/~xleroy/compcert-backend/

GCC reste néanmoins un excellent logiciel, sans lequel le libre ne serait à mon avis pas ce qu'il est.

Félicitation à l'équipe.

Gentoo

Posté par LastMan / Lastrainson (page perso, ) le 01/03/2006 à 11:28. (lien). Évalué à 2.

Vivement que Gentoo supporte officiellement la série 4 de GCC... Y'a pas à dire, elle commence à se faire attendre ;-)

Pour le moment on peut quand même l'utiliser à coup d'entrées dans les fichiers de configuration de portage (le système de gestion de paquets de Gentoo) mais ça reste officiellement non supporté, même en ~arch qui est l'équivalent d'un "unstable" debian (obligation de rajout d'une variable d'environnement / de configuration I_PROMISE_TO_SEND_PATCHES_WITH_BUGS par exemple, en stipulant bien que si ton système casse avec GCC 4.x, pour le moment c'est ton problème.)

M'enfin... Je garde espoir, sachant que c'est surtout le code de certaines appllis qui ne compilent pas avec GCC 4 qui fait que le support officiel tarde.

ObjectiveC++

Posté par Larry Cow () le 01/03/2006 à 11:43. (lien). Évalué à 7.

Parmi les modifs attendues de cette nouvelle version, il y a si je ne m'abuse le support pour l'Objective-C++ (mélange d'Objective-C et de C++ dans un même code). Ceci devrait notamment permettre le portage d'un certain nombre d'applis libres du monde MacOS vers GNUstep.

apple et gcc

Posté par Troy McClure (page perso, ) le 01/03/2006 à 12:42. (lien). Évalué à 5.

Apple fait un peu plus que supporter l'obj-C, ça a été les premiers à adopter gcc 4.0 et maintenant ils envisagent des changements assez radicaux dans gcc:
http://www.kdedevelopers.org/node/1628
http://gcc.gnu.org/ml/gcc/2005-11/msg00888.html
(le but étant de permettre des optimisations au moment du link)

Ubuntu Dapper

Posté par laurent carlier () le 01/03/2006 à 12:48. (lien). Évalué à 1.

Dispo sous Ubuntu Dapper :
https://lists.ubuntu.com/archives/dapper-changes/2006-March/(...)

A propos des optimisations de code

Posté par Fabrice Mousset (page perso, ) le 01/03/2006 à 14:29. (lien). Évalué à 10.

Je travail dans le domaine de l'électronique industrielle et de l'informatique embarquée. En gros ça veut dire que je joue avec des composants qui disposent d'un espace adressable relativement faible (de l'ordre de la centaine de ko).
Dans mon domaine on a l'habitude de travailler avec compilateurs relativement chers qui offrent des optimisations de codes très, très poussées (codewarrior, microtec, hi-tec, etc).

De puis quelques temps j'ai commencé à travailler avec le compilateur GCC et ses outils annexes, plus par curiosité et pour des développements personnels.
J'ai vu dans une doc de GCC version 3.xx, que celui-ci était incapable de faire une optimisation de code au niveau "module". En gros ça veut dire que si on utilise une fonction d'un module/fichier C d'une librairie, tout les fonctions du module sont importées dans le binaires.
Ce qui est relativement génant pour moi à moins de fractionner tous mes fichiers pour les exploser dans des fichiers séparés. Ce qui n'est pas forcément simple à faire ni agréable.

Je voulais simplement savoir si dans la version 4.0 ou 4.1 c'était encore le cas ? Quelqu'un sait où je pourrait trouver cette info ?

Et pour compléter encore un peu, est-ce qu'il y a quelque part des infos concernant la pertinance des optimisations et éventuellement un comparatif par rapport à d'autres compilateurs commerciaux ou libre ?

Sinon, super dépêche, très intéressante.

Toujours pas l'intégration de GOMP...

Posté par tuan kuranes (page perso, ) le 01/03/2006 à 15:11. (lien). Évalué à 10.

Le futur des PC c'est le multi-core, vu que la course au Ghz est enfin finie.

En gros, bientot le seul moyen d'augementer les perfs pour une appli, utiliser les threads....puisqu'on pourra bientot plus acheter de plus gros proc...

Quelques docs pour ceux qui n'ont pas suivi :
- The Free Lunch Is Over de Herb Sutter (comité de normalisation du c++ : http://www.gotw.ca/publications/concurrency-ddj.htm )
- Managing Concurrency: Latent Futures, Parallel Lives ( http://www.gamearchitect.net/Articles/ManagingConcurrency1.h(...) )

Les optimisations de gcc 4 ne peseront pas lourds, face à des compilateurs qui savent gérer les multi-core (vc8, ic9, etc...), notemment par le support d'OPENMP ( http://www.openmp.org/drupal/ )

Vivement l'intégration d'OPENMP dans GCC plutot que de laisser ca en dans une branche inconnue ( http://gcc.gnu.org/projects/gomp/ ).

En tout cas, j'espere que les cours d'algo pour étudiant en ce moment mette plus l'accent qu'avant sur ce problème épineux... sinon "ca va pas etre facile".

Protection de la pile par défaut sur les prochaines releases des distros

Posté par herodiade () le 03/03/2006 à 17:30. (lien). Évalué à 10.

Maintenant que cette fonctionnalité de protection de la pile fait partie intégrante de GCC (ce qui était réclamée à corps et à cris depuis des années ) on peut penser que toutes les distributions vont faire profiter leurs utilisateurs de ce surcroît appréciable de sécurité.

Ça serait formidable !
À ce jour, je n'ai pas eu d'autres echos que de la position de Fedora Core, dont un développeur expliquait sur une mailing-list que les packages sont désormais compilés avec cette option activée (la FC 5 sera donc releasée avec cette protection). Et évidement DragonflyBSD et OpenBSD qui utilisent son équivalent pour gcc3 depuis une paye.

Qu'en est-il des autres distributions ? quelles sont celles qui ont annoncé leur position par rapport à cette option (qu'ils aient décidé de la supporter ou non) ?
Qu'en pensent Debian, Ubuntu, OpenSuse et Mandriva ?

Je suis particulièrement inquiet pour Debian, qui a longtemps tenu le haut du pavé en matière de sécurité, du fait de la très haute exigeance qualité de son équipe de developpeurs. Mais qui semble ne plus tenir le rythme, par exemple par rapport à Fedora (qui intègre maintenant par défaut SELinux , Exec-Shield, fstack-protector , FORTIFY_SOURCE...).
Un grand nombre de ces protections (option /Gs de vc++, ACL ntfs, ...) sont même désormais intégrées dans les dernières releases de windows, cependant que (selon un sondage mené par debian-administration.org) les developpeurs Debian considèrent la sécurisation comme relativement secondaire (et je ne parle pas des couacs comme l'absence de maj sécu de juillet dernier, le temps de réponse aux problèmes de firefox en aout etc. !).
Quel dommage s'il fallait se priver de la qualité et stabilité légendaires de Debian (sur ce plan, Debian ne fléchit pas !) pour avoir un environement sécurisé par défaut, lors de la prochaine release (et non, recompiler toute l'archive avec -fstack-protector, créer les polices SELinux pour les daemons courants et le système de base etc. n'est pas une solution triviale. Et oui, ces protections sont devenues nécéssaire, parceque les pirates ont, eux aussi, progréssé. D'où le besoin du secure "by default").

C++0x

Posté par Sebastien Binet () le 03/03/2006 à 23:50. (lien). Évalué à 4.

C'est un peu off-topic (enfin pas temps que ca puisque ca sera surement interessant pour les futures-futures-... versions de GCC), mais je suis tombe par hasard sur un enieme article[1,2] de BS expliquant les nouveautes de la prochaine norme pour le C++.

J'ai trouve que ce concept de "concept" etait vraiment tres interessant et devrait permettre de plus facilement resoudre certains problemes du C++ (notamment les collections d'objets polymorphiques qui devraient pouvoir etre vues comme des collections d'objets a n'importe quel endroit de l'arbre d'heritage)

Par contre je n'ai pas trouve de mention concernant XTI (eXtended Type Information) [3] qui aurait du/pu resoudre les problemes de persistence des donnees (entre autre!).

Quelqu'un a de plus amples informations concernant XTI ?

[1] la version light
http://www.artima.com/cppsource/cpp0x.html

[2] la version poussee
http://www.research.att.com/~bs/popl06.pdf

[3] http://lcgapp.cern.ch/project/architecture/XTI_accu.pdf

Voleur !

Posté par alenvers () le 04/03/2006 à 23:52. (lien). Évalué à 6.

>PS2 : Merci à alenvers pour ce post explicatif que j'ai repris sans
>aucune vergogne.

Me semblait bien que j'avais reconnu la plume habile et précise.

Ok, je ->[]

Revenir en haut de page