Colección del compilador GNU


De Wikipedia, la enciclopedia libre
  (Redirigido desde el sistema de compilación GNU mejorado )
Saltar a navegación Saltar a búsqueda

La colección de compiladores de GNU ( GCC ) es un compilador de optimización producida por el Proyecto GNU apoyar diversos lenguajes de programación , arquitecturas de hardware y sistemas operativos . La Free Software Foundation (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 y el compilador estándar para la mayoría de los proyectos relacionados con GNU y el kernel de Linux.. Con aproximadamente 15 millones de líneas de código en 2019, GCC es uno de los programas gratuitos más grandes que existen. [5] Ha jugado un papel importante en el crecimiento del software libre , como herramienta y como ejemplo.

Cuando se publicó por primera vez en 1987 por Richard Stallman , GCC 1.0 fue nombrado el compilador de C de GNU , ya que sólo maneja el lenguaje de programación C . [1] Se amplió para compilar C ++ en diciembre de ese año. Los extremos delanteros se desarrollaron más tarde para Objective-C , Objective-C ++ , Fortran , Ada , D y Go , entre otros. [7] Las especificaciones OpenMP y OpenACC también son compatibles con los compiladores C y C ++. [8] [9]

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

Además de ser el compilador oficial del sistema operativo GNU , GCC ha sido adoptado como el compilador estándar por muchos otros sistemas operativos de computadora 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 , OpenBSD y Apple macOS se han movido 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 , autor del Amsterdam Compiler Kit (también conocido como Free University Compiler Kit ) para usar ese software para GNU. Cuando Tanenbaum le advirtió que el compilador no era gratuito y que solo la universidad era gratuita, 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 ayuda de Len Tower y otros. [dieciséis][17] Stallman escribió una nueva interfaz C para el compilador de Livermore, pero luego se dio cuenta de que requería megabytes de espacio de pila, una imposibilidad en unsistema 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 usó la interfaz C que había escrito. [16] [18]

GCC se lanzó por primera vez el 22 de marzo de 1987, disponible por FTP del MIT . [19] Stallman fue incluido como autor, pero citó a otros por sus contribuciones, incluidos Jack Davidson y Christopher Fraser por la idea de usar RTL como lenguaje intermedio, Paul Rubin por escribir la mayor parte del preprocesador y Leonard Tower por "partes del analizador sintáctico, generador de RTL, definiciones de RTL y de la descripción de la máquina Vax ". [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éndolos 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] Si bien Stallman consideraba a GNU Emacs como su proyecto principal, en 1990, GCC soportaba trece arquitecturas de computadora, estaba superando a varios compiladores de proveedores y varias empresas lo usaban comercialmente. [22]

Horquilla EGCS

Como GCC tenía la licencia GPL, los programadores que deseaban trabajar en otras direcciones, en particular aquellos que escriben interfaces para lenguajes distintos de C, tenían la libertad de desarrollar su propia bifurcación del compilador, siempre que cumplieran los términos de la GPL, incluidos sus requisitos para distribuir el código fuente. codigo . Sin embargo, varias bifurcaciones demostraron ser ineficientes y difíciles de manejar, y la dificultad para 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 funciones. [23] La FSF mantuvo un control tan estrecho sobre lo que se agregó a la versión oficial de GCC 2.x (desarrollado desde 1992) que GCC se utilizó como un ejemplo del modelo de desarrollo "catedral" en el ensayo de Eric S. RaymondLa Catedral y el Bazar .

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

Si bien ambos proyectos siguieron de cerca los cambios del otro, el desarrollo de EGCS demostró ser 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 nombró al proyecto EGCS como el GCC. mantenedores en abril de 1999. Con el lanzamiento de GCC 2.95 en julio de 1999, los dos proyectos volvieron a unirse. [25] [18] GCC ha sido mantenido desde entonces por un grupo variado de programadores de todo el mundo bajo la dirección de un comité directivo. [26]

GCC 3 (2002) eliminó un front-end para CHILL debido a la falta de mantenimiento. [27]

Antes de la versión 4.0, el front-end de Fortran g77solo era compatible con FORTRAN 77 , pero luego se abandonó a favor del nuevo front-end de GNU Fortran que es compatible con Fortran 95 y gran parte de Fortran 2003 y Fortran 2008 también. [28] [29]

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

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

GCC se ha adaptado a una amplia variedad de arquitecturas de conjuntos de instrucciones y se ha implementado ampliamente como herramienta en el desarrollo de software tanto gratuito como propietario . GCC también está disponible para muchos sistemas embebidos , incluidos los chips Symbian (llamado gcce ), [32] basados ​​en ARM y Power ISA . [33] El compilador puede apuntar 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 tipos de procesadores y sistemas operativos que cualquier otro compilador. [37] [se necesita una mejor fuente ]

Idiomas admitidos

En mayo de 2.021 mil , la reciente 11,1 liberación de GCC incluye extremos delanteros de los C ( gcc), C ++ ( g++), Objective-C , Fortran ( gfortran), Ada ( GNAT ), Ir ( gccgo) y D ( gdc, desde 9.1) [38] programación idiomas, [39] con las extensiones de lenguaje paralelo OpenMP y OpenACC soportadas desde GCC 5.1. [9] [40] Las versiones anteriores a GCC 7 también admitían Java ( gcj), lo que permitía la compilación de Java en código de máquina nativo.[41]

Con respecto al soporte de versiones de idiomas para C ++ y C, desde GCC 11.1 el destino 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 el próximo C ++ 23 . [42]

Existen interfaces de terceros para muchos lenguajes, como Pascal ( gpc), Modula-2 , Modula-3 , PL / I y VHDL ( ghdl). [39] Existen algunas ramas experimentales para soportar lenguajes adicionales, como el compilador GCC UPC para Unified Parallel C [43] o Rust . [44]

Diseño

Descripción general de la canalización de compilación extendida de GCC, incluidos programas especializados como el preprocesador , ensamblador y enlazador .
GCC sigue la arquitectura de 3 etapas típica de los compiladores de múltiples idiomas y múltiples CPU . Todos los árboles de programa se convierten en una representación abstracta común en el "extremo intermedio", lo que permite que todos los lenguajes compartan la optimización de código y las facilidades de generación de código binario .

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 real, ejecuta el ensamblador en la salida y luego, opcionalmente, ejecuta el vinculador para producir un binario ejecutable completo .

Cada uno de los compiladores de lenguajes es un programa independiente que lee el código fuente y genera código de máquina . Todos tienen una estructura interna común. Una interfaz por idioma analiza el código fuente en ese idioma y produce un árbol de sintaxis abstracto ("árbol" para abreviar).

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

GCC se escribió principalmente en C, excepto por partes de la interfaz Ada . La distribución incluye las bibliotecas estándar para Ada y C ++ cuyo código está escrito principalmente en esos lenguajes. [46] 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ñado principalmente para manejar operaciones aritméticas que el procesador de destino no puede realizar directamente. [47]

GCC usa muchas herramientas estándar en su construcción, 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 . [48]

En mayo de 2010, el comité directivo de GCC decidió permitir el uso de un compilador de C ++ para compilar GCC. [49] El compilador estaba destinado a estar 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 ++. [50]

En agosto de 2012, el comité directivo de GCC anunció que GCC ahora usa C ++ como lenguaje de implementación. [51] Esto significa que para construir GCC a partir de fuentes, se requiere un compilador C ++ que comprenda el estándar ISO / IEC C ++ 03 .

El 18 de mayo de 2020, GCC se alejó del estándar ISO / IEC C ++ 03 al estándar ISO / IEC C ++ 11 (es decir, necesario para compilar, arrancar, el compilador en sí; de forma predeterminada, sin embargo, compila versiones posteriores de C ++). [52]

Frente termina

Las interfaces consisten en preprocesamiento , análisis léxico , análisis sintáctico (parsing) y análisis semántico. Los objetivos de las interfaces del compilador son aceptar o rechazar programas candidatos de acuerdo con la gramática y la semántica del lenguaje, identificar errores y manejar representaciones de programas válidas para etapas posteriores del compilador. Este ejemplo muestra los pasos analizadoras y analizador realizadas para un simple programa escrito en C .

Cada interfaz utiliza un analizador para producir el árbol de sintaxis abstracto de un archivo fuente determinado . 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 sintácticos LALR generados con Bison , pero gradualmente cambió a analizadores sintácticos de descenso recursivo escritos a mano para C ++ en 2004, [53] y para C y Objective-C en 2006. [54] A partir de 2021, todas las interfaces usan hand analizadores sintácticos de descendencia recursiva escritos.

Hasta GCC 4.0, la representación en árbol del programa no era completamente independiente del procesador al que se dirigía. El significado de un árbol era algo diferente para las diferentes interfaces de lenguaje, y las interfaces 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 Java de GCC 3.x. GIMPLE es un GENÉRICO simplificado, en el que varias construcciones se reducen a múltiples instrucciones GIMPLE. El C , C ++ y Javalos extremos frontales producen GENÉRICO directamente en el extremo frontal. En cambio, otras interfaces tienen diferentes representaciones intermedias después de analizarlas y convertirlas en GENERIC.

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

GENÉRICO y GIMPLE

GENERIC es un lenguaje de representación intermedio que se utiliza como un "extremo intermedio" al compilar el código fuente en binarios ejecutables . Un subconjunto, llamado GIMPLE , es el objetivo de todas las interfaces de GCC.

La etapa intermedia de GCC hace todo el análisis y optimización del código , trabajando independientemente tanto del lenguaje compilado como de la arquitectura de destino, comenzando desde la representación GENERIC [55] y expandiéndola para registrar el lenguaje de transferencia (RTL). La representación GENÉRICA contiene solo el subconjunto de las construcciones de programación imperativas optimizadas por el extremo medio.

Al transformar el código fuente en GIMPLE, [56] 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 [57] por Laurie J. Hendren [58] para simplificar el análisis y 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 tanto, un nombre común, aunque algo contradictorio, para esta parte del compilador es el "extremo intermedio".

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 optimización de bucle , subprocesos de salto , eliminación de subexpresiones comunes , 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 , [59] ya que las optimizaciones RTL tienen un alcance mucho más limitado y tienen menos información de alto nivel.

Algunas de estas optimizaciones realizadas en este nivel incluyen la eliminación muertos código , la eliminación de redundancia parcial , de numeración global de valor , escasa propagación constante condicional , 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 . También es posible la optimización guiada por perfiles . [60]

Back end

El back-end de GCC se especifica en parte mediante macros de preprocesador y funciones específicas de una arquitectura de destino, por ejemplo, para definir su endianidad , tamaño de palabra y convenciones de llamada . La parte frontal del back-end los usa para ayudar a decidir la generación de RTL, por lo que aunque el RTL de GCC es nominalmente independiente del procesador, la secuencia inicial de instrucciones abstractas ya está adaptada al objetivo. En cualquier momento, las instrucciones RTL reales que forman la representación del programa deben cumplir con la descripción de la máquina de la arquitectura de destino.

El archivo de descripción de la máquina contiene patrones RTL, junto con restricciones de operandos y fragmentos de código para generar el ensamblaje final. Las restricciones indican que un patrón RTL en particular podría solo aplicarse (por ejemplo) a ciertos registros de hardware, o (por ejemplo) permitir compensaciones de operandos inmediatos de solo un tamaño limitado (por ejemplo, 12, 16, 24, ... compensaciones de bits, etc. ). Durante la generación de RTL, se comprueban las restricciones para la arquitectura de destino dada. Para emitir un fragmento dado de RTL, debe coincidir con uno (o más) de los patrones RTL en el archivo de descripción de la máquina y satisfacer las restricciones para ese patrón; de lo contrario, sería imposible convertir el RTL final en código de máquina.

Hacia el final de la compilación, el RTL válido se reduce a una forma estricta en la que cada instrucción se refiere a registros de máquina reales y un patrón del archivo de descripción de máquina del objetivo. Formar RTL estricto es una tarea complicada; un paso importante es la asignación de registros , donde se eligen registros de hardware reales para reemplazar los pseudo-registros asignados inicialmente. A esto le sigue una fase de "recarga"; cualquier pseudo-registro que no fue asignado a un registro de hardware real se 'derrama' a la pila, y se genera RTL para realizar este derrame. Del mismo modo, las compensaciones que son demasiado grandes para caber en una instrucción real deben dividirse y reemplazarse por secuencias RTL que obedecerán las restricciones de compensación.

En la fase final, el código de la máquina se construye llamando a un pequeño fragmento de código, asociado con cada patrón, para generar las instrucciones reales a partir del conjunto de instrucciones del objetivo , utilizando los registros finales, compensaciones y direcciones elegidas durante la fase de recarga. El fragmento de generación de ensamblado puede ser solo una cadena, en cuyo caso se realiza una simple sustitución de cadena de los registros, compensaciones y / o direcciones en la cadena. El fragmento de generación de ensamblado también puede ser un bloque corto de código C, que realiza un trabajo adicional, pero finalmente devuelve una cadena que contiene el código ensamblador válido.

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

El proyecto GCC incluye una implementación de la biblioteca estándar de C ++ llamada libstdc ++, [61] licenciada bajo la licencia GPLv3 con una excepción para vincular aplicaciones de código cerrado cuando las fuentes se compilan con GCC. [62] La versión actual es la 11.

Otras características

Algunas características de GCC incluyen:

Optimización del tiempo de enlace
La optimización del tiempo de enlace optimiza los límites de los archivos de objetos para mejorar directamente el binario enlazado. La optimización del 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 objeto. [ cita requerida ] El archivo se genera junto con el archivo objeto durante la compilación de la fuente. Cada compilación de origen genera un archivo de objeto y un archivo de ayuda de tiempo de enlace separados. Cuando los archivos de objeto están vinculados, el compilador se ejecuta de nuevo y utiliza los archivos de ayuda para optimizar el código en los archivos de objeto compilados por separado.
Complementos
Los complementos amplían el compilador GCC directamente. [63] Los complementos permiten que un compilador de existencias se adapte a necesidades específicas mediante un código externo cargado como complementos. Por ejemplo, los complementos pueden agregar, reemplazar o incluso eliminar pases intermedios que operan en representaciones de Gimple . [64] 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 el interior del compilador. El objetivo es permitir que los complementos de GCC se escriban en Python.
  • El complemento MELT proporciona un lenguaje similar a Lisp de alto nivel para extender GCC. [sesenta y cinco]
El soporte de complementos fue una vez un tema polémico en 2007. [66]
Memoria transaccional C ++
El lenguaje C ++ tiene una propuesta activa de memoria transaccional. Se puede habilitar en GCC 6 y versiones posteriores al compilar con -fgnu-tm. [8] [67]
Identificadores Unicode
Aunque el lenguaje C ++ requiere soporte para caracteres Unicode no ASCII en identificadores , la característica solo se admite desde GCC 10. Al igual que con el manejo existente de cadenas literales, se supone que el archivo fuente está codificado en UTF-8 . La función es opcional en C, pero también está disponible desde este cambio. [68] [69]

Arquitecturas

GCC compilando Hello World en Windows

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

  • Alfa
  • BRAZO
  • AVR
  • Blackfin
  • Epifanía (CGC 4.8)
  • H8 / 300
  • HC12
  • IA-32 ( x86 )
  • IA-64 (Intel Itanium)
  • MIPS
  • Motorola 68000
  • PA-RISC
  • PDP-11
  • PowerPC
  • R8C / M16C / M32C
  • SPARC
  • SuperH
  • Sistema / 390 / zSeries
  • VAX
  • x86-64
  • GPU Nvidia
  • Nvidia PTX
  • AArch64
  • RISC-V
  • MSP430
  • eBPF

Los procesadores de destino menos conocidos admitidos en la versión estándar incluyen:

  • 68HC11
  • A29K
  • CR16
  • C6x
  • D30V
  • DSP16xx
  • CRIS ETRAX
  • FR-30
  • FR-V
  • Intel i960
  • IP2000
  • M32R
  • MCORE
  • MIL-STD-1750A
  • MMIX
  • MN10200
  • MN10300
  • Motorola 88000
  • NS32K
  • IBM ROMP
  • RL78
  • Tormentoso16
  • V850
  • Xtensa

Los procesadores adicionales han sido compatibles con versiones de GCC mantenidas por separado de la versión FSF:

  • Cortus APS3
  • ARCO
  • AVR32
  • C166 y C167
  • D10V
  • EISC
  • eSi-RISC
  • Hexágono [71]
  • LatticeMico32
  • LatticeMico8
  • MeP
  • MicroBlaze
  • Motorola 6809
  • MSP430
  • Arquitectura NEC SX [72]
  • Nios II y Nios
  • OpenRISC
  • PDP-10
  • PIC24 / dsPIC
  • PIC32
  • Hélice
  • Saturno (HP48XGCC)
  • Sistema / 370
  • TIGCC ( variante m68k )
  • TMS9900
  • TriCore
  • Z8000
  • ZPU

El CGPJ compilador de Java pueden dirigirse a cualquiera de una arquitectura de lenguaje de máquina nativo o la máquina virtual de Java 's Java bytecode . [73] Cuando se reorienta GCC a una nueva plataforma, a menudo se usa bootstrapping . Motorola 68000, Zilog Z80 y otros procesadores también están incluidos en las versiones de GCC desarrolladas para varias calculadoras gráficas programables de Texas Instruments, Hewlett Packard, Sharp y Casio. [74]

Licencia

GCC tiene la licencia GNU General Public License versión 3. [75] La excepción de tiempo de ejecución de GCC permite la compilación de programas propietarios (además del software libre) con GCC. Esto no afecta los términos de licencia del código fuente de GCC. [76]

Ver también

  • Lista de compiladores
  • MinGW
  • LLVM / Clang

Referencias

  1. ^ a b "Lanzamientos de GCC" . Proyecto GNU . Consultado el 24 de julio de 2020 .
  2. ^ "GCC 11 Release Series - Proyecto GNU - Free Software Foundation (FSF)" . gcc.gnu.org . Consultado el 28 de julio de 2021 .
  3. ^ "GCC 11.2 Release Candidate disponible" . Consultado el 21 de julio de 2021 .
  4. ^ Proyecto GNU (15 de octubre de 2020). "Convenciones de codificación GCC: convenciones de lenguaje C y C ++" . gcc.gnu.org . Fundación de Software Libre . Consultado el 8 de enero de 2021 .
  5. ↑ a b Víctor Rodríguez (1 de octubre de 2019). "Cadena de herramientas de vanguardia (características más recientes en GCC / GLIBC)" . youtube.com . Fundación Linux . Consultado el 19 de enero de 2021 .
  6. ^ "Excepción de biblioteca en tiempo de ejecución de GCC" . Consultado el 24 de julio de 2020 .
  7. ^ "Lenguajes de programación compatibles con GCC" . Proyecto GNU . Consultado el 23 de junio de 2014 .
  8. ^ a b "Serie de versiones GCC 6" .
  9. ^ a b "OpenACC" .
  10. ^ http://llvm.org/Users.html
  11. ^ "Purga de GPLv3 de Apple" . meta.ath0.com . Consultado el 12 de enero de 2021 .
  12. ^ Linnemann, Reid (20 de junio de 2012). "Por qué Clang" . Consultado el 12 de enero de 2021 .
  13. ^ "29 de agosto de 2007: Boletín 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 .
  14. ^ "Instalación de GCC: Binarios - Proyecto GNU - Free Software Foundation (FSF)" . gcc.gnu.org . Consultado el 12 de enero de 2021 .
  15. von Hagen, William (2006). La guía definitiva de GCC . Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN 978-1-4302-0219-6. Así que le escribió al autor de VUCK preguntando si GNU podría usarlo. Evidentemente, el desarrollador de VUCK no se mostró dispuesto a cooperar, respondiendo que la universidad era gratuita pero que el compilador no.
  16. ↑ a b c Stallman, Richard (20 de septiembre de 2011). "Sobre el proyecto GNU" . El Proyecto GNU . Consultado el 9 de octubre de 2011 .
  17. ^ Puzo, Jerome E., ed. (Febrero de 1986). "Zoológico de GNU" . Boletín de GNU . Fundación de Software Libre. 1 (1) . Consultado el 11 de agosto de 2007 .
  18. ↑ a b c d von Hagen, William (2006). La guía definitiva de GCC . Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN 978-1-4302-0219-6.
  19. ^ Richard M. Stallman (reenviado por Leonard H. Tower Jr.) (22 de marzo de 1987). "Versión de prueba beta del compilador GNU C" . Grupo de noticiascomp.lang.c . Consultado el 9 de octubre de 2011 .
  20. ^ Stallman, Richard M. (22 de junio de 2001) [Publicado por primera vez en 1988], "Colaboradores de GNU CC" , Uso y adaptación de la colección de compiladores GNU (GCC) , Free Software Foundation, Inc., p. 7 , consultado el 18 de junio de 2015 .
  21. ^ Salus, Peter H. (2005). "Capítulo 10. SUN y gcc" . El demonio, el ñu y el pingüino . Groklaw .
  22. ^ Garfinkel, Simson L. (6 de agosto de 1990). "Prepárate para el software GNU" . Computerworld . pag. 102.
  23. ↑ a b Henkel-Wallace, David (15 de agosto de 1997), Un nuevo proyecto de compilador para fusionar las bifurcaciones GCC existentes , obtenido el 25 de mayo de 2012 .
  24. ^ "La breve historia del desarrollo de GCC" . www.softpanorama.org . Consultado el 24 de enero de 2021 .
  25. ^ "Historia - Wiki de GCC" . gcc.gnu.org . Consultado el 28 de septiembre de 2020 .
  26. ^ "Comité directivo del CCG" .
  27. ^ "PATCH] Eliminar frío" . gcc.gnu.org . Consultado el 29 de julio de 2010 .
  28. ^ "Gráfico de características de Fortran 2003 compatibles con GNU Fortran" . GNU . Consultado el 25 de junio de 2009 .
  29. ^ "Gráfico de características de Fortran 2008 compatibles con GNU Fortran" . GNU . Consultado el 25 de junio de 2009 .
  30. ^ "Serie de versiones GCC 4.8: cambios, nuevas funciones y correcciones" .
  31. ^ "Serie de lanzamiento de GCC 9" .
  32. ^ "Proyecto de mejora de Symbian GCC" . Consultado el 8 de noviembre de 2007 .
  33. ^ "Paquetes de soporte de placa de Linux" . Archivado desde el original el 7 de junio de 2011 . Consultado el 24 de enero de 2021 .
  34. ^ "configurar gcc como un 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 .
  35. ^ https://gcc.gnu.org/wiki/CompileFarm
  36. ^ "guía sh4 g ++" . Archivado desde el original el 20 de diciembre de 2002 . Consultado el 12 de diciembre de 2008 .
  37. ^ "Proyecto de información de Linux" . LINFO . Consultado el 27 de abril de 2010 . El GCC se ha portado (es decir, modificado para ejecutarse en) más de 60 plataformas, lo que es más que para cualquier otro compilador.[ fuente autoeditada? ]
  38. ^ "La interfaz de usuario del lenguaje D finalmente se fusionó en GCC 9 - Phoronix" . phoronix.com . Consultado el 19 de enero de 2021 .
  39. ^ a b "Interfaces GCC" . gnu.org . Consultado el 25 de noviembre de 2011 .
  40. ^ "Serie de lanzamiento de GCC 5" .
  41. ^ "Serie de lanzamiento de GCC 7" . gnu.org . Consultado el 20 de marzo de 2018 .
  42. ^ "Soporte de estándares C ++ en GCC" . Consultado el 17 de mayo de 2021 .
  43. ^ "GCC UPC (GCC Unified Parallel C)" . Intrepid Technology, Inc. 20 de febrero de 2006 . Consultado el 11 de marzo de 2009 .
  44. ^ Spengler, Brad (12 de enero de 2021). "Open Source Security, Inc. anuncia financiación de GCC Front-End para Rust" .
  45. ^ "Funciones de seguridad: compilar comprobaciones de búfer de tiempo (FORTIFY_SOURCE)" . fedoraproject.org . Consultado el 11 de marzo de 2009 .
  46. ^ "idiomas utilizados para hacer GCC" .
  47. ^ "Internos de GCC" . GCC.org . Consultado el 1 de marzo de 2010 .
  48. ^ "Requisitos previos para GCC - Proyecto GNU" . gcc.gnu.org . Consultado el 5 de septiembre de 2021 .
  49. ^ "GCC permite C ++ - hasta cierto punto" . El H . 1 de junio de 2010.
  50. ^ "Un correo electrónico de Richard Stallman en emacs-devel" .
  51. ^ "Serie de versiones GCC 4.8: cambios, nuevas funciones y correcciones" . Consultado el 4 de octubre de 2013 .
  52. ^ "bootstrap: Requisito de actualización a C ++ 11" . Consultado el 18 de mayo de 2020 .
  53. ^ "Cambios, nuevas funciones y correcciones de la serie de versiones GCC 3.4" .
  54. ^ "Cambios, nuevas funciones y correcciones de la serie de versiones GCC 4.1" .
  55. ^ "GENÉRICO en los componentes internos de la colección del compilador GNU" .
  56. ^ "GIMPLE en componentes internos de la colección del compilador GNU" .
  57. ^ "McCAT" . Archivado desde el original el 12 de agosto de 2004 . Consultado el 14 de septiembre de 2017 .CS1 maint: bot: estado de URL original desconocido ( enlace )
  58. ^ "Laurie J. Hendren" .
  59. ^ Novillo, Diego (diciembre de 2004). "De fuente a binario: el funcionamiento interno de GCC" . Revista Red Hat . Archivado desde el original el 1 de abril de 2009.
  60. ^ "Aquí se demuestra la optimización guiada por perfiles" .
  61. ^ "La biblioteca GNU C ++" . Proyecto GNU . Consultado el 21 de febrero de 2021 .
  62. ^ "Licencia" . Proyecto GNU . Consultado el 21 de febrero de 2021 .
  63. ^ "Complementos" . Documentación en línea de GCC . Consultado el 8 de julio de 2013 .
  64. ^ Starynkevitch, Basile. "Complementos de GCC a través del ejemplo MELT" (PDF) . Consultado el 10 de abril de 2014 .
  65. ^ "Acerca de GCC MELT" . Archivado desde el original el 4 de julio de 2013 . Consultado el 8 de julio de 2013 .
  66. ^ "GCC desconectado [LWN.net]" . lwn.net .
  67. ^ "Memoria transaccional en GCC" .
  68. ^ "Lewis Hyatt - [PATCH] wwwdocs: soporte de documentos para identificadores extendidos agregados a GCC" . gcc.gnu.org . Consultado el 27 de marzo de 2020 .
  69. ^ "Recomendaciones para caracteres identificadores extendidos para C y C ++" . www.open-std.org . Consultado el 27 de marzo de 2020 .
  70. ^ "Resumen de opciones (usando la colección de compiladores GNU (GCC))" . gcc.gnu.org . Consultado el 21 de agosto de 2020 .
  71. ^ "Wiki de Hexagon Project" .
  72. ^ "sx-gcc: puerto gcc a cpu de vector nec sx" .
  73. ^ "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 .
  74. ^ calculadoras gráficas # programación
  75. ^ "Uso de la colección de compiladores GNU" . gnu.org . Consultado el 5 de noviembre de 2019 .
  76. ^ "Excepción de tiempo de ejecución de GCC" . FSF . Consultado el 10 de abril de 2014 .

Otras lecturas

  • Usando 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.
  • Una introducción a GCC , Network Theory Ltd., 2004 (revisada en agosto de 2005). ISBN 0-9541617-9-3 . 
  • Arthur Griffith, GCC: La referencia completa . McGrawHill / Osborne, 2002. ISBN 0-07-222405-3 . 

enlaces externos

Oficial

  • Página web oficial
  • Cronograma de lanzamiento de GCC
  • Plan de desarrollo de GCC

Otro

  • Colección de arquitectura GCC 4.0.2 y documentos internos en IIT Bombay
  • Kerner, Sean Michael (2 de marzo de 2006). "Nuevo GCC pesado en optimización" . internetnews.com
  • Kerner, Sean Michael (22 de abril de 2005). "Open Source GCC 4.0: más antiguo, más rápido" . internetnews.com
  • From Source to Binary: The Inner Workings of GCC , por Diego Novillo, Red Hat Magazine , diciembre de 2004
  • Un documento de 2003 sobre GENÉRICO y GIMPLE
  • Marketing Cygnus Support , un ensayo que cubre el desarrollo de GCC para 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
  • Fear of Forking , un ensayo de Rick Moen que registra siete bifurcaciones conocidas, incluida la de GCC / EGCS
Obtenido de " https://en.wikipedia.org/w/index.php?title=GNU_Compiler_Collection&oldid=1045997661#egcs "