Компіляція мов вищого рівня до мов нижчого рівня - це торт. Існує незліченна кількість прикладів цього. Не виходячи з більшої частини дотичної, ми можемо вказати на ранні компілятори C ++, які зібрані до C.
Коли ви починаєте кидати в суміш «чисте» та «читабельне», все стає справді важким. Чистий, читабельний код виражає значення та наміри того, що ви писали. Комп'ютери, як відомо, погано інтерпретують та створюють значення. Ви, швидше за все, отримаєте названі змінні, int_147
ніж input_buffer_length
. Звичайно, якщо ви дійсно хотіли, щоб цей проект працював, ви можете взяти участь у масштабному проекті AI, щоб перетворити ваш Lisp на якийсь гідно читабельний C ++, але, якщо чесно сказати, звичайні компілятори Lisp досить добре трапляються в тому, що вони роблять .
Більш важливою, ніж складність генерації C ++ з Lisp, є корисність цього. Якій меті він послужив би читаному створеному C ++? Якщо Lisp є вашим вихідним кодом, проміжні представлення повинні бути неактуальними. Якщо ви хочете передати C ++ програмістам, які не розуміють ваш оригінал Lisp, у вас зараз є ще одна проблема. Що станеться, коли вони хочуть змінити ваш створений C ++? Що станеться, якщо вони пишуть речі на C ++, які не чітко перекладаються на ваш Lisp?
Скажімо, ми це вирішили. Це десятиліття пізніше, і, спалюючи сотні мільйонів доларів дотаційних грошей на DoD, ми створили цей масивний, складний (але бездоганний) механізм перекладу мови, який може перетворити Lisp на ідіоматичний C ++ і навпаки. Що ми насправді здобули, що не було б краще досягти, навчаючи людей новій мові програмування або просто розробляючи новий компілятор, який дозволяє нам зв’язувати дві мови?
Авжеж. Ваш начальник хоче, щоб ви написали C ++, а ви краще не зробили це. Оновіть своє резюме та знайдіть нову роботу.