Además de ser el compilador oficial del sistema operativo GNU , GCC ha sido adoptado como compilador estándar por muchos otros sistemas operativos informáticos modernos similares a Unix , incluidas 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 se han mudado al compilador Clang , [10] en gran parte debido a razones de licencia. [11] [12] [13] GCC también puede compilar código para Windows , Android , iOS , Solaris , HP-UX , AIX y DOS . [14]
Historia
A finales de 1983, en un esfuerzo por arrancar el sistema operativo GNU , Richard Stallman le pidió permiso a Andrew S. Tanenbaum , el autor del Amsterdam Compiler Kit (también conocido como Free University Compiler Kit ) para usar ese software para GNU. Cuando Tanenbaum le informó que el compilador no era libre, y que solo la universidad lo era, Stallman decidió trabajar en un compilador diferente. [15] Su plan inicial era reescribir un compilador existente del Laboratorio Nacional Lawrence Livermore de Pastel a C con algo de ayuda de Len Tower y otros. [16] [17] Stallman escribió una nueva interfaz de C para el compilador Livermore, pero luego se dio cuenta de que requería megabytes de espacio de pila, una imposibilidad en un sistema Unix 68000 con solo 64 KB, y concluyó que tendría que escribir un nuevo compilador desde cero. [16] Ninguno de los códigos del compilador Pastel terminó en GCC, aunque Stallman sí utilizó el frontend C que había escrito. [16] [18]
GCC fue lanzado por primera vez el 22 de marzo de 1987, disponible por FTP desde el MIT . [19] Stallman fue listado como el autor pero citó a otros por sus contribuciones, incluyendo 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. [20] Descrito como el "primer éxito del software libre" por Peter H. Salus , el compilador GNU llegó justo en el momento en que 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 de los usuarios de Sun a comprar o descargar GCC en lugar de las herramientas del proveedor. [21] Mientras que Stallman consideraba a GNU Emacs como su proyecto principal, para 1990 GCC soportaba trece arquitecturas de computadora, superaba a varios compiladores de proveedores y era utilizado comercialmente por varias compañías. [22]
Horquilla EGCS
Como GCC tenía licencia GPL, los programadores que querían trabajar en otras direcciones (en particular aquellos que escribían interfaces para lenguajes distintos de C) tenían libertad para desarrollar su propia versión del compilador, siempre que cumplieran con los términos de la GPL, incluidos sus requisitos para distribuir el código fuente . Sin embargo, la existencia de múltiples versiones resultó ineficiente y difícil de manejar, y la dificultad para conseguir que el proyecto oficial GCC aceptara el trabajo fue muy frustrante para muchos, ya que el proyecto favorecía la estabilidad por sobre las nuevas características. [23] La FSF mantuvo un control tan estricto sobre lo que se añadía 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 The Cathedral and the Bazaar .
En 1997, un grupo de desarrolladores formó el Sistema de compilación GNU experimental/mejorado (EGCS) para fusionar varias bifurcaciones experimentales en un único proyecto. [23] [18] La base de la fusión fue una instantánea de desarrollo de GCC (tomada alrededor de la versión 2.7.2 y seguida posteriormente hasta la versión 2.8.1). Las fusiones incluyeron g77 (Fortran), PGCC ( GCC optimizado para Pentium P5 ), [18] muchas mejoras de C++ y muchas nuevas arquitecturas y variantes de sistemas operativos . [24]
Aunque 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, bendijo a EGCS como la versión oficial de GCC y designó al proyecto EGCS como los mantenedores de GCC en abril de 1999. Con el lanzamiento de GCC 2.95 en julio de 1999, los dos proyectos volvieron a unirse. [25] [18] Desde entonces, GCC ha sido mantenido por un grupo variado de programadores de todo el mundo bajo la dirección de un comité directivo. [26]
GCC 3 (2002) eliminó una interfaz para CHILL debido a la falta de mantenimiento. [27]
A partir de la versión 13.1, [actualizar]GCC incluye interfaces para los lenguajes de programación C ( gcc), C++ ( g++), Objective-C y Objective-C++ , Fortran ( gfortran), Ada ( GNAT ), Go ( gccgo), D ( gdc, desde 9.1), [39] [40] y Modula-2 ( gm2, desde 13.1) [41] [42] , [43] con las extensiones de lenguaje paralelo OpenMP y OpenACC siendo compatibles desde GCC 5.1. [9] [44] Las versiones anteriores a GCC 7 también soportaban Java ( gcj), lo que permitía la compilación de Java a código de máquina nativo. [45]
En cuanto al soporte de versiones de lenguaje para C++ y C, desde GCC 11.1 el objetivo predeterminado es gnu++17 , un superconjunto de C++17 , y gnu11 , un superconjunto de C11 , con soporte estándar estricto también disponible. GCC también proporciona soporte experimental para C++20 y C++23 . [46]
Existen interfaces de terceros para muchos lenguajes, como Pascal ( gpc), Modula-3 y VHDL ( GHDL). [43] Existen algunas ramas experimentales para soportar lenguajes adicionales, como el compilador GCC UPC para Unified Parallel C [47] o Rust . [48] [49] [50] [ se necesita una mejor fuente ]
Diseño
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 del comando , llama al compilador real, ejecuta el ensamblador en la salida y, luego, opcionalmente, ejecuta el enlazador para producir un binario ejecutable completo.
Cada uno de los compiladores de lenguaje es un programa independiente que lee el código fuente y genera código de máquina . Todos tienen una estructura interna común. Un front-end por lenguaje analiza el código fuente en ese lenguaje y produce un árbol de sintaxis abstracta ("árbol" para abreviar).
GCC fue escrito principalmente en C, excepto partes del front-end de Ada . La distribución incluye las bibliotecas estándar para Ada y C++, cuyo código está escrito principalmente en esos lenguajes. [52] [ necesita actualización ] 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 de máquina específico del procesador , diseñada principalmente para manejar operaciones aritméticas que el procesador de destino no puede realizar directamente. [53]
GCC utiliza muchas herramientas adicionales en su compilación, muchas de las cuales están instaladas por defecto en muchas distribuciones Unix y Linux (pero que, normalmente, no están presentes en las instalaciones de Windows), incluyendo Perl , [ se necesita más explicación ] Flex , Bison y otras herramientas comunes. Además, actualmente requiere la presencia de tres bibliotecas adicionales para poder compilar: GMP , MPC y MPFR . [54]
En mayo de 2010, el comité directivo de GCC decidió permitir el uso de un compilador de C++ para compilar GCC. [55] El compilador estaba pensado para ser escrito principalmente en C más un subconjunto de características de C++. En particular, esto se decidió para que los desarrolladores de GCC pudieran usar los destructores y las características genéricas de C++. [56]
En agosto de 2012, el comité directivo de GCC anunció que GCC ahora utiliza C++ como su lenguaje de implementación. [57] Esto significa que para construir GCC a partir de fuentes, 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 compilador en sí; sin embargo, de forma predeterminada compila versiones posteriores de C++). [58]
Hasta GCC 4.0 la representación en forma de árbol del programa no era totalmente independiente del procesador al que se dirigía. El significado de un árbol era algo diferente para los distintos front-ends de lenguaje, y los front-ends 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 front-end de Java de GCC 3.x. GIMPLE es un GENERIC simplificado, en el que varias construcciones se reducen a múltiples instrucciones GIMPLE. Los front-ends de C , C++ y Java producen GENERIC directamente en el front-end. Otros front-ends, en cambio, tienen diferentes representaciones intermedias después de analizarlas y convertirlas a GENERIC.
En cualquier caso, el llamado "gimplificador" convierte esta forma más compleja en la forma más simple GIMPLE basada en SSA , que es el lenguaje común para una gran cantidad de optimizaciones globales (alcance de función) independientes del lenguaje y de la arquitectura.
GENERIC y GIMPLE
GENERIC es un lenguaje de representación intermedio que se utiliza como "extremo intermedio" durante la compilación del código fuente en binarios ejecutables . Un subconjunto, llamado GIMPLE , es el objetivo de todos los front-ends de GCC.
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 el "extremo medio".
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 , el enhebrado de saltos , la eliminación de subexpresiones comunes , la programación de instrucciones , etc. Las optimizaciones RTL son de menor importancia con la adición de optimizaciones globales basadas en SSA en árboles GIMPLE , [65] ya que las optimizaciones RTL tienen un alcance mucho más limitado y tienen menos información de alto nivel.
El proyecto GCC incluye una implementación de la biblioteca estándar de C++ llamada libstdc++, [67] licenciada bajo la licencia GPLv3 con una excepción para vincular aplicaciones que no sean GPL cuando las fuentes se construyen con GCC. [68]
Otras características
Algunas características de GCC incluyen:
Optimización del tiempo de enlace
La optimización en tiempo de enlace optimiza los límites de los archivos de objetos para mejorar directamente el binario vinculado. La optimización en tiempo de enlace se basa en un archivo intermedio que contiene la serialización de alguna representación de Gimple incluida en el archivo de objetos. [ cita requerida ] El archivo se genera junto con el archivo de objetos durante la compilación de la fuente. Cada compilación de la fuente genera un archivo de objetos independiente y un archivo auxiliar en tiempo de enlace. Cuando los archivos de objetos están vinculados, el compilador se ejecuta nuevamente y utiliza los archivos auxiliares para optimizar el código en los archivos de objetos compilados por separado.
Complementos
Los complementos extienden el compilador GCC directamente. [69] Los complementos permiten que un compilador estándar se adapte a necesidades específicas mediante código externo cargado como complementos. Por ejemplo, los complementos pueden agregar, reemplazar o incluso eliminar pases intermedios que operan en representaciones de Gimple . [70] Ya se han publicado varios complementos de GCC, en particular:
El complemento de Python que se vincula con libpython y permite invocar scripts de Python arbitrarios desde dentro del compilador. El objetivo es permitir que los complementos de GCC se escriban en Python.
El lenguaje C++ tiene una propuesta activa para la memoria transaccional. Se puede habilitar en GCC 6 y versiones posteriores al compilar con -fgnu-tm. [8] [73]
Identificadores Unicode
Aunque el lenguaje C++ requiere compatibilidad con caracteres Unicode no ASCII en los identificadores , la característica solo se admite desde GCC 10. Al igual que con el manejo actual de literales de cadena, se supone que el archivo fuente está codificado en UTF-8 . La característica es opcional en C, pero también se ha puesto a disposición desde este cambio. [74] [75]
Extensiones C
GNU C extiende el lenguaje de programación C con varias características no estándar, incluidas funciones anidadas [76] y typeofexpresiones. [77]
Arquitecturas
Las principales familias de procesadores compatibles (y mejor probadas) son ARM de 64 y 32 bits, x86_64 de 64 y 32 bits y PowerPC y SPARC de x86 y 64 bits . [78]
Las familias de procesadores de destino de GCC a partir de la versión 11.1 incluyen: [79]
El compilador Java GCJ puede tener como objetivo una arquitectura de lenguaje de máquina nativo o el bytecode de Java de la máquina virtual Java . [82] Cuando se redirige GCC a una nueva plataforma, a menudo se utiliza el arranque . Motorola 68000, Zilog Z80 y otros procesadores también están incluidos en las versiones GCC desarrolladas para varias calculadoras gráficas programables de Texas Instruments, Hewlett Packard, Sharp y Casio. [83]
Licencia
GCC está licenciado bajo la Licencia Pública General GNU versión 3. [84] La excepción de tiempo de ejecución de GCC permite la compilación de programas propietarios (además de software libre) con encabezados y bibliotecas de tiempo de ejecución de GCC. Esto no afecta los términos de la licencia del código fuente de GCC. [85]
^ ab «GCC Releases». Proyecto GNU. Archivado desde el original el 4 de junio de 2023. Consultado el 24 de julio de 2020 .
↑ Jakub Jelínek (1 de agosto de 2024). "Lanzamiento de GCC 14.2" . Consultado el 1 de agosto de 2024 .
^ "Convenciones de codificación GCC - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 28 de mayo de 2023 . Consultado el 7 de febrero de 2022 .
^ ab Víctor Rodríguez (1 de octubre de 2019). «Cutting Edge Toolchain (Últimas características en GCC/GLIBC)». youtube.com . Linux Foundation. Archivado desde el original el 7 de noviembre de 2021 . Consultado el 19 de enero de 2021 .
^ "Excepción de la biblioteca de tiempo de ejecución de GCC". Archivado desde el original el 31 de marzo de 2023. Consultado el 24 de julio de 2020 .
^ GCC Rust, Rust GCC, 4 de junio de 2023, archivado del original el 6 de enero de 2023 , consultado el 4 de junio de 2023
^ "Lenguajes de programación soportados por GCC". Proyecto GNU. Archivado desde el original el 18 de enero de 2023. Consultado el 23 de junio de 2014 .
^ ab "GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Archivado desde el original el 22 de septiembre de 2016 . Consultado el 19 de septiembre de 2016 .
^ ab "OpenACC - GCC Wiki". gcc.gnu.org . Archivado desde el original el 1 de abril de 2015 . Consultado el 19 de septiembre de 2016 .
^ "El proyecto de infraestructura del compilador LLVM". llvm.org . Archivado desde el original el 18 de enero de 2023. Consultado el 24 de septiembre de 2021 .
^ "La purga de la GPLv3 de Apple". meta.ath0.com . 5 de febrero de 2012. Archivado desde el original el 18 de enero de 2023 . Consultado el 12 de enero de 2021 .
^ Linnemann, Reid (20 de junio de 2012). «Why Clang». Archivado desde el original el 18 de enero de 2023. Consultado el 12 de enero de 2021 .
^ "29 de agosto de 2007: Boletín informativo de la Fundación FreeBSD, 29 de agosto de 2007". 11 de octubre de 2007. Archivado desde el original el 11 de octubre de 2007. Consultado el 12 de enero de 2021 .
^ "Instalación de GCC: binarios - Proyecto GNU - Free Software Foundation (FSF)". gcc.gnu.org . Archivado desde el original el 5 de enero de 2021 . Consultado el 12 de enero de 2021 .
^ von Hagen, William (2006). La guía definitiva del CCG. Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN978-1-4302-0219-6. Archivado del original el 5 de abril de 2024 . Consultado el 25 de septiembre de 2020 . Entonces le escribió al autor de VUCK para preguntarle si GNU podía usarlo. Evidentemente, el desarrollador de VUCK no cooperó y respondió que la universidad era libre, pero que el compilador no.
^ abc Stallman, Richard (20 de septiembre de 2011). «Acerca del Proyecto GNU». El Proyecto GNU. Archivado desde el original el 9 de agosto de 2019. Consultado el 9 de octubre de 2011 .
^ Puzo, Jerome E., ed. (febrero de 1986). «Gnu's Zoo». Boletín de GNU . 1 (1). Free Software Foundation. Archivado desde el original el 23 de junio de 2015. Consultado el 11 de agosto de 2007 .
^ abcd von Hagen, William (2006). La guía definitiva del CCG. Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN978-1-4302-0219-6Archivado del original el 5 de abril de 2024 . Consultado el 25 de septiembre de 2020 .
^ Richard M. Stallman (reenviado por Leonard H. Tower Jr.) (22 de marzo de 1987). «Lanzamiento de prueba beta del compilador GNU C». Grupo de noticias : comp.lang.c. Archivado desde el original el 2 de junio de 2013. Consultado el 9 de octubre de 2011 .
^ Stallman, Richard M. (22 de junio de 2001) [Publicado por primera vez en 1988], "Contribuidores a GNU CC", Uso y portabilidad de la Colección de compiladores GNU (GCC) , Free Software Foundation, Inc., p. 7, archivado desde el original el 18 de enero de 2023 , consultado el 18 de junio de 2015 .
^ Salus, Peter H. (2005). «Capítulo 10. SUN y gcc». El demonio, el ñu y el pingüino . Groklaw . Archivado desde el original el 20 de junio de 2022. Consultado el 14 de septiembre de 2015 .
^ Garfinkel, Simson L. (6 de agosto de 1990). "Prepárese para el software GNU". Computerworld . pág. 102.
^ ab Henkel-Wallace, David (15 de agosto de 1997), Un nuevo proyecto de compilador para fusionar las bifurcaciones GCC existentes, archivado desde el original el 18 de enero de 2023 , consultado el 25 de mayo de 2012 .
^ "Breve historia del desarrollo de GCC". www.softpanorama.org . Archivado desde el original el 9 de noviembre de 2022 . Consultado el 24 de enero de 2021 .
^ "Historia - Wiki del CCG". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 28 de septiembre de 2020 .
^ "Comité directivo del GCC - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 25 de julio de 2016 .
^ "PATCH] Eliminar chill". gcc.gnu.org . Archivado desde el original el 20 de octubre de 2016 . Consultado el 29 de julio de 2010 .
^ "Cuadro de características de Fortran 2003 admitidas por GNU Fortran". GNU . Archivado desde el original el 18 de enero de 2023 . Consultado el 25 de junio de 2009 .
^ "Cuadro de características de Fortran 2008 admitidas por GNU Fortran". GNU . Archivado desde el original el 18 de enero de 2023 . Consultado el 25 de junio de 2009 .
^ "Serie de lanzamientos de GCC 4.8: cambios, nuevas características y correcciones - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 8 de diciembre de 2015 . Consultado el 17 de febrero de 2015 .
^ "Serie de lanzamiento de GCC 5: cambios, nuevas características y correcciones". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 13 de enero de 2022 .
^ "Serie de lanzamiento de GCC 8: cambios, nuevas características y correcciones". gcc.gnu.org . Archivado desde el original el 29 de noviembre de 2018 . Consultado el 13 de enero de 2022 .
^ "Proyecto de mejora de Symbian GCC". Archivado desde el original el 1 de agosto de 2014. Consultado el 8 de noviembre de 2007 .
^ "Paquetes de soporte de placas Linux". Archivado desde el original el 7 de junio de 2011 . Consultado el 24 de enero de 2021 .
^ "Configuración de gcc como compilador cruzado". ps2stuff . 8 de junio de 2002. Archivado desde el original el 11 de diciembre de 2008 . Consultado el 12 de diciembre de 2008 .
^ "CompileFarm - Wiki del CCG". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 19 de septiembre de 2016 .
^ "Guía de sh4 g++". Archivado desde el original el 20 de diciembre de 2002. Consultado el 12 de diciembre de 2008 .
^ "Proyecto de información sobre Linux". LINFO. Archivado desde el original el 3 de enero de 2023. Consultado el 27 de abril de 2010. GCC ha sido portado (es decir, modificado para funcionar en) más de 60 plataformas, lo que supone más que cualquier otro compilador.
^ "Serie de lanzamientos de GCC 9: cambios, nuevas características y correcciones - Proyecto GNU". Archivado desde el original el 19 de febrero de 2022 . Consultado el 7 de mayo de 2019 .
^ "El front-end del lenguaje D finalmente se fusionó con GCC 9 - Phoronix". phoronix.com . Archivado desde el original el 17 de mayo de 2022 . Consultado el 19 de enero de 2021 .
^ "Serie de lanzamientos de GCC 13: cambios, nuevas características y correcciones - Proyecto GNU". Archivado desde el original el 26 de mayo de 2023 . Consultado el 23 de junio de 2023 .
^ 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 desde el original el 19 de diciembre de 2022. Consultado el 19 de diciembre de 2022 .
^ ab "GCC Front Ends". gnu.org. Archivado desde el original el 18 de enero de 2023. Consultado el 25 de noviembre de 2011 .
^ "Serie de lanzamientos de GCC 5: cambios, nuevas características y correcciones - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 23 de abril de 2015 .
^ "Serie de lanzamientos de GCC 7". gnu.org. Archivado desde el original el 2 de septiembre de 2020. Consultado el 20 de marzo de 2018 .
^ "Compatibilidad de estándares C++ en GCC". Archivado desde el original el 20 de abril de 2022 . Consultado el 17 de mayo de 2021 .
^ "GCC UPC (GCC Unified Parallel C)". Intrepid Technology, Inc. 20 de febrero de 2006. Archivado desde el original el 11 de febrero de 2010. Consultado el 11 de marzo de 2009 .
^ "GCC Front-End para Rust". Archivado desde el original el 10 de enero de 2023 . Consultado el 6 de enero de 2023 .
^ "GCC Front-End para Rust (Github)". GitHub . 5 de enero de 2023. Archivado desde el original el 6 de enero de 2023 . Consultado el 6 de enero de 2023 .
^ Spengler, Brad (12 de enero de 2021). «Open Source Security, Inc. anuncia la financiación de GCC Front-End para Rust». Archivado desde el original el 25 de abril de 2021.
^ "Características de seguridad: comprobaciones del búfer de tiempo de compilación (FORTIFY_SOURCE)". fedoraproject.org. Archivado desde el original el 7 de enero de 2007. Consultado el 11 de marzo de 2009 .
^ "lenguajes utilizados para crear GCC". Archivado desde el original el 27 de mayo de 2008. Consultado el 14 de septiembre de 2008 .
^ "GCC Internals". GCC.org. Archivado desde el original el 18 de enero de 2023. Consultado el 1 de marzo de 2010 .
^ "Prerrequisitos para GCC - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 5 de septiembre de 2021 .
^ "GCC permite C++, hasta cierto punto". The H . 1 de junio de 2010. Archivado desde el original el 26 de septiembre de 2022 . Consultado el 9 de junio de 2010 .
^ "Re: ¿Esfuerzos para atraer más usuarios?". lists.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 24 de septiembre de 2021 .
^ "Serie de versiones GCC 4.8: cambios, nuevas funciones y correcciones". Archivado desde el original el 8 de diciembre de 2015 . Consultado el 4 de octubre de 2013 .
^ "bootstrap: requisito de actualización para C++11". GitHub . Archivado desde el original el 29 de septiembre de 2022 . Consultado el 18 de mayo de 2020 .
^ "Serie de lanzamientos de GCC 3.4: cambios, nuevas características y correcciones - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 25 de julio de 2016 .
^ "Serie de lanzamientos de GCC 4.1: cambios, nuevas características y correcciones - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 25 de julio de 2016 .
^ "GENERIC (GNU Compiler Collection (GCC) Internals)" (inglés). gcc.gnu.org . Archivado desde el original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
^ "GIMPLE (GNU Compiler Collection (GCC) Internals)" (en inglés). gcc.gnu.org . Archivado desde el original el 18 de enero de 2023. Consultado el 25 de julio de 2016 .
^ "McCAT". Archivado desde el original el 12 de agosto de 2004. Consultado el 14 de septiembre de 2017 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
^ "Página de inicio de Laurie Hendren". www.sable.mcgill.ca . Archivado desde el original el 27 de septiembre de 2022. Consultado el 20 de julio de 2009 .
^ Novillo, Diego (diciembre de 2004). "From Source to Binary: The Inner Workings of GCC". Revista Red Hat . Archivado desde el original el 1 de abril de 2009.
^ "Instalación de GCC: compilación - Proyecto GNU". gcc.gnu.org . Archivado desde el original el 22 de agosto de 2023 . Consultado el 25 de julio de 2016 .
^ "La biblioteca C++ de GNU". Proyecto GNU. Archivado desde el original el 25 de diciembre de 2022. Consultado el 21 de febrero de 2021 .
^ "Licencia". Proyecto GNU. Archivado desde el original el 18 de enero de 2023. Consultado el 21 de febrero de 2021 .
^ "Plugins". Documentación en línea de GCC . Archivado desde el original el 30 de abril de 2013. Consultado el 8 de julio de 2013 .
^ Starynkevitch, Basile. "Complementos de GCC a través del ejemplo MELT" (PDF) . Archivado (PDF) del original el 13 de abril de 2014. Consultado el 10 de abril de 2014 .
^ "Acerca de GCC MELT". Archivado desde el original el 4 de julio de 2013 . Consultado el 8 de julio de 2013 .
^ "GCC desenchufado [LWN.net]". lwn.net . Archivado desde el original el 9 de noviembre de 2020 . Consultado el 28 de marzo de 2021 .
^ "TransactionalMemory - Wiki de GCC". gcc.gnu.org . Archivado desde el original el 19 de agosto de 2016 . Consultado el 19 de septiembre de 2016 .
^ "Lewis Hyatt - [PATCH] wwwdocs: Se agregó soporte de documentos para identificadores extendidos a GCC". gcc.gnu.org . Archivado desde el original el 27 de marzo de 2020 . Consultado el 27 de marzo de 2020 .
^ "Recomendaciones para caracteres de identificación extendidos para C y C++". www.open-std.org . Archivado desde el original el 30 de septiembre de 2020 . Consultado el 27 de marzo de 2020 .
^ "Extensiones de C (utilizando la colección de compiladores GNU (GCC))". gcc.gnu.org . Archivado desde el original el 12 de enero de 2022 . Consultado el 12 de enero de 2022 .
^ "Typeof - Uso de la colección de compiladores GNU (GCC)". gcc.gnu.org . Archivado desde el original el 13 de enero de 2022 . Consultado el 12 de enero de 2022 .
^ "Criterios de publicación de GCC 12". gcc.gnu.org . 26 de octubre de 2022. Archivado desde el original el 27 de enero de 2023 . Consultado el 27 de enero de 2023 .
^ "Resumen de opciones (utilizando la colección de compiladores GNU (GCC))". gcc.gnu.org . Archivado desde el original el 18 de enero de 2023 . Consultado el 21 de agosto de 2020 .
^ "Wiki del Proyecto Hexagon". Archivado desde el original el 23 de marzo de 2012. Consultado el 19 de mayo de 2011 .
^ "Archivo de código de Google: almacenamiento a largo plazo para el alojamiento de proyectos de código de Google". code.google.com . Archivado desde el original el 25 de septiembre de 2022 . Consultado el 24 de septiembre de 2021 .
^ "El compilador GNU para el lenguaje de programación Java". Archivado desde el original el 9 de mayo de 2007. Consultado el 22 de abril de 2010 .
^ calculadoras gráficas#programación
^ "Uso de la colección de compiladores GNU". gnu.org . Archivado desde el original el 16 de noviembre de 2023 . Consultado el 5 de noviembre de 2019 .
^ "Excepción de tiempo de ejecución de GCC". FSF. Archivado desde el original el 16 de abril de 2014. Consultado el 10 de abril de 2014 .
Lectura adicional
Uso de la colección de compiladores GNU (GCC) , Free Software Foundation, 2008.
Componentes internos de la Colección de compiladores GNU (GCC) , 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 .
Enlaces externos
Wikimedia Commons tiene medios relacionados con GCC.
Wikilibros tiene un libro sobre el tema: GNU C Compiler Internals
Oficial
Sitio web oficial
Cronología de la publicación de GCC
Plan de desarrollo del CCG
Otro
Recopilación de documentos sobre la arquitectura y los componentes internos de GCC 4.0.2 en el IIT Bombay
Kerner, Sean Michael (2 de marzo de 2006). "El nuevo GCC apuesta por la optimización". internetnews.com
Kerner, Sean Michael (22 de abril de 2005). "Open Source GCC 4.0: Older, Faster". internetnews.com. Archivado desde el 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 cubre el desarrollo de GCC durante la década de 1990, con 30 informes mensuales en la sección "Ingeniería interna de Cygnus" cerca del final
Anuncio de EGCS 1.0
Lista de características de EGCS 1.0
Fear of Forking, un ensayo de Rick Moen que registra siete bifurcaciones conocidas, incluida la de GCC/EGCS