Ist der gcc C-Compiler in C selbst geschrieben?

Lesezeit: 5 Minuten

Ist der gcc C-Compiler in C selbst geschrieben? Oder ist es in Assembly geschrieben? Wenn der Compiler in C geschrieben ist, welcher Compiler wird dann zum Kompilieren des Compilercodes verwendet?

  • Ja ist es (meistens). Natürlich braucht man einen C-Compiler, um C zu kompilieren, also gibt es, wie bei den meisten Compilern, eine Reihe von “Bootstrap”-Phasen. Die allgemeine Idee wird unter behandelt Installation von GCC: Building und Installation von GCC – LFS.

    Benutzer166390

    14. April 2011 um 1:05 Uhr


  • Workstations verschiedener Marken hatten in den 1980er und frühen 90er Jahren ihre eigenen Unix-ähnlichen Umgebungen mit C-Compiler, Tools usw., die sich alle ein wenig voneinander unterschieden. Mit dem GCC-Quelltext könnten Sie eine anfängliche Kompilierung von gcc auf einer dieser Plattformen durchführen und dann gcc ein paar Mal mit sich selbst kompilieren, um mehr oder weniger nach einem festen Punkt zu suchen.

    – Paulus

    14. April 2011 um 2:24 Uhr

Benutzeravatar von Rob Napier
Rob Napier

Die spezifische Geschichte zu gcc ist unter angegeben GCC-Wiki. Der allgemeinere Punkt ist, dass Compiler im Allgemeinen ursprünglich mit einem anderen Compiler kompiliert werden, bis sie leistungsfähig genug sind, um sich selbst zu kompilieren. Alternativ ist es möglich, einen einfachen Compiler zu schreiben, der eine Teilmenge Ihrer Features in Assembler verarbeiten kann, und von dort aus aufzubauen. Aber auch dies wird fast nie mehr benötigt. Es gibt viele Compiler in einer Vielzahl von Sprachen. Selbst als Stephen Johnson pcc schrieb (einer der ersten C-Compiler), gab es neben vielen anderen Sprachen auch Compiler für B. gcc hatte ursprünglich mehrere Compiler zur Auswahl, um es zu bauen, und RMS sagt, dass er den Pastel-Compiler zumindest während seiner anfänglichen Entwicklung verwendet hat.

Denken Sie daran, dass ein C-Compiler nicht in C geschrieben sein muss. Sie könnten ihn auch in Perl schreiben, wenn Sie wollten. Es ist nicht erforderlich, dass ein Compiler für eine bestimmte Plattform ursprünglich auf dieser Plattform geschrieben wurde (eingebettete Systeme werden fast immer auf einem anderen System kompiliert). Es gibt also viele Möglichkeiten, sich Bootstrapping zu besorgen.

