Ich hörte von dem Huhn und dem Ei und dem Bootstrapping. Ich habe ein paar Fragen.
Was hat den ersten 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.
compiler-construction
machine-instruction
Shawn Mclean
quelle
quelle
Antworten:
Montageanweisungen sind (im Allgemeinen) eine direkte Zuordnung zu Opcodes, bei denen es sich um (Mehr-) Bytewerte des Maschinencodes handelt, die vom Prozessor direkt interpretiert werden können. Es ist durchaus möglich, ein Programm direkt in Opcodes zu schreiben, indem Sie sie aus einer Tabelle (wie z. B. dieser für den 6039-Mikroprozessor ) nachschlagen, in der sie mit den entsprechenden Montageanweisungen aufgelistet sind, und die Speicheradressen / Offsets für bestimmte Dinge von Hand bestimmen wie Sprünge.
Die ersten Programme wurden genau auf diese Weise erstellt - handgeschriebene Opcodes.
In den meisten Fällen ist es jedoch einfacher, einen Assembler zum "Kompilieren" von Assembler-Code zu verwenden, der diese Opcode-Suchvorgänge automatisch durchführt und bei der Berechnung von Adressen / Offsets für benannte Sprungbezeichnungen usw. hilfreich ist.
Die ersten Monteure wurden von Hand geschrieben. Diese Assembler könnten dann verwendet werden, um kompliziertere Assembler zusammenzusetzen, die dann verwendet werden könnten, um Compiler zusammenzusetzen, die für übergeordnete Sprachen geschrieben wurden, und so weiter. Dieser Prozess des iterativen Schreibens der Tools zur Vereinfachung der Erstellung der nächsten Tools wird als Bootstrapping bezeichnet (wie von David Rabinowitz in seiner Antwort erwähnt) .
quelle
Bitte lesen Sie mehr über das Compiler-Bootstrapping und die Geschichte des Compiler-Schreibens
Die Idee ist, einen sehr einfachen Compiler direkt in Maschinencode zu schreiben, damit einen komplexeren Compiler zu schreiben, mit dem zweiten einen dritten zu erstellen und so weiter, bis Sie einen Compiler mit vollem Funktionsumfang haben.
quelle
Eier gingen Hühnern lange voraus. Die Antwort auf die meisten Probleme mit "Huhn und Ei" ist dieselbe: Evolution. Einige Menschen haben auch 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 Binär übersetzen. Dies ist ein viel einfacherer Vorgang als das Kompilieren, da die Assemblersprache nur eine symbolische Form der Maschinensprache ist, die Opcode-Namen anstelle von Zahlen verwendet, Adressen mit Symbolen darstellt usw. 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 der B-Compiler kompiliert wurde, wurde in der Assemblersprache PDP-7 geschrieben.
quelle
Woz sagte in einem seiner öffentlichen Vorträge, dass er sich zu Beginn keinen Compiler leisten könne und deshalb von Hand auf Papier zu Binärdateien kompiliert habe. Wenn Sie etwas noch wilderes sehen möchten, lesen Sie die Bedingungen, unter denen Bill Gates und Paul Allen das BASIC für den Altair 8800 geschrieben haben.
In Bezug auf "Schreiben eines Computers in Binärform" - treten Sie einen Schritt zurück vom Programmieren und denken Sie darüber nach, was die frühen Computer waren. High-Level-Sachen gab es noch nicht - du hast über alles auf der Low-Level nachgedacht, weil das alles war. Sie hatten Hardware, die grundlegende Logik und Arithmetik ausführen konnte, die Sie über Maschinencode manipulieren (der nur aus einer kompilierten Baugruppe besteht - Amber erklärt, warum dieser Teil nicht schwer von Hand zu erledigen ist), und Sie wollten, dass diese Hardware bestimmte mathematische Leistungen erbringt. Sie haben sich keine Sorgen um das nicht vorhandene Betriebssystem gemacht, sondern nur der Hardware (in der Baugruppe) mitgeteilt, wie die von Ihnen eingegebenen Zahlen zu manipulieren sind. 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, durch die sich Computer wie Magie anfühlen, empfehle ich dringend, CODE von Charles Petzold und / oder The Elements of Computing Systems zu lesen . Mit diesen Grundkenntnissen, die nur über grundlegende Programmierkenntnisse verfügen, können Sie Computer von oben bis unten verstehen. Offensichtlich kann man keine Komposition bekommen. sci. oder EE-Abschluss nach nur 2 Büchern, aber ich kann als autodidaktischer Programmierer sagen, der die formale Ausbildung verpasst hat: Diese Bücher haben meine Welt erschüttert!
quelle
Ein Mensch tat es. Lesen Sie mehr über das A-0-System :
quelle
Die ersten Programme wurden in Maschinencode (nicht Assemblersprache) geschrieben - tatsächliche Zahlen, 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 Codebits zu patchen oder Thunks zu erstellen. Ich erinnere mich, wie ich Zahlen in Basic-Strings eingegeben habe, die dann als kleine, schnelle Unterprogramme auf frühen Mikros ausgeführt wurden. Ich erinnere mich auch daran, wie ich die Schalter auf der Vorderseite eines PDP-11 umgeschaltet habe, um ein Bootloader-Programm für einen Universitätskurs in seinen Speicher einzugeben.
Diese Programme wurden manchmal verwendet, um Textdateien zu verarbeiten, um andere Programme zu erstellen, und voila-Programmiersprachen wurden erstellt.
quelle