Kompilowanie języków wyższego poziomu na języki niższego poziomu to ciasto. Istnieją niezliczone przykłady tego. Bez większego znaczenia, możemy wskazać wczesne kompilatory C ++, które skompilowały się do C.
Kiedy jednak zaczniesz wrzucać do miksu „czyste” i „czytelne”, sprawy stają się naprawdę trudne. Czysty, czytelny kod wyraża znaczenie i cel tego, co piszesz. Komputery notorycznie źle interpretują i tworzą znaczenie. Bardziej prawdopodobne jest, że skończysz z nazwanymi zmiennymi int_147
niż input_buffer_length
. Oczywiście, jeśli naprawdę chcesz, aby ten projekt działał, możesz zaangażować się w ogromny projekt sztucznej inteligencji, aby poradzić sobie z konwersją Lisp do jakiegoś przyzwoicie czytelnego C ++, ale, szczerze mówiąc, kompilatory Common Lisp są naprawdę cholernie dobre w tym, co robią .
Ważniejsza niż trudność generowania C ++ z Lisp jest przydatność tego. W jakim celu wygenerowany C ++ byłby czytelny? Jeśli Lisp jest twoim kodem źródłowym, reprezentacje pośrednie powinny być nieistotne. Jeśli chcesz mieć możliwość przekazania C ++ programistom, którzy nie rozumieją twojego oryginalnego Lisp, masz teraz inny problem. Co dzieje się, gdy chcą zmodyfikować wygenerowany C ++? Co się stanie, jeśli napiszą w C ++ rzeczy, które nie tłumaczą czysto na twój Lisp?
Powiedzmy, że to rozwiązaliśmy. Dziesięć lat później, po przepłaceniu setek milionów dolarów dotacji DoD, stworzyliśmy ten ogromny, złożony (ale bezbłędny) silnik tłumaczący język, który może zmienić Lisp w idiomatyczne C ++ i odwrotnie. Co tak naprawdę zyskaliśmy, czego nie osiągnęlibyśmy lepiej, ucząc ludzi nowego języka programowania lub opracowując nowy kompilator, który pozwala nam łączyć oba języki?
Och, racja. Twój szef chce, żebyś napisał C ++, a wolisz tego nie robić. Zaktualizuj swoje CV i znajdź nową pracę.