GNU Compiler Collection

La GNU Compiler Collection (gcc) és un conjunt de compiladors de llenguatges de programació creat pel Projecte GNU. Així doncs, és programari lliure distribuït per la Free Software Foundation (FSF) sota la llicència GNU General Public License (GPL), i és un dels components clau de les eines de GNU. Aquest conjunt de compiladors és l'estàndard per a sistemes operatius Unix-like (com Linux), i de certs sistemes operatius propietaris derivats dels primers com podria ser el Mac OS X.

Infotaula de programariGNU Compiler Collection
GNU Compiler Collection logo.svg
Gcc-4.1.1.png
Desenvolupador(s)Projecte GNU modifica
Versió inicial23 maig 1987 modifica
Versió estable9.3 (12 març 2020)
10.1 (7 maig 2020)
8.4 (4 març 2020) modifica
Escrit enC++ modifica
Sistema operatiuLinux, Hurd i Microsoft Windows modifica
Plataformamultiplataforma modifica
Biblioteca
d'interfície d'usuari
línia d'ordres modifica
Tipuscompilador modifica
LlicènciaGNU GPL 3.0 modifica
Part deGNU toolchain (en) Tradueix modifica
Més informació
Lloc webWeb oficial modifica
Stack ExchangeEtiqueta modifica
Seguiment d'errorsSeguiment d'errors modifica
Free Software DirectoryGcc modifica
Id. Framalibregnu-compiler-collection modifica

El desenvolupament de GNU ha permès que es pugui utilitzar un ordinador sense programari respectant la llibertat dels usuaris.

Objectiu/MotivacióModifica

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 el llenguatge 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 de Linux.

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, incloent GNU/Linux, la BSDs, OS X, NeXTSTEP i BeOS.

Un dels principals avantatges del compilador GCC és l'ús del mateix analitzador 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.

HistòriaModifica

La necessitat d'un compilador gratuït pels sistemes operatius basats en Unix va impulsar Richard Stallman, l'any 1985 i mitjançant el Projecte GNU, a escriure des de zero el compilador GCC, amb el nom GNU C Compiler. Es va publicar la primera versió el març de 1987 i inicialment només suportava C.

El 1992 es va publicar la versió 2.0, que admetia el llenguatge C++.

El 1997, a la versió 3.0, es va crear EGCS, una branca experimental del compilador optimitzada per a C++.

GCC s'ha ampliat per admetre altres llenguatges de programació com Fortran, ADA, Java i Objective-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]

Estructura / DissenyModifica

La interfície exterior de GCC és estàndard per a un sistema UNIX. Els usuaris utilitzen un controlador anomenat gcc 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]

Front endModifica

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]

Back endModifica

El back end de GCC està parcialment definit pel preprocesador de macros específiques de cada arquitectura, que s'utilitzen per generar RTL (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.

FuncionamentModifica

Per aconseguir l’objectiu de convertir un programa escrit per un humà a un arxiu executable 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 CModifica

Programa cercle.c, que calcula l’àrea d'un cercle a partir del seu radi:

#include <stdio.h>
#define PI 3.1416
int 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;
}

PreprocesatModifica

En aquesta etapa s’interpreten les directives al preprocessador. És l’etapa on les variables inicialitzades com a constants es substitueixen per el seu valor en totes les crides del codi.

Un exemple seria la definició de la constant PI 3.1416. Cada cop que el compilador trobi la constant, hi posarà el valor respectiu. Per implementar aquesta primera etapa utilitzarem la següent comanda:

               $ gcc -E cercle.c > cercle.pp

CompilacióModifica

Aquest segon pas transforma el codi C en el llenguatge ensamblador propi del processador de la nostra màquina. Per implementar l’etapa de compilació utilitzarem

               $ gcc -S cercle.c

EnsamblatModifica

La penúltima etapa del procés transforma el programa escrit anteriorment en llenguatge assemblador, a codi objecte, un arxiu binari en el llenguatge maquina que ja pot ser executat per el processador.

               $ as -o cercle.o cercle.s

EnllaçatModifica

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

Llenguatges de programacióModifica

Fins a la versió 4.0, el compilador estàndard inclou el següent:

També és compatible amb les extensions de C OpenMP i OpenACC.

El front end per G77 es va reemplaçar pel del nou GFortran que suporta Fortran 95. També existeixen front end per Pascal, Modula-2, Modula-3, Mercury, VHDL, PL/I i Objective-C++.

El GNU Compiler Collection admet altres llenguatges de programació que encara no estan integrats a la distribució principal del compilador, alguns s'integraran al futur.

ArquitecturesModifica

A la versió 4.2.3 es suporta:

També es suporten altres arquitectures menys conegudes com A29K, Atmel AVR, C4x, D30V, DSP16xx, FR-30, FR-V, Intel i960, IP2000, MN10200, NS32K i ROMP.

DesenvolupamentModifica

L'última versió estable publicada és la 9.3, el 22 de març de 2020.[8][9]

ReferènciesModifica

  1. «¿Qué es un programa compilador - Base de Conocimientos - ICTEA». [Consulta: 7 abril 2020].
  2. «GCC Development Mission Statement (1999-04-22) - GNU Project - Free Software Foundation (FSF)». [Consulta: 7 abril 2020].
  3. Gough, Brian. An Introduction to GCC for the GNU Compilers gcc and g++ (en anglès). Anglaterra: Network Theory Limited, 7/03/2004. ISBN 0-9541617-9-3. 
  4. «El compilador GCC - Tutorial». [Consulta: 7 abril 2020].
  5. «GCC Front Ends - GNU Project - Free Software Foundation (FSF)». [Consulta: 7 abril 2020].
  6. «El compilador GCC - Tutorial». [Consulta: 7 abril 2020].
  7. «GCC - EcuRed». [Consulta: 7 abril 2020].
  8. «GCC 9 Release Series - GNU Project - Free Software Foundation (FSF)». [Consulta: 29 març 2020].
  9. «GCC 9.3 Compiler Released With Over 150 Bug Fixes - Phoronix». [Consulta: 29 març 2020].

BibliografiaModifica

Enllaços externsModifica

A Wikimedia Commons hi ha contingut multimèdia relatiu a: GNU Compiler Collection