Stroustrup afirma que Cfront, el primer compilador de C ++, se escribió en C ++ ( Preguntas frecuentes de Stroustrup ).
Sin embargo, ¿cómo es posible que el primer compilador de C ++ se escriba en C ++?
El código que compone el compilador también debe compilarse y, por lo tanto, el primer compilador de C ++ no podría haberse escrito en C ++, ¿verdad?
Respuestas:
La clave está aquí:
Entonces, la primera versión de Cfront no fue escrita en C ++, sino en el lenguaje intermedio. La capacidad de crear compiladores y preprocesadores de C directamente en C condujo a muchas de las innovaciones (y agujeros de seguridad masivos ) en C. Así que escribe su nuevo preprocesador que convierte su código "C con clases" en C directo (porque C directo puede hacer cualquier cosa) y luego usas "C con clases" para escribir un compilador de C ++ (no es que no puedas hacerlo en C, solo tomará un tiempo) y luego usas ese compilador de C ++ para escribir un compilador más eficiente / completo en C ++. ¿Entendido?
fuente
Estaba cargado de botas. Tan pronto como se agregó una característica de C ++ a cfront, cfront también podría usar esa característica a partir de ese momento (pero no para implementar esa característica). Esto funcionó porque cfront tenía la capacidad de convertir código C ++ a código C. Entonces, si surgió una nueva plataforma, podría usar cfront en otra plataforma para convertir cfront de C ++ a C, y luego usar el compilador de C de la nueva plataforma para finalizar la compilación de C a código de objeto.
fuente
Creo que BS responde esa pregunta:
Primero creó algo que llamó "C con clases" implementado por un simple preprocesador en C. Era básicamente C ++, pero el preprocesador hizo poca o ninguna verificación. Luego usó eso para escribir Cfront, la versión más poderosa del traductor de C ++ a C, completa con verificación de tipos, tablas de símbolos, etc.
fuente
Agregaré esta respuesta ya que ninguna respuesta cubrió este aspecto.
Técnicamente no necesita software para compilar código. Siempre que tenga las especificaciones necesarias del compilador, puede hacer la compilación real manualmente. No es así como se compiló el primer compilador de C ++. Solo digo que es posible.
Compare con el lenguaje ensamblador. Cuando se usaron en los primeros días, no había software de ensamblador para convertir el código de ensamblaje en código de máquina. Fue hecho a mano, pero el lenguaje ensamblador dio a los programadores una mejor visión general.
fuente