stringtranslate.com

Colección de compiladores GNU

La Colección de Compiladores GNU ( GCC ) es un compilador de optimización producido por el Proyecto GNU que admite varios 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. [4] Ha jugado un papel importante en el crecimiento del software libre , como herramienta y como ejemplo.

Cuando Richard Stallman lo lanzó por primera vez en 1987 , GCC 1.0 fue nombrado compilador GNU C ya que sólo manejaba el lenguaje de programación C. [1] Se amplió para compilar C++ en diciembre de ese año. Posteriormente se desarrollaron interfaces para Objective-C , Objective-C++ , Fortran , Ada , D , Go y Rust , [6] 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 utiliza ampliamente como herramienta en el desarrollo de software tanto libre como propietario . GCC también está disponible para muchos sistemas integrados , incluidos los chips basados ​​en ARM y Power ISA .

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 , incluida 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 trasladado al compilador Clang , [10] en gran parte debido a motivos 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 iniciar 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 sólo la universidad era libre, 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 la ayuda de Len Tower y otros. [16] [17] Stallman escribió una nueva interfaz C para el compilador Livermore, pero luego se dio cuenta de que requería megabytes de espacio de pila, algo imposible en un sistema Unix 68000 con solo 64 KB, y concluyó que tendría que escribir una nueva interfaz. compilador desde cero. [16] Ninguno de los códigos del compilador Pastel terminó en GCC, aunque Stallman sí usó la interfaz C que había escrito. [16] [18]

GCC se publicó por primera vez el 22 de marzo de 1987 y está disponible por FTP desde el MIT . [19] Stallman figuraba como autor, pero citó a otros por sus contribuciones, incluido 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 usando 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 anterior. paquete, 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 admitía trece arquitecturas informáticas, superaba a varios compiladores de proveedores y era utilizado comercialmente por varias empresas. [22]

horquilla EGCS

Como GCC tenía licencia GPL, los programadores que deseaban trabajar en otras direcciones (particularmente 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. código . Sin embargo, múltiples bifurcaciones resultaron ineficientes y difíciles de manejar, y la dificultad para lograr que el proyecto oficial GCC aceptara el trabajo fue muy frustrante para muchos, ya que el proyecto favorecía la estabilidad sobre las nuevas características. [23] La FSF mantuvo un control tan estrecho sobre lo que se añadió a la versión oficial de GCC 2.x (desarrollada desde 1992) que GCC se utilizó como ejemplo del modelo de desarrollo "catedral" en el ensayo de Eric S. Raymond The Catedral y Bazar .

En 1997, un grupo de desarrolladores formó el Sistema compilador GNU experimental/mejorado (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 -GCC optimizado), [18] muchas mejoras de C++ y muchas arquitecturas y variantes de sistemas operativos nuevas . [24]

Si bien ambos proyectos siguieron de cerca los cambios del otro, el desarrollo de EGCS resultó considerablemente más vigoroso, hasta el punto de 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 GCC. mantenedores en abril de 1999. Con el lanzamiento de GCC 2.95 en julio de 1999, los dos proyectos se unieron una vez más. [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 una falta de mantenimiento. [27]

Antes de la versión 4.0, la interfaz de Fortran era g77, que solo admitía FORTRAN 77 , pero luego se abandonó en favor de la nueva interfaz de GNU Fortran que admite Fortran 95 y también gran parte de Fortran 2003 y Fortran 2008 . [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] [32]

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 integrados , incluidos Symbian (llamado gcce ), [33] chips basados ​​en ARM y Power ISA . [34] El compilador puede apuntar a una amplia variedad de plataformas, incluidas consolas de videojuegos como PlayStation 2 , [35] Cell SPE de PlayStation 3, [36] y Dreamcast . [37] Ha sido adaptado a más tipos de procesadores y sistemas operativos que cualquier otro compilador. [38] [ ¿ fuente autoeditada? ] [ se necesita una mejor fuente ]

Idiomas soportados

A partir de la versión 13.1, GCC incluye interfaces para 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] lenguajes de programación, [43] con las extensiones de lenguaje paralelo OpenMP y OpenACC compatibles desde GCC 5.1. [9] [44] 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. [45]

Con respecto 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 admitir lenguajes adicionales, como el compilador GCC UPC para Unified Parallel C [47] o Rust . [48] ​​[49] [50] [ se necesita una mejor fuente ]

Diseño

Descripción general del proceso de compilación extendido de GCC, incluidos programas especializados como el preprocesador , el ensamblador y el vinculador .
GCC sigue la arquitectura de 3 etapas típica de los compiladores multilenguaje y multi-CPU . Todos los árboles de programas se convierten a una representación abstracta común en el "extremo medio", lo que permite que todos los lenguajes compartan las funciones de optimización de código y 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 del comando , 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 lenguaje es un programa separado 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 abstracta ("árbol" para abreviar).

Estos, si es necesario, se convierten a la representación de entrada del extremo medio, denominada forma GENÉRICA ; el extremo medio transforma gradualmente el programa hacia su forma final. Se aplican al código optimizaciones del compilador y técnicas de análisis de código estático (como FORTIFY_SOURCE, [51] una directiva del compilador que intenta descubrir algunos desbordamientos del búfer ). 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 una 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 partes de la interfaz 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 se instalan de forma predeterminada en muchas distribuciones de Unix y Linux (pero que, normalmente, no están presentes en las instalaciones de Windows), incluidas 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 escribirse principalmente en C más un subconjunto de características de C++. En particular, esto se decidió para que los desarrolladores de GCC pudieran utilizar 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 lenguaje de implementación. [57] Esto significa que para construir GCC a partir de fuentes, se requiere un compilador de C++ que comprenda 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 y el compilador en sí; de forma predeterminada, sin embargo, compila versiones posteriores de C++). [58]

