LaGNU Compiler Collection (gcc) és un conjunt decompiladors dellenguatges de programació creat pelProjecte GNU. Així doncs, ésprogramari lliure distribuït per laFree Software Foundation (FSF) sota la llicènciaGNU General Public License (GPL), i és un dels components clau de les eines de GNU. Aquest conjunt de compiladors és l'estàndard per asistemes operatiusUnix-like (comLinux), i de certs sistemes operatius propietaris derivats dels primers com podria ser elMac OS X.
El desenvolupament de GNU ha permès que es pugui utilitzar un ordinador senseprogramari respectant la llibertat dels usuaris.
L'objectiu principal d'un compilador és, a partir de codi font en qualsevol dels seus llenguatges de programació compatibles, generar un programa executable binari en elllenguatge màquina on s'haurà d'executar.[1]
El desenvolupament del GCC forma part del projecte GNU, i té l'objectiu de millorar el compilador que s'utilitza en el sistema GNU, inclosa la variant deLinux.
Aquest desenvolupament utilitza un entorn de desenvolupament obert i suporta moltes plataformes diferents amb la intenció de fomentar l'ús d'un compilador de categoria mundial. D'aquesta manera, s'assegura que el propi compilador i els sistemes desenvolupats de GNU funcionin amb les diferents arquitectures i entorns a més de estendre i millorar-ne les característiques.[2]
Ha estat adoptat com el compilador principal per construir i desenvolupar un gran nombre de sistemes, incloentGNU/Linux, laBSDs,OS X,NeXTSTEP iBeOS.
Un dels principals avantatges del compilador GCC és l'ús del mateixanalitzador per a totes les plataformes, de manera que si el codi del programa compila correctament en una, hi ha moltes possibilitats que ho faci en totes. Encara que aquest fet pugui produir que s'executi una mica més lentament justifica el seu ús un cost de desenvolupament més baix.
La necessitat d'un compilador gratuït pels sistemes operatius basats enUnix va impulsarRichard Stallman, l'any1985 i mitjançant el Projecte GNU, a escriure des de zero el compilador GCC, amb el nomGNU C Compiler. Es va publicar la primera versió el març de1987 i inicialment només suportava C.
El 1992 es va publicar la versió 2.0, que admetia el llenguatgeC++.
El 1997, a la versió 3.0, es va crearEGCS, una branca experimental del compilador optimitzada per a C++.
GCC s'ha ampliat per admetre altres llenguatges de programació comFortran,ADA,Java iObjective-C. Actualment, el desenvolupament de GCC està guiat pel Comitè directiu de GCC, un grup amb representació de les diferents comunitats d'usuaris a la indústria, a la investigació i al món acadèmic.[3]
La interfície exterior de GCC és estàndard per a un sistema UNIX. Els usuaris utilitzen un controlador anomenatgcc que interpreta, decideix quin compilador fa servir i executa un assemblador amb el codi resultant.
Tots els compiladors tenen una estructura interna comú: un front end i un back end.[4]
Els front end varien internament, havent de produir arbres que puguin ser manejats pel back end.
Fins fa poc els arbres no eren totalment independents del processador pel que es volia generar el codi.
Recentment s'han inclòs dos nous formats d'arbre independents de llenguatge: generic i gimple.[5]
El back end de GCC està parcialment definit pel preprocesador de macros específiques de cada arquitectura, que s'utilitzen per generarRTL (operació utilitada per transmetre informació). La execució del back end té lloc quan el programa ocupa el temps del processador per executar les comandes definides en el codi font.
A través de la implementació del compilador s'acostuma a generar un codi màquina molt similar al llenguatge propi. Això permet que la execució del back end tingui el menor número d'instruccions per obtenir el resultat marcat en el codi font.
Per aconseguir l'objectiu de convertir unprograma escrit per un humà a un arxiuexecutable per al ordinador, el procés de compilació involucra quatre etapes consecutives: Preprocesat, Compilació, Ensamblat, Enllaçat. Aquestes 4 etapes s'implementen amb comandes i tan es poden executar per separat o utilitzant una única ordre que les executi totes simultàniament.[6][7]
Un exemple de programa creat per un humà seria així:
Exemple de programa simple en llenguatge C
[modifica]Programacercle.c, que calcula l'àrea d'un cercle a partir del seu radi:
#include <stdio.h>#define PI 3.1416int main(){ float area, radi; radi = 5; area = PI * (radi * radi); printf("Cercle.\n"); printf(" Area del cercle de radi %f: %f\n\n", radi, area); return 0;}
En aquesta etapa s'interpreten les directives al preprocessador. És l'etapa on lesvariables inicialitzades com a constants es substitueixen pel seu valor en totes les crides delcodi.
Un exemple seria la definició de la constantPI 3.1416. Cada cop que elcompilador trobi la constant, hi posarà el valor respectiu. Per implementar aquesta primera etapa utilitzarem la següent comanda:
$ gcc -E cercle.c > cercle.pp
Aquest segon pas transforma elcodi C en elllenguatge ensamblador propi delprocessador de la nostra màquina. Per implementar l'etapa de compilació utilitzarem
$ gcc -S cercle.c
La penúltima etapa del procés transforma el programa escrit anteriorment en llenguatge assemblador, acodi objecte, un arxiubinari en elllenguatge maquina que ja pot ser executat pel processador.
$ as -o cercle.o cercle.s
Quarta i última etapa del procés. En aquesta, s'afegeix el codi binari de funcions ja compilades i ensamblades en les respectives llibreries del sistema (com per exemple un printf()) dins de l'executable del nostre programa. En això consisteix l'etapa d'enllaç, en unir un o més mòduls del codi objecte generat amb el que ja existeix de les biblioteques. Aquesta és la comanda per a l'enllaçat:
$ gcc -o cercle cercle.o
Sovint s'utilitza la compacta i més ràpida en la que s'executen totes les etapes alhora per compilar el nostre codi:
$ gcc -o cercle cercle.c
Fins a la versió 4.0, el compilador estàndard inclou el següent:
També és compatible amb les extensions de COpenMP iOpenACC.
Elfront end per G77 es va reemplaçar pel del nou GFortran que suporta Fortran 95. També existeixenfront end perPascal,Modula-2,Modula-3,Mercury,VHDL,PL/I iObjective-C++.
ElGNU Compiler Collection admet altres llenguatges de programació que encara no estan integrats a la distribució principal del compilador, alguns s'integraran al futur.
A la versió 4.2.3 es suporta:
També es suporten altres arquitectures menys conegudes comA29K,Atmel AVR,C4x,D30V,DSP16xx,FR-30,FR-V,Intel i960,IP2000,MN10200,NS32K iROMP.
L'última versió estable publicada és la 9.3, el 22 de març de 2020.[8][9]
|
---|
Història | | |
---|
Llicències GNU | |
---|
Programari | |
---|
Persones | |
---|