Was war zuerst da, der Compiler oder die Quelle?

17

Ich bin gespannt auf die Geburt des Compilers. Wie begann die Programmierung? Haben die Leute zuerst Hardware gebaut, die einen bestimmten Satz von Befehlen erkannt hat, oder haben die Leute eine Sprache definiert und dann Hardware darum gebaut? Und in einem verwandten Punkt, was war die erste Programmiersprache?

David Cowden
quelle
1
Eine der Unterfragen war eine eigene Frage: Was war die erste Programmiersprache, die für Computer geschrieben wurde? .
Mark Booth
Sicherlich ist das etwas, das Sie nachschlagen könnten ?
Caleb
@ Caleb lesen Sie die Kommentare in SkyDans Antwort ..
David Cowden
2
@Brian Gültige Annahme, erweist sich jedoch als falsch. Es ist überhaupt kein Hühnerei-Problem, es gibt eine sehr klare Antwort (Hinweis: Die am häufigsten gewählte unten ist falsch). Quellcode ist lange älter als Compiler.
Konrad Rudolph

Antworten:

30

Dies hat eine sehr klare Antwort: Quellcode stand an erster Stelle - mit großem Abstand.

Bevor wir die technischen Details erläutern, geben wir einen kurzen Überblick:

Die ersten Programmiersprachen wurden alle von Hand in Maschinensprache oder Assembler übersetzt . Die Idee, diese Übersetzung mithilfe einer Software (entweder über einen Compiler oder einen Evaluator) zu automatisieren, kam immer später und war alles andere als intuitiv.

Betrachten Sie dieses Zitat des Wikipedia-Artikels über FORTRAN, das die Zurückhaltung der Compiler zeigt:

… Der erste FORTRAN-Compiler [wurde] im April 1957 ausgeliefert. Dies war der erste optimierende Compiler, da die Kunden eine Programmiersprache auf hohem Niveau nur ungern verwendeten, wenn der Compiler Code generieren konnte, dessen Leistung mit der handcodierten Assemblersprache vergleichbar war . [Hervorhebung von mir]

=> Als der FORTRAN-Compiler auf den Markt kam (1957), programmierten die Leute bereits glücklich sowohl in Assemblersprache als auch in FORTRAN.

Ähnliches gilt für LISP (von Hackers & Painters ):

Steve Russell sagte, schau, warum programmiere ich diese Auswertung nicht ... und ich sagte zu ihm, ho, ho, du verwechselst Theorie und Praxis, diese Auswertung ist zum Lesen gedacht, nicht zum Rechnen. Aber er ging voran und tat es. Das heißt, er hat die Auswertung in meinem Artikel in IBM 704-Maschinencode kompiliert, den Fehler behoben und dies dann als Lisp-Interpreter beworben, was es sicherlich war. Zu diesem Zeitpunkt hatte Lisp im Wesentlichen die Form, die es heute hat ... "

Auch hier geht der Quellcode (in LISP) nicht nur dem Interpreter voraus, der letztere war im ersteren nicht einmal implizit enthalten.

Diese Entwicklungen sind jedoch relativ spät. Auch wenn man Charles Babbages Analytical Engine und Ada Lovelaces erstes Programm nicht berücksichtigt , gab es im 20. Jahrhundert Programmiersprachen , die älter waren als Compiler:

Konrad Zuses Plankalkül und das von Alonzo Church eingeführte mathematische Konstrukt der λ-Rechnung . Beide sind zweifellos formal festgelegte Programmiersprachen, hatten aber zu diesem Zeitpunkt noch keinen Compiler.

Um dies ins rechte Licht zu rücken, stammt die λ-Rechnung aus den 1930er Jahren, und Plankalkül wurde um 1945 entwickelt. Der erste FORTRAN-Compiler erschien dagegen 1957 (aber wieder drei Jahre nach der Spezifikation von FORTRAN).

Konrad Rudolph
quelle
Gute Antwort! Ich wusste nicht, dass Code früher von Hand kompiliert wurde, aber das macht Sinn.
ckb
10

Die Programmierung begann damit, dass Leute Maschinencode direkt in den Speicher, auf Lochkarten und Papierstreifen oder sogar auf Kurzschlussverbindungen auf einem Patchpanel schrieben. Ob die Hardware auf die Bedürfnisse der Software zugeschnitten ist oder umgekehrt, ist schwer zu sagen. Mit Sicherheit der früheste Entwurf für einen vollständig programmierbaren Computer, die Analytical Engine von Babbage , das erste dokumentierte Programm von Ada Lovelace .

