/ / Jak utworzyć kompilator języka C bez kompilatora macierzystego C - c, asemblera, kompilatora-budowy

Jak stworzyć kompilator C bez kompilatora C - c, asemblera, kompilatora-budowy

To proste pytanie. Jeśli do kompilacji kompilatora C potrzebny jest kompilator C ... Może bezpośrednio z kodem zespołu? Być może jądro zapewnia podstawowe narzędzie do konwersji C do asemblera i tworzenia eskalującej infrastruktury? To także głupie pytanie, ale naprawdę jestem zainteresowany, jak zaprojektować system operacyjny (nie ja) od 0 do interakcji z procesorem i pamięcią.

Odpowiedzi:

8 dla odpowiedzi № 1

To pochodzi od frazy "podciąganie się przez swoje bootstraps", jeśli chcesz to sprawdzić. Bootstrapping jest prostym procesem, ale wymaga dużo pracy.

  1. Napisz kompilator C w innym języku.

  2. Napisz kompilator C w C.

  3. Użyj kompilatora z kroku 1, aby skompilować kompilator z kroku 2.

Niektóre inne kompilatory muszą być bootstrapowane, nie tylko te dla C. Na przykład GHC musi być użyty do kompilacji.

Zwróć uwagę, że ładowanie jest konieczne tylko wtedy, gdy spełnione są oba poniższe warunki:

  1. Wymyślasz nowy język, więc nie ma istniejących kompilatorów.

  2. Chcesz napisać kompilator w języku, który kompilujesz.

To nie ma nic wspólnego z systemami operacyjnymi. Jeśli projektujesz system operacyjny, masz już wystarczająco dużo pracy przed sobą. Jeśli twój nowy system operacyjny nie ma jeszcze kompilatora C, możesz skompilować kompilator z innego systemu operacyjnego. To znacznie mniej pracy - może kilka godzin lub dni, zamiast miesięcy lub lat.


3 dla odpowiedzi № 2

Wygląda na to, że to jest zadanie dla tcc (http://bellard.org/tcc/), kompilator Tiny C.

Jest to najmniejszy kompilator C, jaki znam, może skompilować większy po jego przeportowaniu, a także liczne przewodniki na temat przenoszenia go do systemów niestandardowych.