Compilar linguagens de nível superior para as de nível inferior é fácil. Existem inúmeros exemplos disso sendo feito. Sem sair muito da tangente, podemos apontar os primeiros compiladores C ++ que compilaram até C.
Quando você começa a jogar "limpo" e "legível" na mistura, no entanto, as coisas ficam realmente difíceis. Um código limpo e legível expressa o significado e a intenção do que você estava escrevendo. Os computadores são notoriamente ruins em interpretar e criar significado. É mais provável que você acabe com variáveis nomeadas int_147
que input_buffer_length
. Claro, se você realmente quisesse fazer esse projeto funcionar, você poderia se envolver em um grande projeto de IA para converter seu Lisp em algum tipo de C ++ decentemente legível, mas, para ser sincero, os compiladores Common Lisp são muito bons no que fazem .
Mais importante que a dificuldade de gerar C ++ a partir de um Lisp é a utilidade disso. Que finalidade serviria para que o C ++ gerado fosse legível? Se o Lisp é o seu código-fonte, as representações intermediárias devem ser irrelevantes. Se você deseja entregar o C ++ a programadores que não entendem o Lisp original, agora você tem outro problema. O que acontece quando eles desejam modificar o C ++ gerado? O que acontece se eles escrevem coisas em C ++ que não se traduzem corretamente no seu Lisp?
Digamos que resolvemos isso. É uma década depois e, depois de gastar centenas de milhões de dólares em recursos do Departamento de Defesa, criamos esse mecanismo de tradução de idiomas maciço e complexo (mas sem falhas) que pode transformar o Lisp em C ++ idiomático e vice-versa. O que realmente ganhamos que não seria melhor realizado ensinando às pessoas uma nova linguagem de programação ou apenas desenvolvendo um novo compilador que nos permite vincular as duas linguagens?
Oh, certo. Seu chefe quer que você escreva C ++ e você prefere não. Atualize seu currículo e encontre um novo emprego.