Moin!
Und wenn du die Stanzlöcher als Befehle siehst, dann existierte die Programmiersprache eben zuerst. Ohne "Sprache" kein Computer.
Also kein Henne-Ei-Problem.
Gehen wir mal sehr weit zurückzu 0 und 1.
Ein Schalter wäre nun sehr überzogen betrachtet, ein interpreter, der nun aus dem wunsch Licht an Licht aus letzendlich ein Ergebniss liefert.
Aber ein Schalter kann nicht programmiert werden. Unter Programmieren verstehe ich hierbei, dass ein-und-dieselbe Maschine je nach Input der Befehle mal das eine und mal das andere tut, oder auch beides individuell kombiniert.
Ein Schalter hat in dem Sinne keinen Input. Und definitiv auch keine Möglichkeit, mal "beides" zu tun.
Also ist das kein Interpreter, und auch kein Computer, erfordert keine Programmiersprache, und bietet keinen Ansatzpunkt zur Lösung der Fragestellung.
Jetzt gehe ich weiter zu den ersten Chip Bausteinen.
Die kannten teilweise ja schon funktionen.
Auch hier gilt: Wenn du irgendein NAND- oder NOR-Gatter oder meinetwegen auch einen binären Addierer oder Schieberegister hast, dann sind das zwar alles elektronische Bauteile, aber sie sind keinesfalls programmierbar. Sie tun deterministisch immer exakt dasselbe. Der Weg von einem Stapel NAND-Gatter hin zu einer CPU ist da noch ziemlich weit.
Aber irgendwann wird jemand diesen Weg wohl gegangen sein. Und hat sich ein Gerät gebastelt, welches diverse Bitfolgen aus einer Eingabevorrichtung auslesen konnte, damit diverse Bitfolgen einer Speichereinrichtung manipulierte und als Ergebnis gewisse Bitfolgen auf eine Ausgabevorrichtung ausgab.
Und dieser jemand stand vor dem Problem: Was soll so ein Gerät denn überhaupt können?
Und dankenswerterweise hat ein gewisser Herr Turing schon weit vor dieser Elektronik einen theoretischen Automaten erfunden, der über gewisse minimale Befehlsmöglichkeiten verfügt, aber damit trotzdem alle möglichen Aufgabestellungen, die sich programmieren lassen, lösen kann. Das war 1936.
Zu derselben Zeit, etwas später (1936-1938) hat Conrad Zuse seinen Z1 gebaut, einen vollmechanische, freiprogrammierbaren Rechner. Um sowas aber bauen zu können, muß man irgendwie festlegen, was das Gerät können soll. Man muß also definieren, wie die Zahlen intern dargestellt werden (das Binärsystem macht die Entscheidung da sehr leicht), und man muß irgendwie festlegen, wie die Rechenbefehle dargestellt werden sollen.
Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.
Die Programierung hingegen war ein Schaltplan und keine Sprache.
Die "Programmierung" eines mechanischen Rechners ist weit weg von irgendeinem Schaltplan. :)
Trotzdem interpredierten die ersten "Prozessoren" eingaben ....
Naja, "interpretieren" ist so ein Wort, was eigentlich immer zutrifft. Weil die Befehle grundsätzlich frei definiert werden können, ist logischerweise eine Art von "Interpretation" im Spiel, wenn der "Rechner" auf 0x80 hin etwas addiert und auf 0xFF das Ergebnis wo hinspeichert. Könnte auch umgekehrt sein.
Heutzutage wird selbst die Maschinensprache der x86-CPUs im wahrsten Sinne interpretiert, weil in der CPU ein Microcode abläuft, der die (eigentlich ja schon auf dem untersten Level befindliche) Maschinensprache interpretiert und entsprechend intern abarbeitet. Deswegen auch der Geschwindigkeitsvorteil von RISC-Prozessoren. Die arbeiten (ich vermute es so) als Maschinensprache direkt mit dem Microcode und interpretieren da nichts, oder zumindest nicht soviel. Sind dafür aber nicht binärkompatibel - deswegen läuft Windows da nicht, und niemand will sie. :)
Damt war wohl die erste Computer Sprache der Zeichstift.
Ist der Gedankengang zu weit her geholt?
Doch, ist er. Mit dem Stift hat man die erste Computersprache aufgeschrieben, klar. Aber er selbst war ganz sicher keine Sprache.
- Sven Rautenberg
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)