La compilazione di linguaggi di livello superiore a quelli di livello inferiore è una torta. Ci sono innumerevoli esempi di ciò che viene fatto. Senza andare su molto di una tangente, possiamo puntare ai primi compilatori C ++ compilati fino a C.
Quando inizi a lanciare "pulito" e "leggibile" nel mix, tuttavia, le cose diventano davvero difficili. Il codice pulito e leggibile esprime il significato e l'intento di ciò che stavi scrivendo. I computer sono notoriamente cattivi nell'interpretazione e amp; creare significato. È più probabile che tu finisca con le variabili denominate int_147
rispetto a input_buffer_length
. Certo, se veramente volevi far funzionare questo progetto, potresti impegnarti in un enorme progetto di intelligenza artificiale per gestire la conversione del tuo Lisp in una sorta di C ++ decentemente leggibile ma, per essere onesti, i compilatori Common Lisp sono piuttosto fottutamente bravo in quello che fanno.
Più importante della difficoltà di generare C ++ da un Lisp è l'utilità di questo. Quale scopo servirebbe a rendere leggibile il C ++ generato? Se il Lisp è il tuo codice sorgente, le rappresentazioni intermedie dovrebbero essere irrilevanti. Se vuoi essere in grado di consegnare il C ++ ai programmatori che non capiscono il tuo Lisp originale, ora hai un altro problema. Cosa succede quando vogliono modificare il C ++ generato? Cosa succede se scrivono cose in C ++ che non si traducono in modo pulito sul tuo Lisp?
Diciamo che l'abbiamo risolto. È un decennio più tardi e, dopo aver bruciato centinaia di milioni di dollari di donazioni del Dipartimento della Difesa, abbiamo costruito questo massiccio, complesso (ma impeccabile) motore di traduzione linguistica che può trasformare il Lisp in C ++ idiomatico e viceversa. Cosa abbiamo veramente guadagnato che non sarebbe stato meglio realizzato insegnando alle persone un nuovo linguaggio di programmazione o semplicemente sviluppando un nuovo compilatore che ci permettesse di collegare le due lingue?
Oh, giusto. Il tuo capo vuole che tu scriva C ++ e preferiresti non farlo. Aggiorna il tuo curriculum e amp; trova un nuovo lavoro.