Depuis le 20 novembre, le développement de GCC 8 a franchi une nouvelle étape : les fonctionnalités ont été gelées et seules les corrections de bogues et mises à jour de la documentation seront acceptées. La première version stable de GCC 8, numérotée 8.1, sera quant à elle disponible début 2018.
Pour le moment, la documentation officielle des changements et nouveautés dans GCC 8 est assez incomplète, mais elle sera mise à jour par les développeurs GCC (GNU Compiler Collection) au fur et à mesure qu’on se rapproche de la sortie de la nouvelle version. Toutefois, Phoronix, le site spécialisé dans les actualités GNU/Linux a pu suivre de bout en bout le développement de GCC8 pour nous proposer les principaux changements et nouveautés qui incluent :
- amélioration du support de znver1 d'AMD : des patchs ont été apportés au compilateur GNU pour les processeurs Ryzen / Threadripper / EPYC ; ce qui permet d'obtenir de meilleures performances sur ces processeurs ;
- support de Cannonlake, le processeur Intel de nouvelle génération succédant à Coffee Lake / Kaby Lake Refresh ;
- support initial pour Intel Icelake, la génération de processeurs qui va succéder à Cannonlake. Cela inclut les instructions GFNI (Galois Field Affine Transformation) et plus encore ;
- support d'Intel CET (Control-flow Enforcement Technology) pour une meilleure sécurité. La technologie Control-flow Enforcement vise en effet à empêcher les attaques de type return-oriented programming (ROP) et call-jump-oriented programming (COP/JOP). La ROP, par exemple, est une technique d'exploitation avancée de type dépassement de pile permettant l'exécution de code par un attaquant, et ce en s'affranchissant plus ou moins efficacement des mécanismes de protection tels que l'utilisation de zones mémoires non exécutables, l'utilisation d'un espace d'adressage aléatoire ou encore la signature de code ;
- support du CPU Qualcomm Saphira. Saphira est le successeur de Falkor, une microarchitecture ARM conçue par Qualcomm pour le marché des serveurs ;
- support du langage C17. À ne pas confondre avec C++ 17 qui apporte de nombreux ajouts et améliorations notables, C17 sera bientôt disponible sous forme de mise à jour du langage de programmation C. La mise à jour du langage de programmation C17 est juste une « version de correction de bogue » à la norme C11. Si C17 va bientôt être soumis pour approbation et pourrait finir par être connu sous le nom de C18, GCC se prépare pour son arrivée. Fin octobre, il a par exemple été publié un patch initial introduisant C17/GNU17 et faisant de C17/GNU17 le nouveau standard par défaut pour le front-end du compilateur C ;
- préparation pour C++ 20 / C++2A. Avec les discussions des fonctionnalités de C++ 20, les développeurs GCC ont également commencé à se préparer à travailler sur les nouvelles fonctionnalités du compilateur pour le prochain standard qui devrait sortir dans quelques années. GCC ayant déjà un support C++ 1z / C++ 17 complet, C++ 20 deviendra rapidement une cible pour les développeurs qui travaillent sur ce compilateur open source. En préparation au travail qui sera effectué, le développeur Andrew Sutton a envoyé en juillet un patch ajoutant un support pour spécifier la nouvelle norme C++ via -std=c++2a pour le travail C++ 20 provisoire et -std=gnu++2a pour C++20 plus les extensions GNU ;
- support ARMv8-R. Ce sous-ensemble de l'architecture ARMv8 est destiné aux applications temps réel et aux environnements dont la sécurité est critique, tels que le contrôle automobile et industriel et l'aviation ;
- amélioration supplémentaire du support ARM pour les nouveaux processeurs Cortex ;
- amélioration du support de la spécification OpenACC 2.5 ;
- mise à jour du front-end du langage Go. Il s'agit de l'une des premières plus grosses fusions pour GCC 8. Celle-ci met à jour le code de GCC avec celui du runtime Go 1.8 et d'autres mises à jour de Go 1.8 ;
- poursuite des améliorations pour le support AMD HSA IL / BRIG ;
- Cilk Plus est en cours de suppression. Intel déconseille le support multithreading de Cilk Plus avec GCC 7 et maintenant pour GCC 8, l'entreprise cherche à abandonner complètement ce support ;
- améliorations significatives du back-end du compilateur Nios II.
Il faut rappeler que le projet GNU a annoncé il y a quelques mois le support du langage D dans GCC. Une dizaine de patchs de près de 800 000 lignes de nouveau code a aussi été publiée pour l'ajout d'un front-end D à la collection de compilateurs GNU. Ce nouveau front-end implémente le langage D 2.0 et prend en charge le runtime D 2.0 et les bibliothèques partagées. Outre les différents changements et nouveautés annoncés ici, on pourrait donc également s’attendre au support du langage D dans GCC 8.1.
Sources : Phoronix, GCC 8 Release Series
Et vous ?
Que pensez-vous de ces nouveautés ?