Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 14599|Antwort: 2

[C] Die C-Sprache ist so mächtig, in welcher Sprache ist sie geschrieben?

[Link kopieren]
Veröffentlicht am 28.09.2019 16:51:21 | | |
"In welcher Sprache ist C selbst geschrieben?"

Aus einer anderen Perspektive ist es so: Bevor die C-Sprache läuft, muss sie kompiliert werden, woher kommt also der C-Sprachcompiler? In welcher Sprache ist es geschrieben? Wenn es in C selbst geschrieben ist, gibt es dann zuerst ein Ei oder ein Huhn?

1

Nehmen wir an, es gibt keine Compiler auf der Welt, fangen wir mit Maschinensprache an und sehen uns an, wie.

Maschinensprache kann direkt von der CPU ausgeführt werden, ohne dass ein Compiler benötigt wird.

Dann gibt es noch Assemblersprache, obwohl Assemblersprache nur eine Eselsbrücke für Maschinensprache ist, aber sie muss ebenfalls in eine Maschinensprache kompiliert werden, um ausgeführt zu werden, sodass keine andere Wahl bleibt, als diesen ersten Compiler mit Maschinensprache zu schreiben (der in Zukunft nicht mehr verwendet wird).

Das Problem der Assemblersprache ist gelöst, und es ist ein großer Fortschritt; derzeit ist es möglich, Assemblersprache zu verwenden, um den C-Sprachcompiler zu schreiben, den wir als Vorläufer des C-Compilers ansehen.

Mit diesem Vorläufer kann man jedes C-Sprachprogramm kompilieren, also kann man einen Compiler in der C-Sprache selbst schreiben? Kompliere es einfach mit den Vorfahren.

Okay, nach so einer Ebene habe ich endlich einen Compiler in C geschrieben, was wirklich problematisch ist.

An diesem Punkt kann der vom vorherigen Paket geschriebene C-Compiler aufgegeben werden.

Natürlich konnte Pascal, wenn es vor C andere hochstufige Sprachen gab, wie Pascal, verwendet werden, um einen C-Compiler zu schreiben.

Der Kompilator des ersten Pascal soll in Fortran geschrieben worden sein. Als erste hochstufige Sprache sollte der Compiler von Fortran in Assemblersprache geschrieben sein.

2

Hier ist eine interessante Legende über den Compiler:

Der Legende nach ging Ken Thompson, einer der Erfinder von Unix, bei Bell Labs zu jedem Unix-Rechner, gab seinen Benutzernamen und sein Passwort ein und konnte sich über den Root-Modus einloggen!

Bell Labs ist voller Talente, und einige andere große Bullen haben sich geschworen, diese Schwachstelle zu finden, sie haben den C-Quellcode von Unix durchgelesen und schließlich die Login-Backdoor gefunden, und nachdem sie die Backdoor gereinigt hatten, haben sie Unix kompiliert und ausgeführt, aber Thompson konnte sich trotzdem einloggen.

Manche Leute denken, dass es ein Problem mit dem Compiler geben könnte und eine Backdoor beim Kompilieren von Unix implantiert wurde, weshalb sie einen Compiler in C umgeschrieben und Unix erneut mit einem neuen Compiler kompiliert haben.

Aber es funktioniert trotzdem nicht, Thompson kann sich trotzdem mit Root einloggen, was wirklich verheerend ist!

Später hat Thompson selbst das Geheimnis entschlüsselt, es war der erste C-Compiler mit einem Problem. Dieser Compiler wird natürlich beim Kompilieren von Unix-Quellcode in die Hintertür implantiert. Das reicht nicht aus. Was noch besser ist: Wenn du einen neuen Compiler in der C-Sprache schreibst, musst du ihn definitiv in Binärcode kompilieren. Was soll kompiliert werden? Benutze nur den ersten von Thompson geschriebenen Compiler. Okay, der von dir geschriebene Compiler wird verunreinigt sein, dein Compiler wird Unix erneut kompilieren. Ich werde auch eine Hintertür implantieren :-)

Apropos, ich erinnere mich an den XcodeGhost-Vorfall vor ein paar Jahren, der einfach bedeutet, dass ein trojanisches Pferd in Xcode implantiert wurde (heruntergeladen von inoffiziellen Kanälen), sodass die von XCode kompilierten iOS-Apps kontaminiert wurden und diese Apps von Hackern für illegale Zwecke genutzt werden konnten.

Obwohl dieser XCodeGhost weit von Thompsons entfernt ist, erinnert er uns daran, dass man beim Herunterladen von Software formelle Kanäle nutzen sollte, von der offiziellen Website herunterladen, nach dem HTTPS-Standard der Website suchen und sogar die Prüfsumme überprüfen sollte.

3

Manche Leute fragen vielleicht: Ich benutze Hui, um einen Hello World-Absatz zu schreiben, aber jemand kann damit einen komplexen Compiler schreiben? Ist das möglich?

Natürlich gab es bei der Entwicklung der ersten Unix-Generation keine C-Sprache, und Ken Thompson und Dennis Ritchie tippten Unix mit Fließbandlinien aus.   Die erste Version von WPS wurde von Qiu Bojun in Hui geschrieben, und der Compiler von Turbo Pascal wurde ebenfalls von Anders in Hui geschrieben, und die Fähigkeiten der Götter sind für gewöhnliche Menschen unvorstellbar.

Für Compiler ist es auch möglich, auf eine "Schneeball"-Weise zu entwickeln:

Nimmt man weiterhin die C-Sprache als Beispiel, kann die erste Version eine Teilmenge der C-Sprache auswählen, etwa nur grundlegende Datentypen, Prozesssteuerungsanweisungen und Funktionsaufrufe unterstützen...... Wir nennen diese Teilmenge C0.

Dann schreibe einen Compiler in Assembler und erhalte nur eine Teilmenge dieser Sprache C0, damit es viel einfacher zu schreiben ist.

Die C0-Sprache funktioniert, und dann erweitern wir diese Teilmenge, indem wir Structs, Zeiger, ...... hinzufügen und die neue Sprache C1 aufrufen.

Wer schreibt den Compiler für die C1-Sprache?   Natürlich ist es C0.

Wenn C1 funktioniert, erweitert man die Sprachfunktionen erneut, schreibt den Compiler mit C1 und holt C2.

Dann gibt es C3, C4......  Schließlich bekommst du die vollständige C-Sprache.

Dieser Prozess wird Bootstrapping genannt, und auf Chinesisch Bootstrapping.





Vorhergehend:Die neuen .NET Core-Funktionen veröffentlichen eine einzelne ausführbare Datei
Nächster:Warum arbeiten Programmierer endlos Überstunden?
Veröffentlicht am 29.09.2019 09:27:54 |
In welcher Sprache wird C selbst geschrieben?
Veröffentlicht am 01.10.2019 23:54:34 |
In welcher Sprache wird C selbst geschrieben?
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com