Articulo de referencia

Colección de compiladores GNU

{{cite web|url=https://gnu.org/software/gcc/releases.html|title=GCC Releases|publisher=GNU Project|access-date=July 24, 2020|archive-date=June 4, 2023|archive-url=https://web.ar...

La Colección de Compiladores GNU ( GCC ; anteriormente Compilador C GNU ) es una colección de compiladores del Proyecto GNU que admite varios lenguajes de programación , arquitecturas de hardware y sistemas operativos . La Fundación del Software Libre (FSF) distribuye GCC como software libre bajo la Licencia Pública General GNU (GNU GPL). GCC es un componente clave de la cadena de herramientas GNU que se utiliza para la mayoría de los proyectos relacionados con GNU y el núcleo Linux . Con aproximadamente 15 millones de líneas de código en 2019, GCC es uno de los programas libres más grandes que existen. [ 4 ] Ha desempeñado un papel importante en el crecimiento del software libre , tanto como herramienta como ejemplo.

Cuando Richard Stallman lo lanzó por primera vez en 1987 , GCC 1.0 se denominó Compilador GNU C, ya que solo manejaba el lenguaje de programación C. [ 1 ] En diciembre de ese mismo año, se amplió para compilar C++ . Posteriormente se desarrollaron interfaces para Objective-C , Objective-C++ , Fortran , Ada , Go , D , Modula-2 , Rust , COBOL y ALGOL 68 , entre otros. [ 6 ] Las especificaciones OpenMP y OpenACC también son compatibles con los compiladores de C y C++. [ 7 ] [ 8 ]

Además de ser el compilador oficial del sistema operativo GNU , GCC ha sido adoptado como compilador estándar por muchos otros sistemas operativos modernos tipo Unix , incluyendo la mayoría de las distribuciones de Linux . La mayoría de los sistemas operativos de la familia BSD también cambiaron a GCC poco después de su lanzamiento, aunque desde entonces, FreeBSD y Apple macOS han cambiado al compilador Clang , [ 9 ] principalmente debido a razones de licencia. [ 10 ] [ 11 ] [ 12 ] GCC también puede compilar código para sistemas operativos compatibles con Windows , Android , iOS , Solaris , HP-UX , AIX y MS-DOS . [ 13 ]

GCC se ha adaptado a más plataformas y arquitecturas de conjuntos de instrucciones que cualquier otro compilador, y se utiliza ampliamente como herramienta en el desarrollo de software tanto libre como propietario . GCC también está disponible para muchos sistemas embebidos , incluidos chips basados ​​en ARM y Power ISA .

Historia

A finales de 1983, en un esfuerzo por impulsar el sistema operativo GNU , Richard Stallman solicitó a Andrew S. Tanenbaum , autor del Amsterdam Compiler Kit (también conocido como Free University Compiler Kit ), permiso para usar ese software para GNU. Cuando Tanenbaum le informó que el compilador en sí no era libre, sino solo la universidad, Stallman decidió trabajar en un compilador diferente. [ 14 ] Su plan inicial era reescribir un compilador existente del Laboratorio Nacional Lawrence Livermore para el lenguaje Pastel , escrito en Pastel, con la ayuda de Len Tower y otros. [ 15 ] [ 16 ] Stallman escribió un nuevo front-end en C para el compilador de Livermore, pero luego se dio cuenta de que requería megabytes de espacio de pila, una imposibilidad en un sistema Unix 68000 que no permitía más de 64  KB de espacio de pila, y concluyó que tendría que escribir un nuevo compilador desde cero. [ 15 ] Ninguno del código del compilador Pastel terminó en GCC, aunque Stallman sí usó el front-end C que había escrito en Pastel. [ 15 ] [ 17 ]

GCC se lanzó por primera vez el 22 de marzo de 1987, disponible por FTP desde MIT . [ 18 ] Stallman figuraba como autor, pero citaba a otros por sus contribuciones, incluyendo a Tower por "partes del analizador, generador RTL, definiciones RTL y de la descripción de la máquina Vax", Jack Davidson y Christopher W. Fraser por la idea de usar RTL como lenguaje intermedio, y Paul Rubin por escribir la mayor parte del preprocesador. [ 19 ] Descrito como el "primer éxito del software libre" por Peter H. Salus , el compilador GNU llegó justo cuando Sun Microsystems estaba separando sus herramientas de desarrollo de su sistema operativo , vendiéndolas por separado a un precio combinado más alto que el paquete anterior, lo que llevó a muchos usuarios de Sun a comprar o descargar GCC en lugar de las herramientas del proveedor. [ 20 ] Si bien Stallman consideraba GNU Emacs como su proyecto principal, para 1990 GCC soportaba trece arquitecturas de computadoras, superaba el rendimiento de varios compiladores de proveedores y era utilizado comercialmente por varias empresas. [ 21 ]

Horquilla EGCS

Como GCC tenía licencia GPL, los programadores que querían trabajar en otras direcciones, especialmente aquellos que escribían interfaces para lenguajes distintos de C, eran libres de desarrollar su propia bifurcación del compilador, siempre que cumplieran con los términos de la GPL, incluidos sus requisitos para distribuir el código fuente . Sin embargo, las múltiples bifurcaciones resultaron ineficientes y difíciles de manejar, y la dificultad de lograr que el trabajo fuera aceptado por el proyecto oficial de GCC fue muy frustrante para muchos, ya que el proyecto favorecía la estabilidad sobre las nuevas características. [ 22 ] La FSF mantuvo un control tan estricto sobre lo que se agregaba a la versión oficial de GCC 2.x (desarrollada desde 1992) que GCC se utilizó como un ejemplo del modelo de desarrollo de "catedral" en el ensayo de Eric S. Raymond, La catedral y el bazar .

En 1997, un grupo de desarrolladores formó el Sistema de Compilación GNU Experimental/Mejorado (EGCS) para fusionar varias bifurcaciones experimentales en un solo proyecto. [ 22 ] [ 17 ] La base de la fusión fue una instantánea de desarrollo de GCC (tomada alrededor de la versión 2.7.2 y posteriormente seguida hasta la versión 2.8.1). Las fusiones incluyeron g77 (Fortran), PGCC ( GCC optimizado para Pentium P5 ), [ 17 ] muchas mejoras de C++ y muchas arquitecturas y variantes de sistemas operativos nuevas. [ 23 ]

Si bien ambos proyectos siguieron de cerca los cambios del otro, el desarrollo de EGCS resultó considerablemente más vigoroso, tanto que la FSF detuvo oficialmente el desarrollo de su compilador GCC 2.x, aprobó EGCS como la versión oficial de GCC y designó al proyecto EGCS como mantenedor de GCC en abril de 1999. Con el lanzamiento de GCC 2.95 en julio de 1999, los dos proyectos se unieron nuevamente. [ 24 ] [ 17 ] Desde entonces, GCC ha sido mantenido por un grupo diverso de programadores de todo el mundo bajo la dirección de un comité directivo. [ 25 ]

GCC 3 (2002) eliminó una interfaz para CHILL debido a la falta de mantenimiento. [ 26 ]

Antes de la versión 4.0, el front-end de Fortran era g77, que solo admitía FORTRAN 77 , pero posteriormente se abandonó en favor del nuevo front-end de GNU Fortran que admite Fortran 95 y gran parte de Fortran 2003 y Fortran 2008 también. [ 27 ] [ 28 ]

A partir de la versión 4.8, GCC está implementado en C++. [ 29 ]

El soporte para Cilk Plus existió desde GCC 5 hasta GCC 7. [ 30 ] [ 31 ]

GCC se ha adaptado a una amplia variedad de arquitecturas de conjuntos de instrucciones y se utiliza ampliamente como herramienta en el desarrollo de software tanto libre como propietario . GCC también está disponible para muchos sistemas embebidos , incluidos Symbian (llamado gcce ), [ 32 ] chips basados ​​en ARM y Power ISA . [ 33 ] El compilador puede estar dirigido a una amplia variedad de plataformas, incluidas consolas de videojuegos como PlayStation 2 , [ 34 ] Cell SPE de PlayStation 3, [ 35 ] y Dreamcast . [ 36 ] Se ha adaptado a "más de 60 plataformas". [ 37 ]

Idiomas compatibles

A partir de la versión 16.1,GCC incluye front-ends para C ( gcc), C++ ( g++), Objective-C , Objective-C++ , Fortran ( gfortran), Ada ( GNAT ), Go ( gccgo), D ( gdc, desde 9.1), [ 38 ] [ 39 ] Modula-2 ( gm2, desde 13.1), [ 40 ] [ 41 ] Rust ( gccrs, desde 15.1), COBOL ( gcobol, desde 15.1) y ALGOL 68 ( ga68, desde 16.1) lenguajes de programación, [ 6 ] con soporte para las extensiones de lenguaje paralelo OpenMP y OpenACC desde GCC 5.1. [ 8 ] [ 42 ] Las versiones anteriores a GCC 7 también soportaban Java ( gcj), permitiendo la compilación de Java a código máquina nativo. [ 43 ]

Existen interfaces de terceros para muchos lenguajes, como Pascal ( gpc), Mercury , Modula-3 , VHDL ( GHDL) y PL/I . [ 6 ] Existen algunas ramas experimentales para admitir lenguajes adicionales, como el compilador GCC UPC para Unified Parallel C . [ 44 ] [ 45 ]

El objetivo predeterminado para C++ desde GCC 15.1 es gnu++20 , un superconjunto de C++20 , y el objetivo predeterminado para C desde GCC 15 es gnu23 , un superconjunto de C23 , con soporte estándar estricto también disponible. GCC también proporciona soporte experimental para C2Y , C++23 y C++26 . [ 46 ] GCC 16.1 se publicó el 30 de abril de 2026. [ 47 ] [ 48 ]

Diseño

Descripción general del proceso de compilación extendido de GCC, que incluye programas especializados como el preprocesador , el ensamblador y el enlazador .
GCC sigue la arquitectura de tres etapas típica de los compiladores multilenguaje y multi-CPU . Todos los árboles de programa se convierten a una representación abstracta común en la etapa intermedia, lo que permite que las funciones de optimización de código y generación de código binario sean compartidas por todos los lenguajes.

La interfaz externa de GCC sigue las convenciones de Unix . Los usuarios invocan un programa controlador específico del lenguaje ( gccpara C, g++para C++, etc.), que interpreta los argumentos de los comandos , llama al compilador, ejecuta el ensamblador sobre la salida y, opcionalmente, ejecuta el enlazador para producir un binario ejecutable completo.

Cada compilador de lenguaje es un programa independiente que lee el código fuente y genera código máquina . Todos comparten una estructura interna común. Un front-end específico para cada lenguaje analiza el código fuente y produce un árbol de sintaxis abstracta (o simplemente "árbol").

Estos se convierten, si es necesario, a la representación de entrada del extremo intermedio, denominada forma GENÉRICA ; el extremo intermedio luego transforma gradualmente el programa hacia su forma final. Se aplican optimizaciones del compilador y técnicas de análisis de código estático (como FORTIFY_SOURCE, [ 49 ] una directiva del compilador que intenta detectar desbordamientos de búfer ) al código. Estas funcionan con múltiples representaciones, principalmente la representación GIMPLE independiente de la arquitectura y la representación RTL dependiente de la arquitectura . Finalmente, se produce el código máquina utilizando la coincidencia de patrones específica de la arquitectura, basada originalmente en un algoritmo de Jack Davidson y Chris Fraser.

GCC se escribió principalmente en C, excepto algunas partes del front-end de Ada . La distribución incluye las bibliotecas estándar para Ada y C++ , cuyo código está escrito mayoritariamente en esos lenguajes. [ 50 ]En algunas plataformas, la distribución también incluye una biblioteca de tiempo de ejecución de bajo nivel, libgcc , escrita en una combinación de C independiente de la máquina y código máquina específico del procesador , diseñada principalmente para manejar operaciones aritméticas que el procesador de destino no puede realizar directamente. [ 51 ]

GCC utiliza muchas herramientas adicionales en su compilación, muchas de las cuales vienen instaladas por defecto en muchas distribuciones de Unix y Linux (pero que, normalmente, no están presentes en las instalaciones de Windows), incluyendo Perl , Flex , Bison y otras herramientas comunes. Además, actualmente requiere la presencia de tres bibliotecas adicionales para su compilación: GMP , MPC y MPFR . [ 52 ]

En mayo de 2010, el comité directivo de GCC decidió permitir el uso de un compilador de C++ para compilar GCC. [ 53 ] El compilador estaba diseñado para escribirse principalmente en C, además de un subconjunto de características de C++. En particular, esta decisión se tomó para que los desarrolladores de GCC pudieran usar los destructores y las características de genéricos de C++. [ 54 ]

En agosto de 2012, el comité directivo de GCC anunció que GCC ahora utiliza C++ como su lenguaje de implementación. [ 55 ] Esto significa que para compilar GCC desde el código fuente, se requiere un compilador de C++ que entienda el estándar ISO/IEC C++03 .

El 18 de mayo de 2020, GCC pasó del estándar ISO/IEC C++03 al estándar ISO/IEC C++11 (es decir, necesario para compilar, arrancar, el propio compilador; sin embargo, por defecto compila versiones posteriores de C++). [ 56 ]

partes delanteras

Las fases iniciales del compilador constan de preprocesamiento , análisis léxico , análisis sintáctico (parsing) y análisis semántico. Los objetivos de estas fases son aceptar o rechazar programas candidatos según la gramática y la semántica del lenguaje, identificar errores y gestionar las representaciones válidas del programa para las etapas posteriores del compilador . Este ejemplo muestra los pasos del analizador léxico y el analizador sintáctico realizados para un programa sencillo escrito en C.

Cada interfaz utiliza un analizador sintáctico para producir el árbol de sintaxis abstracta de un archivo fuente dado . Debido a la abstracción del árbol de sintaxis, los archivos fuente de cualquiera de los diferentes lenguajes admitidos pueden ser procesados ​​por el mismo backend . GCC comenzó utilizando analizadores LALR generados con Bison , pero gradualmente cambió a analizadores recursivos descendentes escritos a mano para C++ en 2004, [ 57 ] y para C y Objective-C en 2006. [ 58 ] A partir de 2021, todas las interfaces utilizan analizadores recursivos descendentes escritos a mano.

Hasta GCC 4.0, la representación en árbol del programa no era completamente independiente del procesador de destino. El significado de un árbol variaba ligeramente según el lenguaje de programación, y estos podían proporcionar sus propios códigos de árbol. Esto se simplificó con la introducción de GENERIC y GIMPLE, dos nuevas formas de árboles independientes del lenguaje que se introdujeron con la llegada de GCC 4.0. GENERIC es más complejo, basado en la representación intermedia del frontend Java de GCC 3.x. GIMPLE es una versión simplificada de GENERIC, en la que diversas construcciones se reducen a múltiples instrucciones GIMPLE. Los frontends de C , C++ y Java generan GENERIC directamente. Otros frontends, en cambio, tienen diferentes representaciones intermedias después del análisis sintáctico y las convierten a GENERIC.

En ambos casos, el llamado "gimplificador" convierte esta forma más compleja en la forma GIMPLE más simple basada en SSA , que es el lenguaje común para una gran cantidad de optimizaciones globales (ámbito de función) independientes del lenguaje y la arquitectura.

GENÉRICO y GRANOS

GENERIC es un lenguaje de representación intermedio que se utiliza como "fase intermedia" durante la compilación del código fuente en binarios ejecutables . Un subconjunto, llamado GIMPLE , es el objetivo de todas las fases de compilación de GCC.

La etapa intermedia de GCC realiza todo el análisis y la optimización del código , trabajando independientemente del lenguaje compilado y la arquitectura de destino, partiendo de la representación GENERIC [ 59 ] y expandiéndola al lenguaje de transferencia de registros (RTL). La representación GENERIC contiene únicamente el subconjunto de las construcciones de programación imperativa optimizadas por la etapa intermedia.

Al transformar el código fuente a GIMPLE, [ 60 ] las expresiones complejas se dividen en un código de tres direcciones utilizando variables temporales . Esta representación se inspiró en la representación SIMPLE propuesta en el compilador McCAT [ 61 ] por Laurie J. Hendren [ 62 ] para simplificar el análisis y la optimización de programas imperativos .

Mejoramiento

La optimización puede ocurrir durante cualquier fase de la compilación; sin embargo, la mayor parte de las optimizaciones se realizan después del análisis sintáctico y semántico del front-end y antes de la generación de código del back-end; por lo tanto, un nombre común, aunque algo contradictorio, para esta parte del compilador es "middle end".

El conjunto exacto de optimizaciones de GCC varía de una versión a otra a medida que se desarrolla, pero incluye los algoritmos estándar, como la optimización de bucles , la gestión de hilos de salto , la eliminación de subexpresiones comunes , la planificación de instrucciones , etc. Las optimizaciones RTL son menos importantes con la adición de optimizaciones globales basadas en SSA en árboles GIMPLE , [ 63 ] ya que las optimizaciones RTL tienen un alcance mucho más limitado y contienen menos información de alto nivel.

Algunas de estas optimizaciones realizadas a este nivel incluyen la eliminación de código muerto , la eliminación de redundancia parcial , la numeración global de valores , la propagación de constantes condicionales dispersas y el reemplazo escalar de agregados . También se realizan optimizaciones basadas en la dependencia de matrices, como la vectorización automática y la paralelización automática . Asimismo, es posible la optimización guiada por perfiles . [ 64 ]

Biblioteca estándar de C++ (libstdc++)

El proyecto GCC incluye una implementación de la biblioteca estándar de C++ llamada libstdc++, [ 65 ] licenciada bajo la licencia GPLv3 con una excepción para enlazar aplicaciones no compatibles con GPL cuando las fuentes se compilan con GCC. [ 66 ] Desde la versión 3 de GCC, la ABI de C++ se basa en la ABI publicada por Intel para la ABI de Itanium C++. [ 67 ]

Otras características

Algunas características de GCC incluyen:

Optimización del tiempo de enlace
La optimización en tiempo de enlace optimiza el código entre los límites de los archivos objeto para mejorar directamente el binario enlazado. Esta optimización se basa en un archivo intermedio que contiene la serialización de alguna representación de Gimple incluida en el archivo objeto. El archivo se genera junto con el archivo objeto durante la compilación del código fuente. Cada compilación del código fuente genera un archivo objeto y un archivo auxiliar de enlace independientes. Cuando se enlazan los archivos objeto, el compilador se ejecuta de nuevo y utiliza los archivos auxiliares para optimizar el código en todos los archivos objeto compilados por separado.
Plugins
Los complementos extienden directamente el compilador GCC. [ 68 ] Los complementos permiten adaptar un compilador estándar a necesidades específicas mediante código externo cargado como complementos. Por ejemplo, los complementos pueden agregar, reemplazar o incluso eliminar pasos intermedios que operan sobre representaciones de Gimple . [ 69 ] Ya se han publicado varios complementos de GCC, en particular:
  • El complemento de Python, que se enlaza con libpython, permite invocar scripts de Python arbitrarios desde dentro del compilador. El objetivo es permitir que los complementos de GCC se escriban en Python.
  • El complemento MELT proporciona un lenguaje de alto nivel similar a Lisp para extender GCC. [ 70 ]
El soporte de complementos fue un tema polémico en 2007. [ 71 ]
Memoria transaccional de C++
El lenguaje C++ tiene una propuesta activa para memoria transaccional. Se puede habilitar en GCC 6 y versiones posteriores al compilar con -fgnu-tm. [ 7 ] [ 72 ]
identificadores Unicode
Aunque el lenguaje C++ requiere compatibilidad con caracteres Unicode no ASCII en los identificadores , esta característica solo se admite desde GCC 10. Al igual que con el manejo actual de literales de cadena, se asume que el archivo fuente está codificado en UTF-8 . Esta característica es opcional en C, pero también está disponible desde este cambio. [ 73 ] [ 74 ]
Extensiones de C
GNU C extiende el lenguaje de programación C con varias características no estándar, incluidas las funciones anidadas . [ 75 ]

Arquitecturas

Compilación de Hello World con GCC en Windows

Las familias de procesadores principales compatibles (y mejor probadas) son ARM de 64 y 32 bits , x86 de 64 y 32 bits , PowerPC de 64 y 64 bits y SPARC . [ 76 ]

Las familias de procesadores de destino de GCC a partir de la versión 11.1 incluyen: [ 77 ]

Entre los procesadores de destino menos conocidos compatibles con la versión estándar se incluyen:

Se han admitido procesadores adicionales mediante versiones de GCC mantenidas por separado de la versión de la FSF:

El compilador GCJ Java puede estar dirigido tanto a una arquitectura de lenguaje de máquina nativa como al bytecode Java de la máquina virtual Java . [ 80 ] Al adaptar GCC a una nueva plataforma, se suele utilizar el arranque . Los procesadores Motorola 68000, Zilog Z80 y otros también están dirigidos a las versiones de GCC desarrolladas para diversas calculadoras gráficas programables de Texas Instruments, Hewlett Packard, Sharp y Casio. [ 81 ]

Licencia

GCC está licenciado bajo la Licencia Pública General GNU versión 3. [ 82 ] La excepción de tiempo de ejecución de GCC permite la compilación de programas propietarios (además de software libre) con cabeceras y bibliotecas de tiempo de ejecución de GCC. Esto no afecta los términos de la licencia del código fuente de GCC. [ 83 ]

Sin embargo, esta excepción es limitada. Por ejemplo, cuando se utiliza software no compatible con GPL junto con GCC dentro del proceso de compilación , el cumplimiento de la GPLv3 para todo el código objeto propagado que genera GCC se vuelve obligatorio, ya que se deriva de bibliotecas con licencia GPL . [ 84 ]

Véase también

Referencias

  1. 1 2 "Versiones de GCC" . Proyecto GNU. Archivado del original el 4 de junio de 2023. Recuperado el 24 de julio de 2020 .
  2. Richard Biener (30 de abril de 2026). "GCC 16.1 Released" . Consultado el 30 de abril de 2026 .
  3. "Convenciones de codificación de GCC - Proyecto GNU" . gcc.gnu.org . Archivado del original el 28 de mayo de 2023. Consultado el 7 de febrero de 2022 .
  4. 1 2 Víctor Rodríguez (1 de octubre de 2019). "Cutting Edge Toolchain (últimas características en GCC/GLIBC)" . youtube.com . Linux Foundation. Archivado del original el 7 de noviembre de 2021. Recuperado el 19 de enero de 2021 .
  5. "Excepción de la biblioteca de tiempo de ejecución de GCC" . Archivado del original el 31 de marzo de 2023. Consultado el 24 de julio de 2020 .
  6. 1 2 3 "GCC Front Ends" . Proyecto GNU. Archivado del original el 13 de febrero de 2026. Recuperado el 13 de febrero de 2026 .
  7. 1 2 "Serie de lanzamientos de GCC 6: cambios, nuevas características y correcciones - Proyecto GNU" . gcc.gnu.org . Archivado del original el 22 de septiembre de 2016. Recuperado el 19 de septiembre de 2016 .
  8. 1 2 "OpenACC - GCC Wiki" . gcc.gnu.org . Archivado del original el 1 de abril de 2015. Recuperado el 19 de septiembre de 2016 .
  9. "El proyecto de infraestructura del compilador LLVM" . llvm.org . Archivado del original el 18 de enero de 2023. Consultado el 24 de septiembre de 2021 .
  10. "La purga de GPLv3 de Apple" . meta.ath0.com . 5 de febrero de 2012. Archivado del original el 18 de enero de 2023. Consultado el 12 de enero de 2021 .
  11. Linnemann, Reid (20 de junio de 2012). "Por qué Clang" . Archivado del original el 18 de enero de 2023. Recuperado el 12 de enero de 2021 .
  12. "29 de agosto de 2007: Boletín informativo de la Fundación FreeBSD, 29 de agosto de 2007" . 11 de octubre de 2007. Archivado del original el 11 de octubre de 2007. Consultado el 12 de enero de 2021 .
  13. "Instalación de GCC: Binarios - Proyecto GNU - Fundación del Software Libre (FSF)" . gcc.gnu.org . Archivado del original el 5 de enero de 2021. Consultado el 12 de enero de 2021 .
  14. ^ Von Hagen, William (2006). La guía definitiva del CCG . Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN   978-1-4302-0219-6Archivado del original el 5 de abril de 2024. Recuperado el 25 de septiembre de 2020. Entonces le escribió al autor de VUCK preguntándole si GNU podía usarlo . Evidentemente, el desarrollador de VUCK no colaboró, respondiendo que la universidad era libre pero que el compilador no lo era.
  15. 1 2 3 Stallman, Richard (20 de septiembre de 2011). "Acerca del Proyecto GNU" . El Proyecto GNU. Archivado del original el 9 de agosto de 2019. Recuperado el 9 de octubre de 2011 .
  16. Puzo, Jerome E., ed. (febrero de 1986). "Gnu's Zoo" . Boletín de GNU . 1 (1). Fundación del Software Libre. Archivado del original el 23 de junio de 2015. Recuperado el 11 de agosto de 2007 .
  17. ^ von Hagen , William (2006) . La guía definitiva del CCG . Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN   978-1-4302-0219-6Archivado del original el 5 de abril de 2024. Consultado el 25 de septiembre de 2020 .
  18. Richard M. Stallman (reenviado por Leonard H. Tower Jr.) (22 de marzo de 1987). "Versión beta de prueba del compilador GNU C" . Grupo de noticias : comp.lang.c. Archivado del original el 2 de junio de 2013. Recuperado el 9 de octubre de 2011 . 
  19. Stallman, Richard M. (22 de junio de 2001) [Publicado por primera vez en 1988], "Contribuyentes a GNU CC" , Uso y adaptación de la colección de compiladores GNU (GCC) , Free Software Foundation, Inc., pág. 7, archivado del original el 18 de enero de 2023 , recuperado el 18 de junio de 2015 . 
  20. Salus, Peter H. (2005). "Capítulo 10. SUN y gcc" . The Daemon, the Gnu and the Penguin . Groklaw . Archivado del original el 20 de junio de 2022. Recuperado el 14 de septiembre de 2015 .
  21. Garfinkel, Simson L. (6 de agosto de 1990). "Prepárense para el software GNU" . Computerworld . pág. 102. 
  22. 1 2 Henkel-Wallace, David (15 de agosto de 1997), Un nuevo proyecto de compilador para fusionar las bifurcaciones existentes de GCC , archivado del original el 18 de enero de 2023 , recuperado el 25 de mayo de 2012 .
  23. "Breve historia del desarrollo de GCC" . www.softpanorama.org . Archivado del original el 9 de noviembre de 2022. Consultado el 24 de enero de 2021 .
  24. "Historia - Wiki de GCC" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 28 de septiembre de 2020 .
  25. "Comité directivo de GCC - Proyecto GNU" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
  26. "PARCHE ] Eliminar chill" . gcc.gnu.org . Archivado del original el 20 de octubre de 2016. Recuperado el 29 de julio de 2010 .
  27. "Tabla de características de Fortran 2003 compatibles con GNU Fortran" . GNU . Archivado del original el 18 de enero de 2023. Consultado el 25 de junio de 2009 .
  28. "Tabla de características de Fortran 2008 compatibles con GNU Fortran" . GNU . Archivado del original el 18 de enero de 2023. Consultado el 25 de junio de 2009 .
  29. "Serie de lanzamientos de GCC 4.8: cambios, nuevas características y correcciones - Proyecto GNU" . gcc.gnu.org . Archivado del original el 8 de diciembre de 2015. Consultado el 17 de febrero de 2015 .
  30. "Serie de lanzamientos de GCC 5: cambios, nuevas características y correcciones" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 13 de enero de 2022 .
  31. "Serie de lanzamientos de GCC 8: cambios, nuevas características y correcciones" . gcc.gnu.org . Archivado del original el 29 de noviembre de 2018. Consultado el 13 de enero de 2022 .
  32. "Proyecto de mejora de Symbian GCC" . Archivado del original el 1 de agosto de 2014. Consultado el 8 de noviembre de 2007 .
  33. "Paquetes de soporte para placas Linux" . Archivado del original el 7 de junio de 2011. Consultado el 24 de enero de 2021 .
  34. "Configuración de gcc como compilador cruzado" . ps2stuff . 8 de junio de 2002. Archivado del original el 11 de diciembre de 2008. Consultado el 12 de diciembre de 2008 .
  35. "CompileFarm - Wiki de GCC" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 19 de septiembre de 2016 .
  36. "Guía de sh4 g++" . Archivado del original el 20 de diciembre de 2002. Consultado el 12 de diciembre de 2008 .
  37. "Linux Information Project" . LINFO. Archivado del original el 3 de enero de 2023. Recuperado el 27 de abril de 2010. El GCC se ha adaptado (es decir, modificado para ejecutarse en) más de 60 plataformas, más que cualquier otro compilador .
  38. "Serie de lanzamientos de GCC 9: cambios, nuevas características y correcciones - Proyecto GNU" . Archivado del original el 19 de febrero de 2022. Consultado el 7 de mayo de 2019 .
  39. "El front-end del lenguaje D finalmente se fusionó con GCC 9 - Phoronix" . phoronix.com . Archivado del original el 17 de mayo de 2022. Consultado el 19 de enero de 2021 .
  40. "Serie de lanzamientos de GCC 13: cambios, nuevas características y correcciones - Proyecto GNU" . Archivado del original el 26 de mayo de 2023. Consultado el 23 de junio de 2023 .
  41. Proven, Liam (16 de diciembre de 2022). "GCC 13 dará soporte a Modula-2: La continuación de Pascal sigue viva en formato FOSS" . Archivado del original el 19 de diciembre de 2022. Consultado el 19 de diciembre de 2022 .
  42. "Serie de lanzamientos de GCC 5: cambios, nuevas características y correcciones - Proyecto GNU" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 23 de abril de 2015 .
  43. "Serie de lanzamientos de GCC 7" . gnu.org. Archivado del original el 2 de septiembre de 2020. Consultado el 20 de marzo de 2018 .
  44. "GCC UPC (GCC Unified Parallel C)" . Intrepid Technology, Inc. 20 de febrero de 2006. Archivado del original el 11 de febrero de 2010. Consultado el 11 de marzo de 2009 .
  45. Spengler, Brad (12 de enero de 2021). "Open Source Security, Inc. anuncia la financiación de una interfaz GCC para Rust" . Archivado del original el 25 de abril de 2021.
  46. "Soporte para estándares de C++ en GCC" . Archivado del original el 20 de abril de 2022. Consultado el 17 de mayo de 2021 .
  47. GCC 16.1 lanzado con soporte para AMD Zen 6, Algol 68 y muchas mejoras en C++ , Michael Larabel. phoronix.com. 30 de abril de 2026. Consultado el 30 de abril de 2026.
  48. Serie de lanzamientos de GCC 16 , gcc.gnu.org. 30 de abril de 2026. Consultado el 30 de abril de 2026.
  49. "Funciones de seguridad: comprobaciones de búfer en tiempo de compilación (FORTIFY_SOURCE)" . fedoraproject.org. Archivado del original el 7 de enero de 2007. Consultado el 11 de marzo de 2009 .
  50. "lenguajes utilizados para crear GCC" . Archivado del original el 27 de mayo de 2008. Recuperado el 14 de septiembre de 2008 .
  51. "GCC Internals" . GCC.org. Archivado del original el 18 de enero de 2023. Consultado el 1 de marzo de 2010 .
  52. "Requisitos previos para GCC - Proyecto GNU" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 5 de septiembre de 2021 .
  53. "GCC permite C++ – hasta cierto punto" . The H. 1 de junio de 2010. Archivado del original el 26 de septiembre de 2022. Consultado el 9 de junio de 2010 . 
  54. "Re: ¿Esfuerzos para atraer más usuarios?" . lists.gnu.org . Archivado del original el 18 de enero de 2023 . Consultado el 24 de septiembre de 2021 .
  55. "Serie de lanzamientos de GCC 4.8: cambios, nuevas características y correcciones" . Archivado del original el 8 de diciembre de 2015. Consultado el 4 de octubre de 2013 .
  56. "bootstrap: Actualizar el requisito a C++11" . GitHub . Archivado del original el 29 de septiembre de 2022. Recuperado el 18 de mayo de 2020 .
  57. "Serie de lanzamientos de GCC 3.4: cambios, nuevas características y correcciones - Proyecto GNU" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
  58. "Serie de lanzamientos de GCC 4.1: cambios, nuevas características y correcciones - Proyecto GNU" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
  59. "GENERIC (GNU Compiler Collection (GCC) Internals)" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
  60. "GIMPLE (GNU Compiler Collection (GCC) Internals)" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
  61. "McCAT" . Archivado del original el 12 de agosto de 2004. Consultado el 14 de septiembre de 2017 .
  62. "Página principal de Laurie Hendren" . www.sable.mcgill.ca . Archivado del original el 27 de septiembre de 2022. Consultado el 20 de julio de 2009 .
  63. Novillo, Diego (diciembre de 2004). "Del código fuente al binario: el funcionamiento interno de GCC" . Revista Red Hat . Archivado del original el 1 de abril de 2009.
  64. "Instalación de GCC: Compilación - Proyecto GNU" . gcc.gnu.org . Archivado del original el 22 de agosto de 2023. Consultado el 25 de julio de 2016 .
  65. "La biblioteca GNU C++" . Proyecto GNU. Archivado del original el 25 de diciembre de 2022. Consultado el 21 de febrero de 2021 .
  66. "Licencia" . Proyecto GNU. Archivado del original el 18 de enero de 2023. Consultado el 21 de febrero de 2021 .
  67. "Política y directrices de ABI" . gcc.gnu.org . Consultado el 11 de noviembre de 2025 .
  68. "Plugins" . Documentación en línea de GCC . Archivado del original el 30 de abril de 2013. Consultado el 8 de julio de 2013 .
  69. Starynkevitch, Basile. "Complementos de GCC a través del ejemplo MELT" (PDF) . Archivado (PDF) del original el 13 de abril de 2014. Recuperado el 10 de abril de 2014 .
  70. "Acerca de GCC MELT" . Archivado del original el 25 de septiembre de 2013. Consultado el 8 de julio de 2013 .
  71. Corbet, Jonathan (19 de noviembre de 2007). "GCC desconectado [ LWN.net ] " . lwn.net . Archivado del original el 9 de noviembre de 2020 . Recuperado el 28 de marzo de 2021 .
  72. "TransactionalMemory - GCC Wiki" . gcc.gnu.org . Archivado del original el 19 de agosto de 2016. Consultado el 19 de septiembre de 2016 .
  73. "Lewis Hyatt - [ PARCHE ] wwwdocs: Se agregó soporte para documentos con identificadores extendidos a GCC" . gcc.gnu.org . Archivado del original el 27 de marzo de 2020. Recuperado el 27 de marzo de 2020 .
  74. "Recomendaciones para caracteres de identificador extendidos para C y C++" . www.open-std.org . Archivado del original el 30 de septiembre de 2020. Consultado el 27 de marzo de 2020 .
  75. "Extensiones de C (usando la colección de compiladores GNU (GCC))" . gcc.gnu.org . Archivado del original el 12 de enero de 2022. Consultado el 12 de enero de 2022 .
  76. "Criterios de lanzamiento de GCC 12" . gcc.gnu.org . 26 de octubre de 2022. Archivado del original el 27 de enero de 2023. Consultado el 27 de enero de 2023 .
  77. "Resumen de opciones (Uso de la colección de compiladores GNU (GCC))" . gcc.gnu.org . Archivado del original el 18 de enero de 2023. Consultado el 21 de agosto de 2020 .
  78. "Wiki del Proyecto Hexagon" . Archivado del original el 23 de marzo de 2012. Consultado el 19 de mayo de 2011 .
  79. "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . code.google.com . Archivado del original el 25 de septiembre de 2022. Consultado el 24 de septiembre de 2021 .
  80. "El compilador GNU para el lenguaje de programación Java" . Archivado del original el 9 de mayo de 2007. Consultado el 22 de abril de 2010 .
  81. calculadoras gráficas#programación
  82. "Uso de la colección de compiladores GNU" . gnu.org . Archivado del original el 16 de noviembre de 2023. Consultado el 5 de noviembre de 2019 .
  83. "Excepción de tiempo de ejecución de GCC" . FSF. Archivado del original el 16 de abril de 2014. Recuperado el 10 de abril de 2014 .
  84. "Fundamento y preguntas frecuentes sobre la excepción de la biblioteca de tiempo de ejecución de GCC - Proyecto GNU - Fundación del Software Libre" . www.gnu.org . Fundación del Software Libre . Sección "Cómo funciona la excepción". Archivado del original el 25 de julio de 2025. Recuperado el 31 de julio de 2025. Cómo funciona la excepción (...) Tiene permiso para propagar una obra de Código de destino formada al combinar la Biblioteca de tiempo de ejecución con Módulos independientes, incluso si dicha propagación violaría de otro modo los términos de GPLv3, siempre que todo el Código de destino haya sido generado por Procesos de compilación elegibles. Luego puede transmitir dicha combinación bajo los términos que elija, consistentes con la licencia de los Módulos independientes. (...) Sin embargo, si usó GCC junto con software incompatible con GPL durante el proceso de transformación de código de alto nivel a código de bajo nivel, eso no sería un Proceso de compilación elegible. Esto sucedería si, por ejemplo, usó GCC con un complemento propietario. (...) Siempre que utilice un Proceso de Compilación Elegible, tendrá permiso para tomar el Código Objetivo que genera GCC y distribuirlo "bajo los términos que usted elija". Si utilizara software incompatible con la GPL junto con GCC durante el Proceso de Compilación, no podría beneficiarse de este permiso. Dado que todo el código objeto que genera GCC deriva de estas bibliotecas con licencia GPL, esto significa que estaría obligado a cumplir con los términos de la GPL al distribuir dicho código objeto. No podría utilizar GCC para desarrollar su propio software incompatible con la GPL.

Lecturas adicionales

  • Uso de la Colección de Compiladores GNU (GCC) , Free Software Foundation, 2008.
  • GNU Compiler Collection (GCC) Internals , Free Software Foundation, 2008.
  • Introducción a GCC , Network Theory Ltd., 2004 (Revisado en agosto de 2005). ISBN 0-9541617-9-3.
  • Arthur Griffith, GCC: La referencia completa . McGraw Hill / Osborne, 2002. ISBN 0-07-222405-3.

Oficial

  • Sitio web oficialEdita esto en Wikidata
  • Cronograma de lanzamiento de GCC
  • Plan de Desarrollo del CCG

Otro

  • Colección de documentos sobre la arquitectura y el funcionamiento interno de GCC 4.0.2 en el IIT Bombay.
  • Kerner, Sean Michael (2 de marzo de 2006). "El nuevo GCC se centra en la optimización" . internetnews.com
  • Kerner, Sean Michael (22 de abril de 2005). "GCC 4.0 de código abierto: más antiguo, más rápido" . internetnews.com. Archivado del original el 17 de septiembre de 2006. Consultado el 21 de octubre de 2006 .
  • Del código fuente al binario: El funcionamiento interno de GCC , por Diego Novillo, Red Hat Magazine , diciembre de 2004.
  • Un artículo de 2003 sobre GENERIC y GIMPLE
  • Marketing Cygnus Support , un ensayo que abarca el desarrollo de GCC durante la década de 1990, con 30 informes mensuales en la sección "Inside Cygnus Engineering" cerca del final.
  • Anuncio de EGCS 1.0
  • Lista de características de EGCS 1.0
  • El miedo a la bifurcación , un ensayo de Rick Moen que documenta siete bifurcaciones bien conocidas, incluida la del GCC/EGCS.