wake-up-neo.com

Wie wurde der erste Compiler geschrieben?

Ich hörte von dem Huhn und dem Ei und dem Bootstrapping. Ich habe ein paar Fragen.

Was hat der erste Compiler geschrieben, der etwas in binäre Anweisungen konvertiert hat?

Wird die Assembly kompiliert oder in binäre Anweisungen übersetzt?

Es fällt mir schwer zu glauben, dass sie einen Compiler in Binärform geschrieben haben.

157
Shawn Mclean

Montageanweisungen sind (im Allgemeinen) eine direkte Zuordnung zu Opcodes, die (Mehr-) Byte-Werte des Maschinencodes sind, die vom Prozessor direkt interpretiert werden können. Es ist durchaus möglich, ein Programm in Opcodes direkt zu schreiben, indem Sie sie aus einer Tabelle (wie z. B. diese für den Mikroprozessor 6039 ) nachschlagen, in der sie mit den entsprechenden Montageanweisungen aufgelistet sind, und Bestimmen von Speicheradressen/Offsets für Dinge wie Sprünge.

Die ersten Programme wurden genau auf diese Weise erstellt - handgeschriebene Opcodes.

Meistens ist es jedoch einfacher, Assembly-Code mit einem Assembler zu "kompilieren", der diese Opcode-Lookups automatisch durchführt und bei der Berechnung von Adressen/Offsets für benannte Sprungmarken usw. hilfreich ist.

Die ersten Monteure wurden von Hand geschrieben. Diese Assembler könnten dann zum Assemblieren komplizierterer Assembler verwendet werden, die dann zum Assemblieren von Compilern verwendet werden könnten, die für höhere Sprachen usw. geschrieben wurden. Dieser Prozess des iterativen Schreibens der Werkzeuge zur Vereinfachung der Erstellung des nächsten Werkzeugsatzes wird (wie von David Rabinowitz in seiner Antwort erwähnt) Bootstrapping genannt.

128
Amber

Bitte lesen Sie über Compiler-Bootstrapping und die Geschichte des Compiler-Schreibens

Die Idee ist, einen sehr einfachen Compiler direkt in Maschinencode zu schreiben, einen komplexeren Compiler damit zu schreiben, einen dritten Compiler mit dem zweiten zu erstellen und so weiter, bis Sie einen Compiler mit vollem Funktionsumfang haben.

41

Eier gingen lange Hühnern voraus. Die Antwort auf die meisten Probleme mit Hühnern und Eiern ist dieselbe: Evolution. Einige Menschen haben Probleme, an die biologische Evolution zu glauben, aber Unglaube ist kein Argument (google argumentum ad ignorantiam).

Um Ihre Frage direkt zu beantworten: Der erste Compiler wurde (von einem Menschen) in einer Assemblersprache geschrieben - ein Programm namens Assembler würde Assemblersprache in übersetzen binär; Dies ist viel einfacher als das Kompilieren, da die Assembler-Sprache nur eine symbolische Form der Maschinensprache ist, die Opcode-Namen anstelle von Zahlen verwendet, Adressen mit Symbolen darstellt und so weiter. Viele nachfolgende Compiler wurden ebenfalls in einer Assemblersprache geschrieben. Der erste C-Compiler war jedoch ein modifizierter B-Compiler, der in [~ # ~] b [~ # ~] geschrieben wurde. Der erste B-Compiler wurde in [~ # ~] tmg [~ # ~] geschrieben. Der TMG-Compiler, mit dem dieser B-Compiler kompiliert wurde, wurde in der PDP-7-Assemblersprache geschrieben.

33
Jim Balter

Woz sagte in einem seiner öffentlichen Vorträge, als er anfing, könne er sich keinen Compiler leisten, weshalb er die Binärdatei von Hand auf Papier kompilierte. Wenn Sie etwas noch wilderes sehen möchten, lesen Sie die Bedingungen, unter denen Bill Gates und Paul Allen haben das BASIC für den Altair 8800 geschrieben.

In Bezug auf "Schreiben eines Computers in Binärform" - treten Sie einen Schritt zurück vom Programmieren und überlegen Sie, was die frühen Computer waren. High-Level-Sachen gab es noch nicht - du hast an alles auf dem Low-Level gedacht, weil das alles war. Sie verfügten über Hardware, die grundlegende Logik und Arithmetik beherrschte, die Sie über Maschinencode (der nur in Assembly kompiliert wurde - Amber erklärt, warum dieser Teil nicht von Hand schwierig ist) manipulieren konnten, und Sie wollten, dass diese Hardware bestimmte mathematische Höchstleistungen erbringt. Sie haben sich nicht um das nicht vorhandene Betriebssystem gekümmert, sondern nur der Hardware (in Assembly) mitgeteilt, wie Sie die eingegebenen Zahlen bearbeiten sollen. Es war nur ein großer Taschenrechner. Der Computer von heute wurde eine Abstraktion nach der anderen gebaut.

Wenn Sie die Barriere überwinden möchten, die Computer magisch erscheinen lässt, empfehle ich dringend, CODE von Charles Petzold und/oder The Elements of Computing Systems zu lesen. Mit diesen wunderbar zugänglichen Büchern, die nur über grundlegende Programmierkenntnisse verfügen, können Sie Computer von oben bis unten verstehen. Offensichtlich kann man keine Comp bekommen. sci. oder EE-Abschluss nach nur 2 Büchern, aber ich kann als Autodidakt sagen, der die formale Ausbildung verpasst hat: Diese Bücher haben meine Welt erschüttert!

24
Dinah

Was hat der erste Compiler geschrieben, der etwas in binäre Anweisungen konvertiert hat?

Ein Mensch hat es getan. Lesen Sie mehr über das A-0-System :

1952 vollendete Grace Hopper ihren ersten Compiler für Sperry, bekannt als A-0. Das A-0-System bestand aus einer Reihe von Anweisungen, mit denen symbolischer mathematischer Code in Maschinensprache übersetzt werden konnte. Bei der Produktion von A-0 nahm sie alle Unterprogramme, die sie im Laufe der Jahre gesammelt hatte, und brachte sie auf Band. Jede Routine erhielt eine Rufnummer, damit die Maschine sie auf dem Band finden konnte. "Alles, was ich tun musste, war, eine Reihe von Rufnummern aufzuschreiben, sie vom Computer auf dem Band suchen zu lassen, sie herüberzubringen und die Ergänzungen vorzunehmen. Dies war der erste Compiler", wie von Grace beschrieben.

9
Sinan Ünür

Die ersten Programme wurden in Maschinencode (nicht in Assemblersprache) geschrieben - tatsächliche Nummern, die mit Schaltern in den Computerspeicher eingesteckt wurden. Wir haben einen langen Weg zurückgelegt ...

Manchmal geschieht dies immer noch in geringem Umfang - um kleine Codestücke zu patchen oder Kniffe zu erzeugen. Ich erinnere mich an das Eintippen von Zahlen in Basic-Strings, die dann als kleine, schnelle Subroutinen auf frühen Mikros ausgeführt wurden. Ich erinnere mich auch, wie ich Schalter auf der Vorderseite eines PDP-11 umschaltete, um ein Bootloader-Programm für einen Universitätskurs in den Speicher zu laden.

Diese Programme wurden manchmal verwendet, um Textdateien zu verarbeiten, um andere Programme zu erstellen, und es wurden Voila-Programmiersprachen erstellt.

8
Michael Burr