Stroustrup twierdzi, że Cfront, pierwszy kompilator C ++, został napisany w C ++ ( FAQ Stroustrup ).
Ale jak to możliwe, że pierwszy kompilator C ++ zostanie napisany w C ++?
Kod, który składa się na kompilator, również musi zostać skompilowany, a zatem pierwszy kompilator C ++ nie mógł zostać napisany w C ++, prawda?
Odpowiedzi:
Klucz jest tutaj:
Tak więc pierwsza wersja Cfront nie została napisana w C ++, a raczej w języku pośrednim. Możliwość tworzenia kompilatorów C i preprocesorów bezpośrednio w C doprowadziła do wielu innowacji (i ogromnych dziur bezpieczeństwa ) w C. Więc piszesz nowego preprosessora, który zamienia kod „C with Classes” w prosty C (ponieważ proste C może zrobić cokolwiek), a następnie używasz „C z klasami”, aby napisać kompilator C ++ (nie to, że nie możesz tego zrobić w C, tylko zajmie to chwilę), a następnie używasz tego kompilatora C ++, aby napisać bardziej wydajny / kompletny kompilator w C ++. Rozumiem?
źródło
Został załadowany. Jak tylko funkcja C ++ została dodana do frontu, wtedy front mógł również użyć tej funkcji od tego momentu (ale nie w celu jej implementacji). Działało to, ponieważ cfront miał możliwość konwersji kodu C ++ na kod C. Jeśli więc pojawi się jakaś nowa platforma, możesz użyć cfront na innej platformie, aby przekonwertować cfront z C ++ na C, a następnie użyć kompilatora C nowej platformy, aby zakończyć kompilację z C do kodu obiektowego.
źródło
Myślę, że BS odpowiada na to pytanie:
Najpierw stworzył coś, co nazwał „C with Classes” zaimplementowanym przez prosty preprocesor w C. To był w zasadzie C ++, ale preprocesor nie sprawdzał wcale lub wcale. Następnie użył go do napisania Cfront, potężniejszej wersji translatora C ++ na C, wraz ze sprawdzaniem typu, tablicami symboli itp.
źródło
Dodam tę odpowiedź, ponieważ żadna odpowiedź nie obejmowała tego aspektu.
Technicznie nie potrzebujesz oprogramowania do kompilacji kodu. Tak długo, jak dysponujesz niezbędnymi specyfikacjami kompilatora, możesz ręcznie dokonać rzeczywistej kompilacji. Nie w ten sposób skompilowano pierwszy kompilator C ++. Mówię tylko, że to możliwe.
Porównaj z językiem asemblera. Kiedy były używane we wczesnych dniach, nie było oprogramowania asemblera do konwersji kodu asemblera na kod maszynowy. Dokonano tego ręcznie, ale język asemblera dał programistom lepszy przegląd.
źródło