Frente termina

Los front-end constan de preprocesamiento , análisis léxico , análisis sintáctico (análisis) 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 válidas del programa para etapas posteriores del compilador. Este ejemplo muestra los pasos del lexer y del analizador realizados para un programa simple escrito en C.

Cada interfaz utiliza un analizador para producir el árbol de sintaxis abstracta de un archivo fuente determinado . Debido a la abstracción del árbol de sintaxis, el mismo back-end puede procesar archivos fuente de cualquiera de los diferentes idiomas admitidos . GCC comenzó usando analizadores LALR generados con Bison , pero gradualmente cambió a analizadores de descenso recursivo escritos a mano para C++ en 2004, [59] y para C y Objective-C en 2006. [60] A partir de 2021, todas las interfaces usan analizadores manuales -Analizadores de descenso recursivo 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 interfaces de diferentes idiomas, 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 y se basa en la representación intermedia de la interfaz Java GCC 3.x. GIMPLE es un GENÉRICO simplificado, en el que varias construcciones se reducen a múltiples instrucciones GIMPLE. Las interfaces C , C++ y Java producen GENERIC directamente en la interfaz. En cambio, otras interfaces 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 GIMPLE basada en SSA más simple , que es el lenguaje común para una gran cantidad de poderosas 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 "extremo medio" 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 realiza 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 [61] y expandiéndola para registrar el lenguaje de transferencia (RTL). La representación GENÉRICA contiene solo el subconjunto de construcciones de programación imperativas optimizadas por el extremo medio.

Al transformar el código fuente a GIMPLE, [62] 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 [63] por Laurie J. Hendren [64] 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 semántico y de sintaxis 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 "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 optimización de bucle , subprocesamiento de salto , eliminación de subexpresiones comunes , programación de instrucciones , etc. Las optimizaciones RTL son de menos 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.

Algunas de estas optimizaciones realizadas en este nivel incluyen eliminación de código muerto , eliminación de redundancia parcial , numeración de valores globales , propagación constante condicional dispersa y reemplazo escalar de agregados. También se realizan optimizaciones basadas en dependencias de matrices, como la vectorización automática y la paralelización automática . También es posible la optimización guiada por perfiles . [66]

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

