GNU Compiler Collection


GNU Compiler Collection
GNU Compiler Collection
Gccegg.svg
Gcc-4.2.0.png
GCC invocado desde la línea de comandos en Debian
Desarrollador
Proyecto GNU
gcc.gnu.org
Información general
Lanzamiento 23 de mayo de 1987[1]
Última versión estable 4.6.1
27 de junio de 2011; hace 4 meses (2011-06-27)
Género Compilador
Programado en C, C++
Sistema operativo Multiplataforma
Licencia GPLv3
En español ?

GNU Compiler Collection (colección de compiladores GNU) es un conjunto de compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye la FSF bajo la licencia GPL.

Estos compiladores se consideran estándar para los sistemas operativos derivados de UNIX, de código abierto o también de propietarios, como Mac OS X. GCC requiere el conjunto de aplicaciones conocido como binutils para realizar tareas como identificar archivos objeto u obtener su tamaño para copiarlos, traducirlos o crear listas, enlazarlos, o quitarles símbolos innecesarios.

Originalmente GCC significaba GNU C Compiler (compilador GNU para C), porque sólo compilaba el lenguaje C. Posteriormente se extendió para compilar C++, Fortran, Ada y otros.

Contenido

Objetivo

GCC es parte del proyecto GNU, el cual tiene como objetivo mejorar el compilador usado en los sistemas GNU incluyendo la variante GNU/Linux. El desarrollo de GCC usa un entorno de desarrollo abierto y soporta muchas otras plataformas con el fin de fomentar el uso de un compilador-optimizador de clase global, para atraer muchos equipos de desarrollo, para asegurar que GCC y los sistemas GNU funcionen en diferentes arquitecturas y diferentes entornos, y más aún, para extender y mejorar las características de GCC.

Historia

Richard Stallman comenzó a escribir GCC en 1985. Él extendió un compilador existente para compilar C. El compilador originalmente compilaba Pastel, un dialecto extendido, no portable de Pascal, y estaba escrito en Pastel. Fue reescrito en C por Len Tower y Stallman,[2] y publicado en 1987[3] como el compilador del Proyecto GNU, para tener un compilador disponible que fuera software libre. Su desarrollo fue supervisado por la Free Software Foundation (FSF).[4]

En 1991, GCC 1.x había logrado un punto de estabilidad, pero limitaciones en la arquitectura prevenían muchas mejoras deseadas, así la FSF empezó a trabajar en GCC 2.x.

Como GCC era software libre, había programadores que querían trabajar en otras direcciones, por ejemplo, escribiendo interfaces para otros lenguajes distintos de C, éstos fueron libres de desarrollar sus propios forks del compilador. Múltiples bifurcaciones trajeron ineficiencia e inmanejabilidad, sin embargo, la dificultad de tener trabajo aceptado por el proyecto oficial de GCC era altamente frustrante para muchos. La FSF guardó un férreo control en qué era añadido a la versión oficial de GCC 2.x, esto hizo que GCC fuera usado como un ejemplo del modelo de desarrollo "catedral" en el ensayo de Eric S. Raymond titulado La catedral y el bazar.

Con la publicación de 4.4BSD en 1994, GCC llegó a ser el compilador por defecto de los sistemas BSD.

Lenguajes

En su versión 4.6 incluye front ends para C (gcc), C++ (g++), Java (gcj), Ada (GNAT), Objective-C (gobjc), Objective-C++ (gobjc++) y Fortran (gfortran).[5] También esta disponible, aunque no de forma estandar, soporte para Go (gccgo), Modula-2, Modula-3, Pascal (gpc), PL/I, D (gdc), Mercury, y VHDL (ghdl).[6]

Arquitecturas

En la versión 4.2.3 se incluye soporte para: ARC, ARM, Blackfin, CRIS, CRX, Darwin, DEC Alpha, DEC Alpha/VMS, FRV, GNU/Linux, H8/300, H8/500, HPPA, IA-64 "Itanium", M32C, M32R/D, MIPS, MMIX, MN10300, Morpho MT, Motorola M680x0, Motorola M68hc1x, Motorola 88000, PA-RISC, PDP-11, PowerPC, RS/6000, Score, SPARC, SuperH, System/370, System 390, System V, TMS320C3x/C4x, V850, VAX, x86, x86-64, Xstormy16, Xtensa, zSeries

También hay soporte para arquitecturas menos conocidas: A29K, Atmel AVR, C4x, D30V, DSP16xx, FR-30, FR-V, Intel i960, IP2000, MN10200, NS32K y ROMP.

Se ha dado soporte para procesadores adicionales, como D10V, PDP-10, y Z8000 en versiones mantenidas separadas de la versión de la FSF.

Estructura

La interfaz exterior de GCC es generalmente estándar para un sistema UNIX. Los usuarios llaman un programa controlador llamado gcc, que interpreta los argumentos dados, decide que compilador usar para cada archivo y ejecuta el ensamblador con el código resultante, después posiblemente ejecuta el enlazador para producir un programa completo.

