¿El compilador gcc C está escrito en C mismo? ¿O está escrito en Asamblea? Si el compilador está escrito en C, ¿cuál es el compilador que se usa para compilar el código del compilador?
¿El compilador gcc C está escrito en C?
rober napier
La historia específica de gcc se da en el Wiki del CCG. El punto más general es que los compiladores generalmente se compilan originalmente con algún otro compilador hasta que son lo suficientemente potentes como para compilarse a sí mismos. Alternativamente, es posible escribir un compilador básico que pueda manejar un subconjunto de sus funciones en ensamblador y construir desde allí. Pero, de nuevo, esto ya casi nunca se necesita. Hay muchos compiladores disponibles, en una variedad de lenguajes. Incluso cuando Stephen Johnson estaba escribiendo pcc (uno de los primeros compiladores de C), había compiladores para B disponibles, junto con muchos otros lenguajes. gcc tenía varios compiladores para elegir para construirlo originalmente, y RMS dice que estaba usando el compilador Pastel al menos durante su desarrollo inicial.
Recuerde, no hay ningún requisito de que un compilador de C esté escrito en C. Puede escribirlo en Perl si lo desea. No existe ningún requisito de que un compilador para una plataforma determinada se escriba originalmente en esa plataforma (los sistemas integrados casi siempre se compilan en algún otro sistema). Entonces, hay muchas maneras de ponerse en marcha.
Esta pregunta tiene algunas sutilezas interesantes relacionadas con la primera instancia de arranque del compilador. Si fueras muy inteligente, podrías hacer uso de ese arranque para hacer algo increíble, brillante y aterrador.
-
Woah, ese segundo artículo al que te vinculaste es increíblemente inteligente.
– Ponkadoodle
18 de julio de 2011 a las 4:22
-
Gracias por el gran enlace de arranque. Supuse que los compiladores siempre se escribieron en lenguajes más simples hasta el código de máquina para algo así como esta razón. (Por ejemplo, ¿qué sucede si se da cuenta de que el binario de su compilador contiene un error? Esto proporciona un ejemplo mucho más sólido, por supuesto). Entonces, ¿cuáles son las ventajas de escribir el compilador en su propio idioma? ¿Las personas extremadamente paranoicas se preocupan por esto y construyen sus compiladores sin un arranque “auto”?
– RoG
9 de marzo de 2017 a las 14:18
-
Algunos grupos lingüísticos consideran una marca de honor poder compilar ellos mismos. Go recientemente hizo un gran esfuerzo en esta dirección. Swift, por otro lado, notablemente no tiene planes actuales para reescribir su compilador en Swift. Tenga en cuenta, sin embargo, que GCC siempre se escribió en C. Solo se compiló con otros compiladores. Pero si todos los compiladores de C estuvieran escritos en BCPL, eso no solucionaría nada con respecto a la paranoia. Simplemente hace retroceder el problema un paso. (Obtendría los mismos beneficios de paranoia simplemente compilando GCC con sonido metálico).
–Rob Napier
9 de marzo de 2017 a las 14:35
-
Tenga en cuenta que gcc tiene una política de que la versión principal de gcc X siempre se puede compilar con la versión principal de gcc X-1, por lo que cualquier característica nueva agregada al compilador en X solo se puede usar en la fuente de gcc desde X+1. por ejemplo, debería poder compilar cualquier gcc versión 9, sin importar cuál sea el número de versión menor, con cualquier gcc 8, nuevamente sin importar cuál sea la versión menor.
– Baruc
5 de noviembre de 2020 a las 8:53
Originalmente estaba escrito en algún lenguaje ensamblador y luego comenzó a convertirse en alimento para perros.
-
No he visto ninguna referencia a RMS usando ensamblador para el arranque original. ¿Cuál es tu fuente para eso? Tenía varios otros compiladores con los que arrancar, por lo que parece mucho trabajo.
–Rob Napier
14 de abril de 2011 a las 1:27
-
Pensé que el término era bootstrap.
– Martín York
14 de abril de 2011 a las 6:45
-
jajaja Leí esto hace unas semanas y pensé que estabas loco con esa expresión, no me di cuenta de que era estándar. ¡Buen espectáculo señor! en.wikipedia.org/wiki/Eating_your_own_dog_food
– usuario2918461
1 de marzo de 2017 a las 14:55
oo_miguel
Si bien esto es obviamente solo un indicador muy aproximado, encontré esto rápidamente listado sobre el gcc-5.1.0-src/gcc/
directorio interesante. Este directorio contiene las fuentes principales de GCC (excepto las bibliotecas de tiempo de ejecución).
Aquí están los recuentos de archivos principales (más de 100) agrupados por extensión dominado por archivos C y C++.
112 .opt
118 .def
140 .cc
185 .x
250 .exp
353 .md
366 .mm
414 .f
430 .f03
521 .m
625 .a
1082 .go
1371 .h
1602 .ads
1655 .adb
1828 .ada
3860 .f90
11231 .C // C++
23811 .c // C
Tenga en cuenta que hoy en día GCC
se refiere a la colección de compiladores GNU, no solo al compilador GNU C.
6.3 El subdirectorio gcc
El directorio gcc contiene muchos archivos que forman parte de las fuentes C de GCC, otros archivos utilizados como parte del proceso de configuración y creación, y subdirectorios que incluyen documentación y un conjunto de pruebas.
Referencia: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html
¿El compilador gcc C está escrito en C?
No, gcc se migró a C++ desde 2010. Para más detalles leer
El paso de GCC a C++
Sí lo es (en su mayoría). Por supuesto, se necesita un compilador de C para compilar C, por lo que, como ocurre con la mayoría de los compiladores, hay una serie de fases de “arranque”. La idea general se cubre en Instalación de GCC: Construcción y Instalación de GCC – LFS.
– usuario166390
14 de abril de 2011 a las 1:05
Las estaciones de trabajo de diferentes marcas en la década de 1980 y principios de la de 1990 tenían sus propios entornos similares a Unix con compilador C, herramientas, etc., que eran un poco diferentes entre sí. Con la fuente de GCC, puede hacer una compilación inicial de gcc en una de estas plataformas y luego compilar gcc consigo mismo varias veces para verificar más o menos un punto fijo.
– Pablo
14 de abril de 2011 a las 2:24