El proyecto GCC incluye una implementación de la biblioteca estándar de C++ llamada libstdc++, [67] con licencia GPLv3 con una excepción para vincular aplicaciones que no son GPL cuando las fuentes se crean con GCC. [68]

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 del archivo objeto para mejorar directamente el binario vinculado. 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 objeto. [ cita necesaria ] El archivo se genera junto con el archivo objeto durante la compilación fuente. Cada compilación fuente genera un archivo objeto independiente y un archivo auxiliar en el momento del enlace. Cuando los archivos objeto están vinculados, el compilador se ejecuta nuevamente y utiliza los archivos auxiliares para optimizar el código en los archivos objeto compilados por separado.
Complementos
Los complementos amplían el compilador GCC directamente. [69] Los complementos permiten que un compilador de stock 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 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. [71]
El soporte de complementos fue una vez un tema polémico en 2007. [72]
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] [73]
Identificadores Unicode
Aunque el lenguaje C++ requiere compatibilidad con caracteres Unicode no ASCII en los identificadores , la función 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 característica es opcional en C, pero también está disponible desde este cambio. [74] [75]
extensiones C
GNU C amplía el lenguaje de programación C con varias características no estándar, incluidas funciones anidadas [76] y typeofexpresiones. [77]

Arquitecturas

GCC compilando Hello World en Windows

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

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

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

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

El compilador GCJ Java puede apuntar a una arquitectura de lenguaje de máquina nativo o al código de bytes Java de la máquina virtual Java . [82] Cuando se reorienta GCC a una nueva plataforma, a menudo se utiliza el bootstrapping . 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 tiene la licencia GNU General Public License 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 GCC. Esto no afecta los términos de licencia del código fuente de GCC. [85]

Ver también

