Pregunta

Supongamos que necesita un compilador C.Sería preferible escribir ese compilador en un lenguaje similar a C, dada la complejidad de un compilador de ese grado.En el mejor de los casos, el compilador C estaría escrito en C, pero eso necesitaría que comience un compilador C.Si se comete un error en la realización de una de las iteraciones iniciales de los compiladores, podría propagarse.¿Cómo se aseguran de que los compiladores no sucedan?Obviamente, ningún código es impecable, ni siquiera el procesador es, pero si no ha medido de alguna manera la estabilidad, ni siquiera sabe si su compilador es estable.¿Qué suposiciones se hacen y cómo se justifica?Me imagino que también sería dependiente de la arquitectura.

Editar: Por estabilidad, quiero decir que el código se ejecuta según lo previsto.

¿Fue útil?

Solución

La palabra que los escritores del compilador utilizan para esto es "conformidad".Un compilador que implementa correctamente la especificación del idioma es conforme.Hay empresas que, como parte de su negocio, vendan pruebas de conformidad para diversas normas, incluidos los lenguajes de programación.

Es raro que los errores se propaguen a través de las generaciones del compilador por accidente (aunque ha ocurrido a propósito ).

Otros consejos

Sucede que los compiladores contienen errores sutiles.No hay errores flagrantes, porque los errores flagrantes serían detectados y fijos.

Un compilador que es compilado por un compilador con errores sutiles tenderá a tener errores flagrantes.Serán fáciles de detectar porque son tan descarados.Serán difíciles de arreglar porque estos errores descargados se producirán por código fuente perfectamente fino, por lo que a quien quiera arreglarlo, tendrá dificultades para encontrar el problema real.

La solución será hacer un compilador de calidad suficiente que los errores son muy raros, y extremadamente raros dentro del compilador.También esperamos que los errores del compilador afecten más códigos muy complicados, por lo que el escritor del compilador debe escribir código que sea simple y sigue los patrones de codificación comunes.

Una respuesta es la prueba, las pruebas, las pruebas.P.ej.GCC viene con un conjunto cada vez mayor de pruebas que se verifican cada vez que se construye el compilador.Se requieren muchos compiladores para pasar la llamada prueba triple: compilar el código de su compilador C usando el compilador A, dando C_1;Compile C con C_1 Donando C_2, compile C con C_2 dando C_3.Ahora C_2 y C_3 se compilaron con C, y deberían ser iguales.Si no, algo que pescado está pasando.

Eche un vistazo a Regher's "incrustado en la academia" blog, es una de las personas que trabajan alrededor de laLas herramientas del compilador LLVM, y tocan regularmente las herramientas y las técnicas utilizadas para mejorar el compilador (o automatizar partes de su edificio).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top