Colección de compiladores GNU

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 11 de julio de 2020; las comprobaciones requieren 15 ediciones .
Colección de compiladores GNU
Tipo de compilador
Desarrollador Proyecto GNU
Escrito en C++
Sistema operativo GNU/Linux [5] y BSD [6]
Primera edición 23 de mayo de 1987 [1]
plataforma de hardware multiplataforma
ultima versión
Versión de prueba
Licencia GNU GPL 3
Sitio web gcc.gnu.org
 Archivos multimedia en Wikimedia Commons

GNU Compiler Collection (comúnmente abreviado como GCC ) es una colección de compiladores para varios lenguajes de programación desarrollados como parte del proyecto GNU . GCC es software libre , distribuido entre otros por la Free Software Foundation (FSF) bajo los términos de GNU GPL y GNU LGPL , y es un componente clave de la cadena de herramientas GNU . Se utiliza como compilador estándar para sistemas operativos similares a UNIX gratuitos .

Originalmente llamado GNU C Compiler , solo soportaba el lenguaje C. Posteriormente , GCC se amplió para compilar códigos fuente en lenguajes de programación como C++ , Objective-C , Java , Fortran , Ada , Go , GAS y D.

Desde la versión 4.2.2, GCC cambió a la licencia GPLv3 .

Resumen

GCC fue iniciado por Richard Stallman , quien implementó la primera versión de GCC en 1985 en un dialecto no estándar y no portátil de Pascal ; el compilador fue posteriormente reescrito en C por Leonard Tower y Richard Stallman [7] y lanzado en 1987 [8] como un compilador para el proyecto GNU, que en sí mismo era software libre. El desarrollo de GCC está supervisado por la Free Software Foundation [9] .

Actualmente, GCC es mantenido por un grupo de programadores de todo el mundo. GCC es líder en cuanto a la cantidad de procesadores y sistemas operativos que admite.

Como compilador oficial del sistema GNU , GCC también es el compilador maestro para construir una serie de otros sistemas operativos; entre ellos se encuentran varios sabores de Linux y BSD (anteriormente se usa clang llvm actualmente), así como ReactOS , Mac OS X , OpenSolaris , NeXTSTEP , BeOS y Haiku .

GCC a menudo se elige para desarrollar software que necesita ejecutarse en una gran cantidad de plataformas de hardware diferentes. Las diferencias entre los compiladores "nativos" para cada una de las plataformas de hardware generan dificultades para desarrollar código que sería compilado correctamente por diferentes compiladores y, además, cuando se usan diferentes compiladores, los scripts de compilación que deben compilar software para todas las plataformas de hardware se vuelven muy complicados. Al usar GCC para compilar código para diferentes plataformas, se usará el mismo analizador . Por lo tanto, si logró compilar el programa para una de las plataformas de destino, es muy probable que el programa también se compile normalmente para otras plataformas.

Idiomas

El compilador estándar incluye interfaces para idiomas:

La parte frontal de CHILL se agregó anteriormente, pero debido a un soporte insuficiente, se excluyó del conjunto. Antes de la versión 4.0, la interfaz para Fortran era G77, que solo admitía FORTRAN 77. En las nuevas versiones, G77 se eliminó a favor de la nueva interfaz GFortran, que admite Fortran 95.

También hay interfaces de terceros para Pascal , Modula-2 , Modula-3 , Mercury , VHDL y PL/I .

Arquitecturas

La lista de procesadores compatibles con GCC (para la versión 7.1) incluye

Procesadores menos conocidos admitidos en la versión estándar:

Tipos adicionales de arquitecturas y procesadores compatibles con versiones de GCC pero compatibles con terceros (no la Free Software Foundation):

Estructura

La interfaz GCC es el estándar para compiladores en la plataforma UNIX. El usuario invoca un programa de control llamado gcc . Interpreta los argumentos de la línea de comandos, determina e inicia sus propios compiladores para el idioma deseado para cada archivo de entrada e inicia el ensamblador y el enlazador si es necesario .

El compilador de cada lenguaje es un programa separado que toma el código fuente y produce una salida en lenguaje ensamblador . Todos los compiladores comparten una estructura interna común: un front-end que analiza y genera un árbol de sintaxis abstracta y un back-end que convierte el árbol a Register Transfer Language (RTL), realiza varias optimizaciones y luego genera un programa en lenguaje ensamblador usando Coincidencia de patrones dependientes de la arquitectura .

Antes de la versión 4.7.2, GCC estaba escrito casi en su totalidad en C , aunque gran parte del front-end de Ada estaba escrito en Ada . Desde el 14 de agosto de 2012, el desarrollo se ha traducido a C++ [15] , la versión 4.8 [16] y posteriores requieren un compilador de C++ que soporte C++ 2003 para su ensamblaje.

