Developpez.com - Rubrique C++

Le Club des Développeurs et IT Pro

GCC 5.1 est disponible

Avec le support complet des standards C++11 et C++14 et ajoute de nombreuses optimisations

Le 2015-04-23 15:32:12, par LittleWhite, Responsable 2D/3D/Jeux
La collection d'outils de compilation GCC est disponible en version 5.1. Avec cette version, nous quittons donc la branche 4.X (dont la dernière version majeure était la 4.9), marquant ainsi des changements importants dans le compilateur.
En effet, on peut citer les grandes lignes suivantes :
  • support complet du C++11 et C++14 (notamment grâce au passage à la Dual ABI) ;
  • la compilation C adopte l'utilisation du C11 et des extensions GNU, par défaut ;
  • nombreuses optimisations (optimisations interprocédurales, nouvelle passe pour les codes identiques, améliorations à l'édition des liens, ...) ;
  • support partiel de OpenACC et support complet de OpenMP ;
  • le nommage des versions a changé.


Dual ABI

La bibliothèque standard C++ apporte une nouvelle ABI, incluant les implémentations de std::string et std::list. Cela a été nécessaire pour intégrer pleinement le standard C++11. Pour des raisons de compatibilité, le nommage de la bibliothèque n'a pas été modifié et les deux implémentations (ancienne et nouvelle) sont supportées en parallèle. Cela est possible grâce à un nouveau namespace std::__cxx11::. La macro _GLIBCXX_USE_CXX11_ABI détermine quelle ABI utiliser. Pour utiliser l'ancienne, il suffit de définir la macro à 0, avant l'inclusion des en-têtes. Il est possible que certaines distributions définissent cette macro à 0, par défaut et il faudra donc mettre à 1 pour utiliser la nouvelle ABI.

À cause des différences d'ABI, il est possible d'avoir des erreurs à l'édition de liens, notamment si vous utilisez une bibliothèque tierce ayant recours à une autre ABI que celle de votre programme. Les solutions sont :
  • recompiler la bibliothèque tierce avec GCC 5.1 ;
  • recompiler votre programme en désactivant la nouvelle ABI.


Activation du C11 par défaut

Le C11 change, entre autres, le comportement du mot clé inline. Comme les répercussions sont visibles et impactent le développeur, l'équipe de GCC a écrit un guide de migration vers GCC 5. Si vous ne voulez pas de C11, vous pouvez toujours utiliser gnu89 avec l'option de compilation -std=gnu89.
De plus, pour faciliter la migration, GCC propose deux options d'avertisseurs : -Wc90-c99-compat et -Wc99-c11-compat.

Nommage des versions

Le nommage des versions change. La prochaine version majeure sera 6.1 et est prévue pour la fin de l'année. La prochaine version mineure sera appelée 5.2 et est prévue pour juin/juillet. On remarque ainsi que GCC perd un indicateur dans les versions (passage d'une numérotation X.Y contre X.Y.Z).

Compilateur JIT

GCC peut être compilé comme une bibliothèque partagée et peut donc être intégré dans une application pour servir de compilateur JIT. Cela est possible pour le C et le C++, mais aussi pour le D et le Python. La bibliothèque appelée libgccjit est sous licence GPLv3. Pour le moment, la bibliothèque n'est qu'au stade expérimental.

Pour connaître la totalité des changements, je vous invite à consulter cette page officielle.

Vous pouvez dès à présent télécharger GCC 5.1 sur le site officiel ou attendre son intégration dans les paquets de votre distribution préférée.

Source

Site officiel de GCC

Votre opinion

Allez-vous passer directement à GCC 5 ? Quels sont les avantages que vous pouvez en tirer ?

Utilisez-vous toujours GCC ou êtes-vous passé à LLVM ? Pourquoi ?
  Discussion forum
8 commentaires
  • LittleWhite
    Responsable 2D/3D/Jeux
    L'intérêt est assez dur à voir, je l'avoue. Il faudrait fouiller les mailing list pour retrouver les raisons.
    On peut voir que c'est la mode, notamment Firefox et bien d'autres (le kernel Linux).
    Après, c'est possiblement simplement juste pratique : "Eh, tu as bien GCC 5 ?" au lieu de dire : "Tu as bien GCC 4.8 ou 4.9 je sais plus trop ".
  • Nairolf21
    Membre du Club
    Petite question, quel peut-être l'intérêt de passer d'un nommage de version du type X.Y.Z à X.Y ?

    Je pensais que le nommage avec 3 paramètres donnaient davantage d'information.
  • CodeurPlusPlus
    En attente de confirmation mail
    Est-ce que GG 5.1 sera capable de compiler SDL 1.2 sous Cygwin ?

    (oui, je suis complètement con, je sais)
  • chouetz
    Futur Membre du Club
    dans ma boite (cense etre une grande boite d'IT) la version officielle c'est gcc version 4.2.1, voire 3.4.5, donc on n'est pas pret de passer a 5.1....

    Je me demande si c'est pareil partout...
  • quicky2000
    Membre actif
    Envoyé par chouetz
    dans ma boite (cense etre une grande boite d'IT) la version officielle c'est gcc version 4.2.1, voire 3.4.5, donc on n'est pas pret de passer a 5.1....

    Je me demande si c'est pareil partout...
    Dans le domaine de la micro-electronique chez les CAD Vendor les deux versions officielles actuelles sont a peu gcc 4.1.2 et gcc 4.4 alors qu en interne de mon equipe on test en 4.9.0 pour les softs non dependant des librairies des CAD vendors
  • dclink
    Membre habitué
    Envoyé par chouetz
    dans ma boite (cense etre une grande boite d'IT) la version officielle c'est gcc version 4.2.1, voire 3.4.5, donc on n'est pas pret de passer a 5.1....

    Je me demande si c'est pareil partout...
    Cela peut être une question de license (i.e GPL2 => GPL3 après gcc 4.2 si je me souviens bien), bon après je peux me tromper ...
  • born to code
    Nouveau membre du Club
    Qu'est-ce qui le differe de clang, pour que visual c++ soit tres utilisE?