Developpez.com

Le Club des Développeurs et IT Pro

GCC 4.8 sort et marque la fin de la migration de son code de C vers C++

La suite de compilateurs gagne en performances

Le 2013-03-26 10:38:01, par Hinault Romaric, Responsable .NET
Une nouvelle version de la suite de compilateurs open source multiplateforme GCC (GNU Compiler Collection) est disponible.

La version 4.8 du compilateur marque une étape importante pour ses développeurs, car ceux-ci ont finalisé la migration de son code source de C vers C++.

Pour rappel, en juillet 2012 les développeurs de GCC avaient annoncé leur volonté de totalement réécrire le compilateur en C++, avec pour objectif de maintenir le code de GCC compréhensible et facilement maintenable.


La nouvelle version C++ de GCC apporte des améliorations de performance, une optimisation du code, le nouveau détecteur d’erreurs mémoires AddressSanitizer et les nouveaux outils ThreadSanitizer.

Le code source de GCC 4.8 peut être téléchargé à partir de plusieurs miroirs et du serveur SVN du projet sous les termes de la licence GPLv3. Les développeurs qui souhaitent construire leur propre version de l’outil devront désormais utiliser un compilateur C++ compatible C++ 2003.

Il faut noter que la suite de compilateurs GCC permet de transformer le code source en langage machine pour plusieurs langages de programmation dont C, C++, Java, Objective-C, Ada et même Fortran 95.

Télécharger GCC 4.8

Source : site du projet

Et vous ?

Que pensez-vous de cette première version C++ de GCC ?

L'adoption de C++ au détriment de C est-elle meilleure pour le compilateur ?
  Discussion forum
9 commentaires
  • germinolegrand
    Membre expert
    J'attends le MinGW associé pour pouvoir le tester
  • Emmanuel Deloget
    Expert confirmé
    Envoyé par Shaidak
    Le seul bémol serait le non support des threads du C++11 pour windows sans passer par posix mais bon, on ne peut pas tout avoir.
    pthread sur Windows, ce n'est qu'une API qui en encapsule une autre. Les différences de performance se font donc sur la création des threads, et pas sur l'exécutions de celle-ci (et encore, la perte de performance est vraiment minime). Sur de nombreux points, l'API posix ne fait qu'un mapping one-to-one avec l'API Windows (thread, mutex, sémaphores,...). Par contre, posix offre des possibilités que ne sont pas disponibles via l'API sans passer par des circonvolutions un peu extrêmes (lire : c'est tout à fait possible, mais c'est compliqué à mettre en oeuvre) : local thread storage (LTS ; à ne pas confondre avec le thread_local de C++11), once, spin lock, condition variables, read/write lock, contrôle du scheduler...

    Pour ceux qui sont intéressés, les sources de pthread pour Windows sont visible ici : http://sourceware.org/cgi-bin/cvsweb...pthreads-win32

    Ceci étant dit, au niveau C++11, le fait est que l'implémentation proposée par Visual C++ nécessite au final la réécriture d'une partie de pthread, car la sémantique des threads proposée par le standard est celle des threads posix et non pas celle des threads natives Windows.

    De son coté, g++ fait sensiblement la même chose : l'API thread est encapsulée dans une API interne appelée gthread, qui passe par pthread quand cette librairie est disponible, ou par les threads natives sur les systèmes sans pthread. Du coup, l'implémentation Visual C++ et celle de g++ on sensiblement les même performances.

    Au niveau des sources (pour vous faire une idée), ça se passe dans la libgcc :



    Donc : n'ayez pas peur des threads g++ sous Windows
  • iNaKoll
    Membre régulier
  • Shaidak
    Membre actif
    Bonne nouvelle pour ma part puisque j'attends cette version depuis un moment. J'ai déjà recompilé plusieurs bibliothèques et projets pour tester et jusqu'à présent tout se passe en douceur.
    Le seul bémol serait le non support des threads du C++11 pour windows sans passer par posix mais bon, on ne peut pas tout avoir .
    Pour ce qui est de l'adoption du C++ pour le compilateur je présume que s'ils l'ont fait ça ne doit pas être une si mauvaise idée .
  • gbdivers
    Inactif
    Envoyé par Shaidak
    Le seul bémol serait le non support des threads du C++11 pour windows sans passer par posix mais bon, on ne peut pas tout avoir
    POSIX sur Windows ? Je croyais que c'était dispo qu'avec des libs supplémentaire comme cygwin, ce que gcc n'utilise pas (je crois).
    Si j'ai bien compris, gcc n'a pas réimplémenté les threads, mais utilise un binding vers des libs (POSIX sur linux, l'API système sur Windows)

    (HS : d'ailleurs, en parlant de threads C++11, Emmanuel Deloget a commencé une série d'articles sur le sujet, je conseille la lecture : http://blog.emmanueldeloget.com/inde...ag/concurrence)
  • Shaidak
    Membre actif
    Envoyé par gbdivers
    POSIX sur Windows ? Je croyais que c'était dispo qu'avec des libs supplémentaire comme cygwin, ce que gcc n'utilise pas (je crois).
    Si j'ai bien compris, gcc n'a pas réimplémenté les threads, mais utilise un binding vers des libs (POSIX sur linux, l'API système sur Windows)
    C'est exact, je ne parlais déjà plus de gcc à ce niveau mais des builds de mingw mentionnés dans le post précédent. Navré de ne pas avoir été suffisamment clair .
  • gbdivers
    Inactif
    J'ai l'habitude d'utiliser gcc compilé pour windows : http://www.equation.com/servlet/equa...cmd?fa=fortran mais je sais pas très bien les différences avec mingw
  • Shaidak
    Membre actif
    Envoyé par Emmanuel Deloget
    pthread sur Windows, ce n'est qu'une API qui en encapsule une autre.
    ...
    Donc : n'ayez pas peur des threads g++ sous Windows
    Je ne faisais que constater qu'il s'agissait d'un binding, loin de moi l'idée d'en avoir peur sinon je n'aurais pas téléchargé la version posix de mingw64 .
    En ce qui concerne les performances je te fais confiance vu que tu as l'air d'avoir plus d'expérience à ce niveau et que cela va dans le sens de mes lectures (mon utilisation de la bibliothèque Pthreads sous windows date d'il y a un moment et ça n'était pas vraiment poussé). Ceci étant, cette version sera peut-être pour moi l'occasion de tester cet apsect et de pouvoir éliminer des dépendances à boost ou autres.
  • minnesota
    Membre émérite
    Envoyé par gbdivers
    J'ai l'habitude d'utiliser gcc compilé pour windows : http://www.equation.com/servlet/equa...cmd?fa=fortran mais je sais pas très bien les différences avec mingw
    En ce qui concerne gcc/mingw, j'utilise habituellement les versions de tdm-gcc, (je suis actuellement en 4.6.1), j'ai un instant était tenté par MinGW Distro de nuwen.net, et là je zyeute sur mingw- w64(32), mais y'a de fortes chances que je finisse par compiler mes propres versions... en tout il me faut passer de C++0x à C++11, et la 4.8 arrive à point nommé.