Compilar idiomas de nivel superior a los de nivel inferior es muy sencillo. Hay innumerables ejemplos de que se está haciendo. Sin salir de una tangente, podemos señalar los primeros compiladores de C ++ que se compilaron en C.
Sin embargo, cuando comienzas a poner "limpio" y "legible" en la mezcla, las cosas se ponen realmente difíciles. El código limpio y legible expresa el significado y la intención de lo que estaba escribiendo. Las computadoras son notoriamente malas para interpretar y crear significado. Es más probable que termines con variables nombradas int_147
que input_buffer_length
. Claro, si realmente quisiera hacer que este proyecto funcionara, podría participar en un proyecto de IA masivo para manejar la conversión de su Lisp a algún tipo de C ++ legible decentemente, pero, para ser sincero, los compiladores de Common Lisp son bastante buenos en lo que hacen .
Más importante que la dificultad de generar C ++ a partir de un Lisp es la utilidad de esto. ¿Para qué serviría que el C ++ generado sea legible? Si Lisp es su código fuente, las representaciones intermedias deben ser irrelevantes. Si desea poder entregar el C ++ a los programadores que no entienden su Lisp original, ahora tiene otro problema. ¿Qué sucede cuando quieren modificar su C ++ generado? ¿Qué sucede si escriben cosas en C ++ que no se traducen limpiamente a su Lisp?
Digamos que lo hemos resuelto. Es una década más tarde y, después de gastar cientos de millones de dólares en fondos de donaciones del Departamento de Defensa, hemos construido este motor de traducción de idiomas masivo, complejo (pero sin fallas) que puede convertir a Lisp en C ++ idiomático y viceversa. ¿Qué hemos ganado realmente que no se lograría mejor enseñando a las personas un nuevo lenguaje de programación o simplemente desarrollando un nuevo compilador que nos permita vincular los dos idiomas?
Correcto. Su jefe quiere que escriba C ++ y prefiere no hacerlo. Actualice su currículum y encuentre un nuevo trabajo.