Depuración de programas compilados con GCC

La herramienta principal para depurar programas compilados con GCC es el Depurador GNU (gdb). También existen herramientas de depuración altamente especializadas:

Licencia

La versión 4.2.1 de GCC fue la última versión publicada bajo la versión 2 de la Licencia pública general de GNU . Todas las versiones posteriores tienen licencia GPL versión 3 [17] .

Crítica

Algunos desarrolladores de OpenBSD , como Theo de Raadt y Otto Moerbeek , han criticado a GCC como "incómodo, con errores, lento y generando código incorrecto" [18] . Debido a esta actitud crítica, y también a la licencia GPL bastante restrictiva (en comparación con BSD) bajo la cual se publica la colección de compiladores, se intentó reemplazar GCC en NetBSD y OpenBSD con otros compiladores, como PCC [19]. . Se está realizando un trabajo similar para reemplazar GCC con Clang en FreeBSD [20] .

Véase también

Notas

  1. https://www.gnu.org/software/gcc/releases.html
  2. Biener R. GCC 12.2 Lanzamiento - 2022.
  3. Biener R. GCC 11.3 Lanzamiento  - 2022 .
  4. Jelinek J. GCC 10.4 Lanzamiento  - 2022 .
  5. Instalación de GCC - Proyecto GNU - Free Software Foundation (FSF)
  6. Instalación de GCC - Proyecto GNU - Free Software Foundation (FSF)
  7. Stallman, Richard M. Estado de GNU  (indefinido)  // Boletín de GNU. - Free Software Foundation, 1986. - febrero ( vol. 1 , no. 1 ). Archivado desde el original el 21 de agosto de 2007.
  8. Tower, Leonard (1987) " Versión de prueba beta del compilador GNU C, archivado el 5 de noviembre de 2011 en Wayback Machine " comp.lang.misc USENET newsgroup; ver también http://gcc.gnu.org/releases.html#timeline Archivado el 28 de diciembre de 2006 en Wayback Machine .
  9. Stallman, Richard M. (2001) " Contribuidores de GCC, archivado el 3 de enero de 2007 en Wayback Machine " en Uso y portabilidad de la colección de compiladores GNU (GCC) Archivado el 27 de diciembre de 2006 en Wayback Machine para gcc versión 2.95 (Cambridge Mass. : Fundación para el Software Libre)
  10. GCC 7 Release Series - Cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF) . gcc.gnu.org. Consultado el 31 de agosto de 2019. Archivado desde el original el 2 de septiembre de 2020.
  11. GCC 4.6 Release Series - Cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF) . Consultado el 23 de enero de 2011. Archivado desde el original el 4 de noviembre de 2015.
  12. Lenguaje de programación GDC-D para GCC . gdcproject.org. Consultado el 31 de agosto de 2019. Archivado desde el original el 6 de agosto de 2019.
  13. Serie de versiones de GCC 9 - Cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF) . gcc.gnu.org. Consultado el 31 de agosto de 2019. Archivado desde el original el 19 de febrero de 2022.
  14. http://gcc.gnu.org/ Archivado el 11 de enero de 2012 en Wayback Machine "Compatibilidad con el procesador TI C6X [2011-07-15] Un puerto para la familia de procesadores TI C6X"
  15. Conversión de C++. Este proyecto es una continuación del proyecto build GCC in C++. Archivado el 14 de octubre de 2012 en Wayback Machine / GCC wiki,  2012
  16. GCC 4.8 Release Series Archivado el 8 de diciembre de 2015 en Wayback Machine : "GCC ahora usa C++ como su lenguaje de implementación. Esto significa que para compilar GCC a partir de fuentes, necesitará un compilador de C++ que comprenda C++ 2003".
  17. ↑ Herramientas : Lanzamiento de GCC 4.2.1 - KernelTrap  . kerneltrap.org (21 de julio de 2007). Fecha de acceso: 25 de diciembre de 2009. Archivado desde el original el 17 de febrero de 2012.
  18. Más información sobre el nuevo compilador de OpenBSD: Mambo. Archivado el 29 de septiembre de 2008.
  19. Hacia un compilador con licencia BSD (enlace descendente) . Consultado el 3 de noviembre de 2008. Archivado desde el original el 24 de octubre de 2008. 
  20. Informes de estado de FreeBSD de enero a marzo de 2009 . Consultado el 19 de abril de 2010. Archivado desde el original el 17 de abril de 2010.

Literatura

Enlaces