¿No hay un problema de huevo y gallina ya que GCC está escrito en C ++?

10

Desde la versión 4.8, el compilador de C ++ GCC (la parte de G ++) ya no está escrito en C, sino en C ++. Tengo una pregunta hipotética sobre esto.

Me pregunto cómo compilar el código C ++ de GCC en una nueva plataforma que aún no tiene compilador C ++. Por supuesto, puede usar binarios precompilados compilados en otras máquinas. O puede usar una versión anterior de GCC que se escribió en C y compilar la versión actual con ella.

Sin embargo, sin los binarios precompilados y solo la versión más nueva, estaba atrapado, ¿verdad? Si no es así, ¿hay otras implicaciones en esta situación planteadas por el cambio de C a C ++ del proyecto GCC?

danijar
fuente
3
No estoy seguro de lo que está preguntando aquí, aunque es posible que desee leer sobre la compilación cruzada .
55
Una plataforma completamente nueva no tendrá compilador de C ++ ni compilador de C. La compilación cruzada es la respuesta.
doc
1
Probablemente debería leer el movimiento de GCC a C ++ , Mover a C ++ y posiblemente la discusión GCC ahora necesitará C ++ para construir en reddit. No estoy seguro de que gccantes de 4.8 se pudiera construir con el compilador de C empaquetado con un sistema operativo arbitrario (y eso lo restringiría a C89 en muchos).
2
No sé qué tiene de especial C ++ para esta pregunta, el problema existe con C o cualquier otro lenguaje, ¿no?
RemcoGerlich

Respuestas:

16

Este es en realidad un concepto bien conocido llamado bootstrapping . Básicamente, existe, en algún lugar, una base de código C mínima para construir una versión de GCC que sea capaz de construir la base de código GCC actual. Los lenguajes de alojamiento propio han estado haciendo cosas así durante décadas.

Mason Wheeler
fuente
En realidad no. Ese ya no es el caso (y el problema con la pregunta). gccya no puede ser compilado por el compilador ac. La única garantía con las compilaciones de gcc que hacen es que gcc versión N se puede construir con gcc versión N-1.
99
@MichaelT: Pero una versión anterior de GCC se puede construir con un compilador de C, que luego puede compilar versiones posteriores escritas en C ++, que es lo que dije.
Mason Wheeler
También señalaría las preguntas en la pregunta: However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- presupone que no tiene acceso a versiones anteriores ni aborda las otras implicaciones del cambio de C a C ++ para la base de código.
9

La creación de un compilador que está escrito en el mismo idioma que compila se llama bootstrapping . El artículo de wikipedia describe varias formas en que un compilador se puede iniciar.

Dada su restricción de que solo tiene un código fuente de G ++ posterior a 4.8 y no binarios precompilados para su plataforma de destino (sin compilador de C ++ existente), entonces el arranque del compilador de G ++ se puede hacer mediante compilación cruzada .

Cuando arranca un compilador mediante compilación cruzada, construye varias versiones de su compilador

  1. En su PC, instala un compilador de C ++ (puede ser cualquier compilador de C ++, no tiene que ser G ++)
  2. Usando ese compilador, crea un compilador cruzado de G ++ que puede ejecutarse en la PC y genera código para la plataforma de destino
  3. Usando el compilador cruzado de G ++ que acaba de construir, crea un compilador nativo de G ++ que puede ejecutarse en la plataforma de destino y crear código para él.
  4. Estás listo. Ha creado un compilador de C ++ para la nueva plataforma.

Si tampoco tiene una PC (o similar) para realizar los pasos iniciales, entonces está atascado, pero la posibilidad de estar en esa situación e intentar arrancar un compilador es insignificante.

Bart van Ingen Schenau
fuente