In Bezug auf die erste Programmiersprache habe ich argumentiert, dass dies die Maschinensprache von Babbages Analyse-Engine war (aus der Frage: Was war die erste Programmiersprache, die für Computer geschrieben wurde? ).

Um die Frage in Ihrer Frage Titel zu beantworten, da Assemblersprache ist Quellcode und Assemblersprachen vorge Datum hochsprachiger , die in Assembler kompiliert werden können, kam der Quellcode zuerst.

Auch ein Compiler war noch nie nötig , nur praktisch.

Es ist durchaus möglich, Software direkt in den Speicher zu schreiben, wenn Sie die entsprechenden Op-Code- Tabellen gespeichert haben . Tatsächlich mussten Benutzer bei einigen frühen Computern den Bootstrap-Code über die Hex-Tastatur auf der Vorderseite eingeben , um sie zum Booten zu bringen. Sie konnten jedoch einen beliebigen Code eingeben, der ausgeführt werden sollte.

Mit zunehmender Komplexität von CPUs wird dies zwar schwieriger, aber ein einfacher Befehlssatz wie 6809 oder Z80 (der alle seltsamen indizierten Modi ignoriert) ist auch ohne Assembler relativ einfach zu programmieren , geschweige denn mit einem Compiler aus einer höheren Sprache.

Wenn Babbages Analyse-Engine jemals gebaut worden wäre, hätte es bestimmt einen Steampunk-Mel gegeben , der optimierte Programme direkt auf Webkarten geschrieben hätte.

Mark Booth
quelle
1
Haben Sie die Definition des Quellcodes in dem von Ihnen geposteten Wikipedia-Link tatsächlich gelesen? Wie oben erwähnt, ist der Maschinencode kein Quellcode. Und Maschinencode! = Montage. Maschinencode war zuerst da.
Occulus
@ MarkBooth Ich denke, MIPS und AVR sind noch einfacher ..
David Cowden
4
@occulus - Inwiefern ist Assemblersprache kein Quellcode ? Assemblersprache bildet eine Assemblersprache Befehl in einen Maschinencode und kann trivialer werden montiert in Ihrem Kopf, wenn Sie Ihre op - Code - Tabellen kennen. Ehrlich gesagt, Kinder in diesen Tagen ... * 8 ')
Mark Booth
1
Für mich Assembler - Sprache ist movl $0, -20(%rbp), während Maschinencode ist C745EC00000000, und es ist diese (na ja, so etwas wie es) , die zuerst von Hand eingegeben wurden oder aus Papierband lesen. Zur Frage , ob Maschinencode zählt als Quellcode , bin ich geneigt zu sagen , „was auch immer Ihr Boot schwimmt“. Wenn Sie es manuell einschalten, dann würde ich sagen, dass es zählt.
John Bode
@ JohnBode - Oh, ich stimme zu, aber angesichts der 1: 1-Entsprechung zwischen Montageanweisungen und Maschinencode-Anweisungen ist die Montage nur eine Frage der mechanischen Übersetzung (Montage), die Logik ist identisch. Die Kompilierung impliziert eine viel komplexere Viel-zu-Viel-Übersetzung (obwohl Occam eine Hochsprache ist und viele Occam- Anweisungen aufgrund ihrer MISC- Architektur 1: 1 auf Transputer- Anweisungen abgebildet sind . * 8 ').
Mark Booth
6

Der Compiler war der Erste . Es wurde direkt in Maschinencode geschrieben, da die Quelle ohne einen Compiler nicht kompiliert werden konnte.

Wikipedia-Artikel wie dieser über Computersprachen können die meisten Fragen beantworten. Wenn nicht, wählen Sie einfach eines der Bücher von Tanenbaum, wie Structured Computer Organization , das mehr Fragen beantworten kann, als Sie selbst stellen können :)

Genauer kann ich nichts sagen, denn Ihre Frage ist zu weit gefasst.

