Por lo general, los compiladores se traducen del idioma que admiten al ensamblaje. O como mucho a un lenguaje de ensamblaje (bytecode), como GIMPLE/GENERIC para GCC o Python/Java/.NET bytecode.¿Por qué los compiladores no se traducen en idiomas más simples?
¿No sería más simple para un compilador traducir a un lenguaje más simple, que ya implementa un gran subconjunto de su gramática?
Por ejemplo, un compilador de Objective-C, que es 100% compatible con C, podría agregar la semántica solo para la sintaxis que se extiende a C, traduciéndolo en C. Puedo ver muchas ventajas de hacer esto; se podría usar este compilador de Objective-C para traducir su código a C para compilar el código C generado con un compilador diferente que no admite C++ (pero que optimiza más, o compila más rápido o puede compilar para más arquitecturas) O uno podría usar el código C generado en un proyecto donde solo se permite C.
supongo/espero que si las cosas funcionaban así, habría sido mucho más fácil de escribir extensiones para los idiomas actuales (por ejemplo: la adición de palabras clave C++ para facilitar la implementación de patrones comunes, o, todavía en C++, eliminando el declara antes de usar la regla moviendo las funciones de miembros en línea al final de los archivos de encabezado)
¿Qué tipo de sanciones habría? ¿El código generado sería muy difícil de ser entendido por los humanos? ¿Los compiladores no podrían optimizar tanto como ahora? ¿Qué más?
Por cierto, el primer compilador C++ trabajaron que manera- Compilar código C++ a código C que fue luego compilado a través de un compilador C. Se encontraron con problemas, sin embargo, a medida que el lenguaje C++ se volvió más complejo: http://en.wikipedia.org/wiki/Cfront – bdk
De hecho, Ratfor fue diseñado para ser solo esto: http://en.wikipedia.org/wiki/Ratfor – Gabe