Jak uruchamiane są gcc/g++?

To mnie męczy od jakiegoś czasu. Jak GCC / g++ się kompilują? Domyślam się, że każda wersja jest kompilowana z wcześniej zbudowaną wersją. Czy to prawda? A jeśli tak, to czy to znaczy, że najstarsze wersje g++ / gcc zostały napisane w assembly?

Author: pmr, 2012-02-24

1 answers

Najstarsza wersja GCC została skompilowana przy użyciu innego kompilatora C, ponieważ były inne, gdy została napisana. Pierwszy kompilator C w historii (ok. 1973, IIRC) został zaimplementowany albo w PDP-11 assembly, albo w poprzedzającym go języku programowania B, ale w każdym przypadku kompilator B został napisany w assembly. Podobnie, pierwszy kompilator C++ (CPre/Cfront, 1979-1983) został prawdopodobnie najpierw zaimplementowany w C, a następnie przepisany w C++.

Kiedy kompilujesz GCC lub jakikolwiek inny kompilator, pełna kolejność budowania to:

  1. Zbuduj nową wersję GCC z istniejącym kompilatorem C
  2. Przebuduj nową wersję GCC z tą, którą właśnie zbudowałeś
  3. (opcjonalnie) powtórz Krok 2 do celów weryfikacji.

Ten proces nazywa się bootstrapping . Testuje zdolność kompilatora do kompilacji i upewnia się, że kompilator wynikowy jest zbudowany ze wszystkimi optymalizacjami, które sam narzędzia.

EDIT : Drew Dormann w komentarzach wskazuje na relację Bjarne Stroustrupa z najwcześniejszej implementacji C++. W 1997 roku, w wyniku zmian wprowadzonych przez Stroustrup, został on zaimplementowany w C++, ale został przetłumaczony przez to, co Stroustrup nazywa "preprocesorem" z C++ do C; nie jest to pełny kompilator według jego definicji, ale nadal C++ był bootstrapped w C.

 169
Author: Fred Foo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 11:10:13