Referencias

  1. ^ ab "Publicaciones del CCG". Proyecto GNU . Consultado el 24 de julio de 2020 .
  2. ^ Richard Biener (27 de julio de 2023). "Lanzamiento de GCC 13.2" . Consultado el 27 de julio de 2023 .
  3. ^ "Convenciones de codificación del CCG - Proyecto GNU". gcc.gnu.org . Consultado el 7 de febrero de 2022 .
  4. ↑ ab Víctor Rodríguez (1 de octubre de 2019). "Cadena de herramientas de vanguardia (últimas funciones en GCC/GLIBC)". youtube.com . Fundación Linux. Archivado desde el original el 7 de noviembre de 2021 . Consultado el 19 de enero de 2021 .
  5. ^ "Excepción de la biblioteca en tiempo de ejecución de GCC" . Consultado el 24 de julio de 2020 .
  6. ^ GCC Rust, Rust GCC, 4 de junio de 2023 , consultado el 4 de junio de 2023
  7. ^ "Lenguajes de programación compatibles con GCC". Proyecto GNU . Consultado el 23 de junio de 2014 .
  8. ^ ab "Serie de lanzamientos de GCC 6: cambios, nuevas funciones y correcciones - Proyecto GNU". gcc.gnu.org .
  9. ^ ab "OpenACC - Wiki del CCG". gcc.gnu.org .
  10. ^ "El proyecto de infraestructura del compilador LLVM". llvm.org .
  11. ^ "Purga GPLv3 de Apple". meta.ath0.com . 5 de febrero de 2012 . Consultado el 12 de enero de 2021 .
  12. ^ Linnemann, Reid (20 de junio de 2012). "¿Por qué sonido metálico?" . 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 del CCG. Guías definitivas (2ª ed.). Presione. pag. XXVII. ISBN 978-1-4302-0219-6. Entonces le escribió al autor de VUCK preguntándole si GNU podía usarlo. Evidentemente, el desarrollador de VUCK no cooperó y respondió que la universidad era gratuita pero que el compilador no.
  16. ^ abc Stallman, Richard (20 de septiembre de 2011). "Acerca del 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. ^ abcd von Hagen, William (2006). La guía definitiva del CCG. 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). "Lanzamiento de prueba beta del compilador GNU C". Grupo de noticias : comp.lang.c. Consultado el 9 de octubre de 2011 .
  20. ^ Stallman, Richard M. (22 de junio de 2001) [Publicado por primera vez en 1988], "Contribuidores de GNU CC", Uso y portabilidad 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 Gnu y el Pingüino . Groklaw .
  22. ^ Garfinkel, Simson L. (6 de agosto de 1990). "Prepárese para el software GNU". Mundo de la informática . pag. 102.
  23. ^ ab Henkel-Wallace, David (15 de agosto de 1997), Un nuevo proyecto de compilador para fusionar las bifurcaciones GCC existentes , consultado el 25 de mayo de 2012 .
  24. ^ "La breve historia del desarrollo del CCG". www.softpanorama.org . Consultado el 24 de enero de 2021 .
  25. ^ "Historia - Wiki del CCG". gcc.gnu.org . Consultado el 28 de septiembre de 2020 .
  26. ^ "Comité directivo del CCG - Proyecto GNU". gcc.gnu.org .
  27. ^ "PARCHE] Quitar el frío". gcc.gnu.org . Consultado el 29 de julio de 2010 .
  28. ^ "Gráfico de funciones de Fortran 2003 compatibles con GNU Fortran". GNU . Consultado el 25 de junio de 2009 .
  29. ^ "Gráfico de funciones de Fortran 2008 compatibles con GNU Fortran". GNU . Consultado el 25 de junio de 2009 .
  30. ^ "Serie de lanzamientos de GCC 4.8: cambios, nuevas funciones y correcciones - Proyecto GNU". gcc.gnu.org .
  31. ^ "Serie de lanzamientos de GCC 5: cambios, nuevas funciones y correcciones". gcc.gnu.org .
  32. ^ "Serie de lanzamientos de GCC 8: cambios, nuevas funciones y correcciones". gcc.gnu.org .
  33. ^ "Proyecto de mejora de Symbian GCC" . Consultado el 8 de noviembre de 2007 .
  34. ^ "Paquetes de soporte de placa Linux". Archivado desde el original el 7 de junio de 2011 . Consultado el 24 de enero de 2021 .
  35. ^ "configurar gcc como compilador cruzado". cosas de ps2 . 8 de junio de 2002. Archivado desde el original el 11 de diciembre de 2008 . Consultado el 12 de diciembre de 2008 .
  36. ^ "CompileFarm - Wiki del CCG". gcc.gnu.org .
  37. ^ "guía sh4 g ++". Archivado desde el original el 20 de diciembre de 2002 . Consultado el 12 de diciembre de 2008 .
  38. ^ "Proyecto de información de Linux". LINFO . Consultado el 27 de abril de 2010 . El GCC ha sido portado (es decir, modificado para ejecutarse en) más de 60 plataformas, más que cualquier otro compilador.
  39. ^ "Serie de lanzamientos de GCC 9: cambios, nuevas funciones y correcciones - Proyecto GNU".
  40. ^ "La interfaz del lenguaje D finalmente se fusionó con GCC 9 - Phoronix". phoronix.com . Consultado el 19 de enero de 2021 .
  41. ^ "Serie de lanzamientos de GCC 13: cambios, nuevas funciones y correcciones - Proyecto GNU".
  42. ^ Probado, Liam (16 de diciembre de 2022). "GCC 13 para respaldar Modula-2: el seguimiento de Pascal sigue vivo en formato FOSS" . Consultado el 19 de diciembre de 2022 .
  43. ^ ab "Frentes del CCG". gnu.org . Consultado el 25 de noviembre de 2011 .
  44. ^ "Serie de lanzamientos de GCC 5: cambios, nuevas funciones y correcciones - Proyecto GNU". gcc.gnu.org .
  45. ^ "Serie de lanzamientos de GCC 7". gnu.org . Consultado el 20 de marzo de 2018 .
  46. ^ "Soporte de estándares C++ en GCC" . Consultado el 17 de mayo de 2021 .
  47. ^ "GCC UPC (GCC Unificado Paralelo C)". Intrepid Technology, Inc. 20 de febrero de 2006 . Consultado el 11 de marzo de 2009 .
  48. ^ "Frontal de GCC para Rust" . Consultado el 6 de enero de 2023 .
  49. ^ "Frontal de GCC para Rust (Github)". GitHub . 5 de enero de 2023 . Consultado el 6 de enero de 2023 .
  50. ^ Spengler, Brad (12 de enero de 2021). "Open Source Security, Inc. anuncia la financiación del front-end de GCC para Rust".
  51. ^ "Funciones de seguridad: comprobaciones del búfer de tiempo de compilación (FORTIFY_SOURCE)". fedoraproject.org . Consultado el 11 de marzo de 2009 .
  52. ^ "idiomas utilizados para hacer GCC". Archivado desde el original el 27 de mayo de 2008 . Consultado el 14 de septiembre de 2008 .
  53. ^ "Internos del CCG". GCC.org . Consultado el 1 de marzo de 2010 .
  54. ^ "Requisitos previos para GCC - Proyecto GNU". gcc.gnu.org . Consultado el 5 de septiembre de 2021 .
  55. ^ "GCC permite C++, hasta cierto punto". El h . 1 de junio de 2010.
  56. ^ "Re: ¿Esfuerzos para atraer más usuarios?". listas.gnu.org .
  57. ^ "Serie de lanzamientos de GCC 4.8: cambios, nuevas funciones y correcciones" . Consultado el 4 de octubre de 2013 .
  58. ^ "bootstrap: requisito de actualización a C++ 11". GitHub . Consultado el 18 de mayo de 2020 .
  59. ^ "Serie de lanzamientos de GCC 3.4: cambios, nuevas funciones y correcciones - Proyecto GNU". gcc.gnu.org .
  60. ^ "Serie de lanzamientos de GCC 4.1: cambios, nuevas funciones y correcciones - Proyecto GNU". gcc.gnu.org .
  61. ^ "GENÉRICO (Partes internas de la colección de compiladores GNU (GCC))". gcc.gnu.org .
  62. ^ "GIMPLE (Partes internas de la colección de compiladores GNU (GCC))". gcc.gnu.org .
  63. ^ "McCAT". Archivado desde el original el 12 de agosto de 2004 . Consultado el 14 de septiembre de 2017 .{{cite web}}: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace )
  64. ^ "Página de inicio de Laurie Hendren". www.sable.mcgill.ca .
  65. ^ Novillo, Diego (diciembre de 2004). "De la fuente al binario: el funcionamiento interno del CCG". Revista Red Hat . Archivado desde el original el 1 de abril de 2009.
  66. ^ "Instalación de GCC: Construcción - Proyecto GNU". gcc.gnu.org .
  67. ^ "La biblioteca GNU C++". Proyecto GNU . Consultado el 21 de febrero de 2021 .
  68. ^ "Licencia". Proyecto GNU . Consultado el 21 de febrero de 2021 .
  69. ^ "Complementos". Documentación en línea del CCG . Consultado el 8 de julio de 2013 .
  70. ^ Starynkevitch, Basile. "Complementos de GCC a través del ejemplo MELT" (PDF) . Archivado (PDF) desde el original el 13 de abril de 2014 . Consultado el 10 de abril de 2014 .
  71. ^ "Acerca de GCC MELT". Archivado desde el original el 4 de julio de 2013 . Consultado el 8 de julio de 2013 .
  72. ^ "GCC desconectado [LWN.net]". lwn.net .
  73. ^ "Memoria transaccional - GCC Wiki". gcc.gnu.org .
  74. ^ "Lewis Hyatt - [PATCH] wwwdocs: soporte de documentos para identificadores extendidos agregados a GCC". gcc.gnu.org . Consultado el 27 de marzo de 2020 .
  75. ^ "Recomendaciones para caracteres de identificación extendidos para C y C++". www.open-std.org . Consultado el 27 de marzo de 2020 .
  76. ^ "Extensiones C (usando la colección de compiladores GNU (GCC))". gcc.gnu.org . Consultado el 12 de enero de 2022 .
  77. ^ "Typeof: uso de la colección de compiladores GNU (GCC)". gcc.gnu.org . Consultado el 12 de enero de 2022 .
  78. ^ "Criterios de publicación de GCC 12". gcc.gnu.org . 26 de octubre de 2022 . Consultado el 27 de enero de 2023 .
  79. ^ "Resumen de opciones (uso de la colección de compiladores GNU (GCC))". gcc.gnu.org . Consultado el 21 de agosto de 2020 .
  80. ^ "Wiki del Proyecto Hexágono". Archivado desde el original el 23 de marzo de 2012 . Consultado el 19 de mayo de 2011 .
  81. ^ "Google Code Archive: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code". código.google.com .
  82. ^ "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 .
  83. ^ calculadoras gráficas # programación
  84. ^ "Uso de la colección de compiladores GNU". gnu.org . Consultado el 5 de noviembre de 2019 .
  85. ^ "Excepción de tiempo de ejecución de GCC". FSF . Consultado el 10 de abril de 2014 .

Otras lecturas

enlaces externos

Oficial

Otro