SkyDan
quelle
20
Es könnte auch argumentiert werden, dass die Quelle die erste war, da für die allerersten "Computer" die Quelle der Binärdatei entsprach (dh sie wurden direkt in der maschinenlesbaren Sprache programmiert).
Joachim Sauer
5
@Joachim Per Definition ist Quellcode ein lesbarer Text, der vom Compiler in Maschinencode übersetzt wird. Maschinencode selbst ist daher kein Quellcode.
SkyDan
11
Der Compiler war der erste, aber er wurde in biologischen neuronalen Netzen implementiert.
Den
8
Warum ist das so hoch gewählt? Es ist falsch. Quellcode in Hochsprachen (insbesondere λ-Kalkül, Plankalkül und LISP) ist sowohl Compilern als auch Dolmetschern weit voraus. Dies berücksichtigt nicht einmal die semi-formalen Programme, die Ada Lovelace geschrieben hat.
Konrad Rudolph
4
@ SkyDan Was ist Ihre Definition dann? Ich kenne keine vernünftige Definition, für die Ihre Antwort richtig ist (sowohl für "Compiler" als auch für "Quellcode in einer höheren Sprache" - geschweige denn für eine niedrigere Sprache).
Konrad Rudolph
4

Interpreter existierten vor Compilern, so dass Quellcode vor Compilern existierte.

Es gibt einige sehr interessante Beiträge über die Geschichte der Rechen hier . Der Quellcode für den FORTRAN II-Compiler sollte verfügbar sein, diese Links sind jedoch fehlerhaft.

Dieses Papier aus dem Jahr 1954 beschreibt den Whirlwhind-Interpreter.

Jon Strayer
quelle
1

Diese Frage steht im Mittelpunkt unserer semantischen Interpretation von 'Quellcode'. Wenn wir es als "textbasierte Computeranweisungen, die kompiliert werden" definieren, dann stand vermutlich ein Compiler an erster Stelle.

Ich bin eher geneigt, mich für etwas Autoritäreres zu entscheiden, wie zum Beispiel Mark Harmans Artikel "Warum Quellcode-Analyse und -Manipulation immer wichtig sein werden", der auf der 10. Internationalen IEEE-Arbeitskonferenz über Quellcode-Analyse und -Manipulation vorgestellt wurde

Definition 1 (Quellcode): Aus Gründen der Klarheit wird unter "Quellcode" jede vollständig ausführbare Beschreibung eines Softwaresystems verstanden. Es ist daher so ausgelegt, dass es Maschinencode, Sprachen auf sehr hohem Niveau und ausführbare grafische Darstellungen von Systemen enthält.

Und ich denke, Ihre Antwort ist implizit in dieser Definition enthalten - der Quellcode war mit Sicherheit der erste.

Kirk Broadhurst
quelle
"Vermutlich stand ein Compiler an erster Stelle" - nur wenn Sie "kompiliert" als "von einem automatischen Tool übersetzt" und nicht als "von Hand in Maschinencode übersetzt" definieren.
Konrad Rudolph
Sehr interessantes Papier. Ich mag diese Definition des Quellcodes - obwohl es meine Frage wirklich eine Nicht-Frage macht ..
David Cowden
@KonradRudolph ist nicht die Einheit, die die Kompilierung durchführt, ob es sich um eine Maschine, einen Menschen oder eine göttliche Intervention handelt, die als "Compiler" bezeichnet wird?
Kirk Broadhurst
0

Die Algorithmen wurden auf Papier aussortiert, dann wurden die Alus physikalisch / mechanisch verdrahtet (bewegliche Drähte). Um das Programm zu ändern, bewegen Sie die Drähte und laufen erneut.

Später wurde die Assemblersprache auf Papier sortiert, von Hand in Maschinencode übersetzt und dann mit Hilfe von Schaltern usw. in den RAM eingespeist. Oder Lochkarten usw. Schließlich können Sie einen Assembler erstellen, dann können Sie in Assembler keinen Maschinencode programmieren, dann können Sie einen Compiler erstellen. Schließlich können Sie diesen Compiler booten. Und mache neue Sprachen und neue Compiler, etc.

Die erste Sprache war keine Sprache, später war die erste Sprache Assemblersprache. Für jeden Prozessor ist die erste Sprache die Assemblersprache (abgeleitet vom Maschinencode). Der Befehlssatz wird zuerst entworfen, dann die Hardware, um ihn dann zu implementieren, Assembler, dann Compiler.

Oldtimer
quelle