Cada uno de los compiladores es un programa independiente que toma como entrada código fuente y produce código en ensamblador. Todos ellos tienen una estructura interna común: un front end por lenguaje que procesa el lenguaje y produce un árbol de sintaxis y un back end, que convierte esos árboles al lenguaje RTL (lenguaje de transferencia de registros) de GCC, luego realiza varias optimizaciones y produce el ensamblador utilizando un reconocimiento de patrones específico para la arquitectura, originalmente basado en un algoritmo de Jack Davidson y Chris Fraser.

Casi todo GCC está escrito en C, aunque gran parte del front end de Ada está escrito en Ada. El 30 de mayo de 2010 se anunció que se comenzará a utilizar C++ en el desarrollo de GCC.[7]

Front ends

Los front ends varían internamente, teniendo que producir árboles que puedan ser manejados por el back end. Todos los analizadores son analizadores recursivos descendentes y fueron escritos manualmente, no generados automáticamente.

Hasta hace poco, el árbol de representación de programa no era totalmente independiente del procesador para el que se quería generar el código.

Recientemente se han incluido dos nuevas formas de árbol independientes del lenguaje. Estos nuevos formatos son llamados GENERIC y GIMPLE. El análisis ahora es realizado creando árboles temporales dependientes del lenguaje y convirtiéndolos a GENERIC. El gimplifier convierte esto a GIMPLE, que es el lenguaje común para un gran número de optimizaciones independientes de la arquitectura y del lenguaje.

La optimización en árboles no entra en lo que la mayoría de los desarrolladores de compiladores consideran trabajo del front end, ya que no es dependiente del lenguaje y no involucra el análisis. Los desarrolladores de GCC han dado a esta parte del compilador el nombre de middle end. Las optimizaciones incluyen eliminación de código que nunca se ejecuta, eliminación parcial de redundancia, redundancia a la hora de evaluar expresiones... Actualmente se está trabajando en optimizaciones basadas en dependencia de arreglos.

Back end

El comportamiento del backend está parcialmente especificado por el preprocesador de macros específicas a la arquitectura objetivo, por ejemplo para definir la posición de los bits más significativos, tamaño de palabra, convención para llamadas, etc. El backend utiliza éstas para la generación de RTL, aunque en GCC éste es independiente del procesador, la secuencia inicial de instrucciones abstractas es adaptada a la arquitectura objetivo.

IDEs Compatibles

La mayoría de Entornos de desarrollo integrado escritos para GNU/Linux y algunos otros sistemas operativos soportan GCC. Estos incluyen:

Referencias

  1. «GCC Releases». GNU Project. Consultado el 30-08-2009.
  2. Stallman, Richard M. (February 1986). «GNU Status». GNU's Bulletin (Free Software Foundation) 1 (1). http://web.cecs.pdx.edu/~trent/gnu/bull/01/bull01.txt. 
  3. Tower, Leonard (1987) "GNU C compiler beta test release," comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline
  4. Stallman, Richard M. (2001) "Contributors to GCC," en Using and Porting the GNU Compiler Collection (GCC) for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  5. "gccgo language contribution accepted", gmane.org, Retrieved January 26, 2010.
  6. GCC Front Ends, GCC.org, Retrieved May 11, 2008.
  7. Using C++ in GCC is OK

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Mira otros diccionarios:

  • GNU Compiler Collection — Entwickler GCC Team Aktuelle Version 4.6.2 (26. Oktober 2011) Betriebssyste …   Deutsch Wikipedia

  • GNU compiler collection — Pour les articles homonymes, voir GCC. GNU Compiler Collection …   Wikipédia en Français

  • GNU Compiler Collection — GNU Compiler Collection …   Википедия

  • GNU Compiler Collection — Cc1 redirects here. For other uses of CC1 or CC 1, see CC1 (disambiguation). GNU Compiler Collection Developer(s) GNU Project Initial release May 23, 1987 ( …   Wikipedia

  • GNU Compiler Collection — Pour les articles homonymes, voir GCC. GNU Compiler Collection …   Wikipédia en Français

  • GNU Compiler for the Java Programming Language — GNU Compiler for Java Entwickler: The GNU Project Aktuelle Version: 4.3.1 (6. Juni 2008) Betriebssystem …   Deutsch Wikipedia

  • GNU Compiler for Java — Developer(s) The GNU Project Stable release 4.6.1 / June 27, 2011; 4 months ago (2011 06 27 …   Wikipedia

  • GNU Compiler for Java — Тип Компилятор Разработчик Проект GNU Операционная …   Википедия

  • GNU Compiler for Fortran — GNU Fortran (Gfortran) ist ein freier Compiler für Fortran nach dem Sprachstandard Fortran 95 und ein Teil der GNU Compiler Collection. GNU Fortran unterstützt den vollen Sprachstandard von Fortran 95 und Teilen von Fortran 2003 sowie einige… …   Deutsch Wikipedia

  • GNU Compiler for Java — Entwickler The GNU Project Aktuelle Version 4.4.2 (15. Oktober 2009) Betriebssystem …   Deutsch Wikipedia