GNU Compiler Collection
GNU Compiler Collection, abrégé en GCC, est un ensemble de compilateurs créés par le projet GNU. GCC est un logiciel libre capable de compiler divers langages de programmation, dont C, C++, Objective-C, Java, Ada, Fortran et Go.
Développé par | Projet GNU |
---|---|
Première version | [1] |
Dernière version | 14.2 ()[2] |
Dépôt | gcc.gnu.org/git/gcc.git |
Écrit en | C++ et C |
Supporte les langages | C, C++, Objective-C, Fortran, Ada, Go et D |
Système d'exploitation | GNU/Linux et BSD |
Environnement | Multiplateforme |
Type |
Compilateur optimisant (en) Paquet GNU |
Licence | Licence publique générale GNU version 3 |
Site web | gcc.gnu.org |
GCC est utilisé pour le développement de la plupart des logiciels libres. Le noyau Linux dépend notamment étroitement des fonctionnalités de GCC.
Présentation
modifierGCC a été conçu pour remplacer le compilateur C fourni en standard sur le système d'exploitation Unix, qui s'appelle CC. GCC signifiait à l'origine GNU C Compiler, soit le « compilateur C de GNU ». Comme GCC est très extensible, la prise en charge de nombreux autres langages a été ajoutée et le nom officiel a été changé en GNU Compiler Collection.
En pratique, l'abréviation GCC est utilisée pour nommer trois entités légèrement différentes :
- la collection complète de compilateurs (le « projet GCC ») ;
- la partie commune à tous les compilateurs (« GCC ») ;
- le compilateur C lui-même (le frontend « gcc », écrit en minuscule).
Pour faire référence précisément aux compilateurs de chaque langage, on parle de :
- gcc pour C ;
- G++ pour C++ ;
- GobjC pour Objective-C ;
- GobjC++ pour Objective C++ ;
- GCJ pour Java ;
- GNAT pour Ada ;
- GFortran[3] pour Fortran ;
- gccgo pour Go ;
- gdc pour D[4].
Il existe de nombreux autres compilateurs basés sur GCC qui ne font pas partie de la distribution standard du projet GCC.
Extensibilité par des greffons
modifierDepuis la version 4.5 (et surtout 4.6), les compilateurs GCC sont extensibles par des greffons (« plugins »). Ceux-ci doivent être du logiciel libre et peuvent ajouter des passes d'optimisations, des pragmas, builtins ou attributs (mais ne peuvent pas étendre la syntaxe acceptée par GCC). Il existe quelques greffons pour GCC : Mozilla avait développé Tree Hydra[5] (abandonné). gcc python plugin[6] permet d'étendre GCC avec des scripts Python, notamment pour vérifier du code C pour Python. MELT[7] est un langage spécifique, inspiré de Lisp pour étendre GCC.
Débogage
modifierGCC dispose également d'un outil de débogage, GNU Debugger (gdb). Bien que ne faisant pas partie de GCC, Valgrind est cependant préféré pour des tests plus en profondeur, notamment pour rechercher les fuites de mémoire.
Portabilité
modifierGCC a été porté sur un nombre considérable de systèmes d'exploitation (pratiquement toutes les variantes d'Unix, VMS, Windows et MS-DOS via DJGPP) et de microprocesseurs (AMD64, ARM, AVR, DEC Alpha, M68k, MIPS, PowerPC, SPARC, x86, Hitachi H8).
Limitations
modifierGCC, pour le langage C, ne prend pas en charge les identificateurs Unicode.
Histoire
modifierRichard Stallman commence ses développements avec le langage de programmation Pastel, un « dialecte » non portable de Pascal. Une première version est ainsi utilisable dès [8]. Ce langage s'inspire en partie du compilateur Pastel, mais aussi du compilateur portable de l'université de l'Arizona[9].
Il écrit un nouveau compilateur C ANSI à partir du printemps 1986[9], puis, avec l'aide de Len Tower et sous l'égide de la Free Software Foundation, il distribue une première version bêta le [10], et la première version stable deux mois plus tard[11]. À la fin des années 1980, GCC supporte déjà près d'une douzaine d'architectures ; Michael Tiemann apparaît alors comme le plus actif avec six ports réalisés à lui seul[12]. Il est même crédité du support natif du langage C++ dès la fin 1987, faisant du compilateur GNU le premier à supporter ce langage. Michael Tiemann délaisse progressivement le projet au début des années 1990 par manque de temps dû à ses activités au sein de la société Cygnus Solutions.
En 1992, la version 2.0 apporte en plus des nombreuses optimisations, un support stable du langage C++. Le projet semble alors entrer dans une nouvelle ère communément appelée « les années Cygnus ». Cette période débute par un processus de transition de la version 1.42 vers la nouvelle mouture.
En 1997, un groupe de développeurs trouve le modèle de développement lent et peu propice aux améliorations, ils décident alors de faire un fork du projet et le nomment EGCS (pour « Experimental/Enhanced GNU Compiler System »)[13]. À la suite des nombreuses améliorations réalisées, EGCS et GCC sont réunis en avril 1999, la première version publiée est la 2.95.
GCC suit de près l'évolution de la normalisation des langages, et parfois même la précède ; ainsi certaines des fonctionnalités de la norme C99 étaient déjà présentes avant la publication officielle.
GCC est aujourd'hui le compilateur le plus utilisé dans la communauté des logiciels libres et est le compilateur de nombre de systèmes d'exploitation, comme GNU/Linux, NetBSD, OpenBSD, NeXTSTEP ou encore BeOS/Haiku. A noter que FreeBSD utilise exclusivement Clang/LLVM depuis la version 13.0 et macOS depuis la version 5.0 de Xcode pour des problèmes de licence.
Versions
modifierLes versions sont fixées par le GCC Steering Committee. Voici les dates de sortie des dernières versions principales[11] :
Version | Date de sortie |
---|---|
3.0 | |
3.1 | |
3.2 | |
3.3 | |
3.4 | |
3.4.6 | |
4.0 | [14] |
4.0.4 | |
4.1 | [15] |
4.1.2 | |
4.2 | [16] |
4.2.4 | |
4.3 | [17] |
4.3.5 | |
4.4 | [18] |
4.4.5 | |
4.5 | [19] |
4.5.1 | |
4.5.2 | |
4.6 | [20] |
4.7 | [21] |
4.8 | |
4.9 | |
5.1 | |
5.2 | |
5.3 | |
5.4 | |
6.2 | |
6.3 | |
7.1 | [22] |
7.2 | [23] |
7.3 | [24] |
8.1 | |
8.2 | |
8.3 | [25] |
9.1 | [25] |
9.2 | 12 août 2019[11] |
9.3 | 12 mars 2020[11] |
10.1 | 7 mai 2020[11] |
10.5 | [11] |
11.2 | |
11.4 | [11] |
13.1 | [11] |
13.2 | [11] |
14.1 | [26] |
Syntaxe
modifierLa syntaxe de base utilisée par les compilateurs de GCC est :
gcc fichierSource.c -o binaire
Pour utiliser des bibliothèques, la syntaxe est la suivante :
gcc fichierSource.c -o binaire -l''bibliothèque''
De nombreuses options (passées en paramètre) permettent d'agir sur la compilation. GCC est souvent utilisé dans les makefile par le programme make.
Des options particulièrement utiles sont -O1 ou -O2 pour demander au compilateur d'optimiser, -Wall pour lui demander presque tous les messages d'avertissements, -g pour la génération d'information de déboguage, -c pour la génération d'un fichier objet (sans édition de liens).
Compilateurs inclus
modifierGFortran
modifierÀ la demande de très nombreux utilisateurs scientifiques, à partir de sa version 4, GCC compile le Fortran[27],[28]. Depuis la version 5, via OpenACC[29], la compatibilité avec le langage Fortran a été améliorée et la version 6 a été considérablement améliorée[30]. En juillet 2020, GFortran implémentait presque intégralement la norme Fortran 2008[31] et environ 20 % de la norme Fortran 2018. Le développement du compilateur par des utilisateurs volontaires continue[32] et chaque nouvelle version de GCC intègre un meilleur support des dernières normes du langage et des corrections de bogues.
GFortran ne gère pas de façon native la programmation parallèle avec les co-tableaux (coarrays) mais nécessite l'installation de la bibliothèque OpenCoarrays[33].
Notes et références
modifier- « https://www.gnu.org/software/gcc/releases.html »
- Jakub Jelinek (d), « GCC 14.2 Released », (consulté le )
- (en) « gfortran — the GNU Fortran compiler, part of GCC », sur gcc.gnu.org, .
- (en) « GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) », sur gcc.gnu.org, .
- Tree Hydra.
- gcc python plugin.
- MELT.
- « Personal Note from Richard Stallman - Lisp Machine Manual », common-lisp.net, juin 1984.
- « Conférence de RMS au KTH (Suède) », gnu.org, 30 octobre 1986.
- (en) Richard Stallman, GNU C compiler beta test release, mod.compilers, (lire en ligne).
- (en) « GCC Releases », sur gnu.org, (consulté le )
- (en) « A Brief History of GCC », sur Wiki GCC, (consulté le )
- (en) D.V. Henkel-Wallace, A new project to merge the existing GCC forks, egcs, (lire en ligne).
- Patrick Guignot, « Les nouveautés de GCC 4.0 », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Les nouveautés de GCC 4.1 », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Sortie de GCC 4.2 », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Sortie de GCC 4.3 », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Sortie de la version 4.4 du compilateur GCC », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Sortie de GCC 4.5 », sur Linuxfr, (consulté le ).
- Patrick Guignot, « La version 4.6 du compilateur GCC est disponible », sur Linuxfr, (consulté le ).
- Patrick Guignot, « Sortie de la version 4.7 du compilateur GCC », sur Linuxfr, (consulté le ).
- (en) « GCC 7 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) », sur gcc.gnu.org (consulté le )
- (en) « GCC 7 Release Series - GNU Project - Free Software Foundation (FSF) », sur gcc.gnu.org (consulté le )
- (en) « GCC 7 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) », sur gcc.gnu.org (consulté le )
- Frederic Mazue, « Sortie de GCC 9.1 avec support de C++17 et du langage D », sur programmez.com (consulté le )
- (en) « GCC 14 Release Series », sur gcc.gnu.org,
- (en) GCC 4 Release Series Changes, New Features, and Fixes
- (en) Welcome to the home of GNU Fortran
- (en) GCC 5 Release Series Changes, New Features, and Fixes
- (en) GCC 6 Release Series Changes, New Features, and Fixes
- (en) Compiler Support for the Fortran 2008 Standard.
- (en) « Letter from GCC/gfortran contributor with a brief history », sur Fortran Discourse, (consulté le )
- (en) « OpenCoarrays », sur OpenCoarrays (consulté le )
Voir aussi
modifierArticles connexes
modifierLiens externes
modifier- (en) Site officiel
- (en) GCC sur le répertoire du logiciel libre