Diese Frage hat einige interessante Feinheiten im Zusammenhang mit der ersten Instanz des Bootstrappings des Compilers. Wenn Sie sehr schlau wären, könnten Sie diesen Bootstrap verwenden, um dies zu tun etwas Unglaubliches, Brillantes und Erschreckendes.

  • Woah, dieser zweite Artikel, auf den Sie verlinkt haben, ist wahnsinnig clever.

    – Ponkadoodle

    18. Juli 2011 um 4:22 Uhr

  • Danke für den tollen Bootstrapping-Link. Ich hatte angenommen, dass Compiler immer in einfacheren Sprachen geschrieben wurden, bis hin zum Maschinencode für irgendwie dieser Grund. (Was ist zum Beispiel, wenn Sie feststellen, dass die Binärdatei für Ihren Compiler einen Fehler enthält? Dies ist natürlich ein viel stärkeres Beispiel.) Was sind also die Vorteile, wenn Sie den Compiler in seiner eigenen Sprache schreiben? Machen sich extrem paranoide Leute darüber Sorgen und bauen ihre Compiler ohne “Selbst”-Bootstrapping?

    – RoG

    9. März 2017 um 14:18 Uhr

  • Manche Sprachgruppen betrachten es als Ehrenzeichen, sich selbst zusammenstellen zu können. Go hat kürzlich einen großen Schub in diese Richtung gemacht. Swift hingegen hat derzeit insbesondere keine Pläne, seinen Compiler in Swift umzuschreiben. Beachten Sie jedoch, dass GCC immer in C geschrieben wurde. Es wurde nur mit anderen Compilern kompiliert. Aber wenn alle C-Compiler in BCPL geschrieben wären, würde das nichts in Bezug auf Paranoia beheben. Es verschiebt das Problem nur einen Schritt zurück. (Sie würden die gleichen Paranoia-Vorteile erhalten, wenn Sie einfach GCC w / clang kompilieren.)

    – Rob Napier

    9. März 2017 um 14:35 Uhr

  • Beachten Sie, dass gcc eine Richtlinie hat, dass die gcc-Hauptversion X immer mit der gcc-Hauptversion X-1 kompiliert werden kann, sodass alle neuen Funktionen, die dem Compiler in X hinzugefügt werden, nur in der gcc-Quelle selbst von X+1 verwendet werden können. zB sollten Sie in der Lage sein, jede gcc Version 9 unabhängig von der Nebenversionsnummer mit jeder gcc 8 zu kompilieren, wiederum unabhängig von der Nebenversion.

    – Baruch

    5. November 2020 um 8:53 Uhr

  • Wenn Sie das Paranoia-Problem wirklich und nachweislich lösen wollten, müssten Sie es tun Finde die untere Schildkröte.

    – thariqfahry

    29. September um 9:09 Uhr

Ursprünglich war es in einer Assemblersprache geschrieben, dann begann es selbst Hundefutter zu machen.

  • Ich habe keine Verweise auf RMS mit Assembler für den ursprünglichen Bootstrap gesehen. Was ist deine Quelle dafür? Er hatte mehrere andere Compiler, mit denen er booten konnte, also scheint das eine Menge Arbeit zu sein.

    – Rob Napier

    14. April 2011 um 1:27 Uhr

  • Ich dachte, der Begriff war Bootstrap.

    – Martin York

    14. April 2011 um 6:45 Uhr

  • hahaha Ich habe das vor ein paar Wochen gelesen und dachte, du wärst mit diesem Ausdruck verrückt, wusste nicht, dass es Standard ist. Gute Show, Herr! en.wikipedia.org/wiki/Eating_your_own_dog_food

    Benutzer2918461

    1. März 2017 um 14:55 Uhr

Benutzeravatar von oo_miguel
oo_miguel

Während dies offensichtlich nur ein sehr grober Indikator ist, habe ich das schnell gefunden Auflistung auf der gcc-5.1.0-src/gcc/ Verzeichnis interessant. Dieses Verzeichnis enthält die Hauptquellen von GCC selbst (mit Ausnahme der Laufzeitbibliotheken).

Hier sind die Top-Dateianzahl (über 100) gruppiert durch Erweiterung von C- und C++-Dateien dominiert.

    112 .opt
    118 .def
    140 .cc
    185 .x
    250 .exp
    353 .md
    366 .mm
    414 .f
    430 .f03
    521 .m
    625 .a
   1082 .go
   1371 .h
   1602 .ads
   1655 .adb
   1828 .ada
   3860 .f90
  11231 .C        // C++ 
  23811 .c        // C 

Bitte beachten Sie das heutzutage GCC bezieht sich auf die GNU Compiler Collection, nicht nur auf den GNU C Compiler.

6.3 Das gcc-Unterverzeichnis

Das gcc-Verzeichnis enthält viele Dateien, die Teil der C-Quellen von GCC sind, andere Dateien, die als Teil des Konfigurations- und Build-Prozesses verwendet werden, sowie Unterverzeichnisse, einschließlich Dokumentation und einer Testsuite.

Bezug: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

Ist der gcc C-Compiler in C selbst geschrieben?

Nein, gcc wurde seit 2010 auf C++ migriert. Für mehr Details lesen
Der Wechsel von GCC zu C++

1420720cookie-checkIst der gcc C-Compiler in C selbst geschrieben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy