Компилирование языков более высокого уровня в языки более низкого уровня - это торт. Есть бесчисленное множество примеров того, как это делается. Не вдаваясь в подробности, мы можем указать на ранние компиляторы C ++, которые компилировались до C.
Однако, когда вы начинаете бросать «чистый» и «читаемый» в микс, все становится действительно сложно. Чистый, читаемый код выражает смысл и намерение написанного вами. Компьютеры, как известно, плохо интерпретируют и создают смысл. Вы, скорее всего, в конечном итоге с именами переменных, int_147
чем input_buffer_length
. Конечно, если вы действительно хотите, чтобы этот проект работал, вы могли бы участвовать в масштабном AI-проекте, чтобы обработать преобразование вашего Lisp в какой-то прилично читаемый C ++, но, если честно, компиляторы Common Lisp чертовски хороши в том, что они делают ,
Полезность этого важнее, чем сложность генерации C ++ из Lisp. Какой цели он будет служить для читабельности созданного C ++? Если Lisp - ваш исходный код, промежуточные представления не должны иметь значения. Если вы хотите иметь возможность передавать C ++ программистам, которые не понимают ваш оригинальный Lisp, у вас теперь есть другая проблема. Что происходит, когда они хотят изменить ваш сгенерированный C ++? Что произойдет, если они напишут на C ++ вещи, которые не будут полностью переведены на ваш Lisp?
Допустим, мы решили это. Прошло десять лет, и, потратив сотни миллионов долларов на гранты DoD, мы создали этот мощный, сложный (но безупречный) движок языкового перевода, который может превратить Lisp в идиоматический C ++ и наоборот. Что мы действительно получили, что было бы лучше достичь, научив людей новому языку программирования или просто разработав новый компилятор, который позволит нам связать два языка?
О верно. Ваш начальник хочет, чтобы вы писали на C ++, а вы бы не хотели. Обновите свое резюме и найдите новую работу.