Kurz gesagt :
Was zwingende Programmiersprachen als nahe an Turing-Maschinen und an gewöhnlichen Computern wie PCs (selbst näher an RAM-Maschinen als an Turing-Maschinen) auszeichnet, ist das Konzept eines expliziten Speichers , der zum Speichern geändert werden kann (Zwischenergebnisse) ). Hierbei handelt es sich um eine automatische Ansicht der Berechnung mit einem Konzept eines Zustands (das sowohl die Steuerung des endlichen Zustands als auch den Speicherinhalt umfasst), das sich im Verlauf der Berechnung ändern kann.
Die meisten anderen Modelle sind abstrakter. Obwohl sie die Berechnung als Folge von Transformationsschritten einer ursprünglichen Struktur ausdrücken können, werden diese Transformationen in einer Art intemporalem Universum mathematischer Bedeutungen angewendet. Dadurch bleiben möglicherweise Eigenschaften wie die referenzielle Transparenz erhalten, die die mathematische Analyse vereinfachen können. Es ist jedoch weit entfernt von natürlichen physischen Modellen, die sich auf das Gedächtnis konzentrieren.
Somit gibt es keine natürlichen Funktionsmaschinen, außer im weiter unten erläuterten Sinne, da Software nicht wirklich von Hardware trennbar ist.
Der Hinweis auf Turing als Maßstab für die Berechenbarkeit ergibt sich wahrscheinlich aus der Tatsache, dass sein Modell, die Turing-Maschine, dieser physikalischen Realisierbarkeitsbeschränkung am nächsten kam, was sie zu einem intuitiveren Berechnungsmodell machte.
Weitere Überlegungen :
Es gibt viele Berechnungsmodelle, die entworfen wurden, um das Konzept einer Berechnung auf möglichst allgemeine Weise zu erfassen. Dazu gehören Turing-Maschinen, die eigentlich in vielen verschiedenen Geschmacksrichtungen erhältlich sind, Lambda-Kalkül (auch Geschmacksrichtungen), Semi-Thue-Umschreibungssysteme, teilweise rekursive Funktionen und kombinatorische Logik.
Sie alle erfassen einige Aspekte der verschiedenen Techniken, die von Mathematikern zum Ausdrücken oder Durchführen von Berechnungen verwendet werden. Und die meisten wurden in gewissem Umfang als Grundlage für das Design von Programmiersprachen verwendet (z. B. Snobol für Umschreibsysteme, APL für Kombinatoren, Lisp / Schema für Lambda-Kalkül) und können in modernen Programmiersprachen häufig auf verschiedene Arten kombiniert werden.
Ein wesentliches Ergebnis ist, dass alle diese Rechenmodelle als gleichwertig erwiesen wurden, was zu der These von Church-Turing führte, dass kein physikalisch realisierbares Rechenmodell mehr leisten kann als eines dieser Modelle. Ein Berechnungsmodell wird als vollständig bezeichnet, wenn nachgewiesen werden kann, dass es einem dieser Modelle und damit allen Modellen entspricht.
Der Name hätte anders sein können. Die Wahl der Turing-Maschine (TM) als Referenz beruht wahrscheinlich auf der Tatsache, dass es sich wahrscheinlich um das einfachste dieser Modelle handelt, das die Art und Weise, wie ein Mensch rechnet, genau nachahmt und relativ einfach zu implementieren ist (in einer begrenzten endlichen Form) ) als physisches Gerät, so dass Turing-Maschinen mit Lego-Sets gebaut wurden . Die Grundidee erfordert keine mathematische Raffinesse. Es ist wahrscheinlich die Einfachheit und Realisierbarkeit des Modells, die ihm diese Referenzposition gegeben hat.
Zum Zeitpunkt der Erstellung seines Computergeräts durch Alan Turing lagen weitere Vorschläge zur formalen Definition der Berechenbarkeit vor, die für die Grundlagen der Mathematik von entscheidender Bedeutung ist (siehe
Entscheidungsproblem ). Der Turing-Vorschlag wurde von den damaligen Experten als die überzeugendste bekannte Arbeit zur Berechenbarkeit angesehen (siehe Computability and Recursion , RI Soare, 1996, siehe Abschnitt 3.2). Die verschiedenen Vorschläge erwiesen sich als gleichwertig, aber Turings überzeugender. [aus Kommentaren von Yuval Filmus]
Es ist zu beachten, dass unsere Computer aus Hardware-Sicht keine Turing-Maschinen sind, sondern sogenannte Random Access Machines (RAM) , die ebenfalls vollständig Turingen.
Rein imperative Sprache (was auch immer das bedeuten mag) sind wahrscheinlich die Formalismen, die für die grundlegendsten Modelle wie Turing-Maschinen verwendet werden, oder die Assemblersprache (Überspringen der binären Codierung) von Computern. Beide sind notorisch unlesbar und es ist sehr schwierig, mit ihnen signifikante Programme zu schreiben. Tatsächlich verfügt sogar die Assemblersprache über einige Funktionen höherer Ebenen, um die Programmierung ein wenig zu vereinfachen, verglichen mit der direkten Verwendung von Maschinenanweisungen. Grundlegende imperative Modelle sind den physikalischen Welten verschlossen, aber nicht sehr brauchbar.
Dies führte schnell zur Entwicklung übergeordneter Berechnungsmodelle, die eine Vielzahl von Rechentechniken, wie Unterprogramm- und Funktionsaufrufe, Benennung des Speicherorts, Festlegung von Namen, Quantifizierung und Dummy-Variablen, die bereits in irgendeiner Form verwendet wurden, einmischten in Mathematik und Logik und sogar sehr abstrakte Konzepte wie Reflexion ( Lisp 1958).
Die Einteilung von Programmiersprachen in Programmierparadigmen wie imperative, funktionale, logische, objektorientierte basiert auf dem Vorrang einiger dieser Techniken beim Entwurf der Sprache und dem Vorhandensein oder Nichtvorhandensein einiger Rechenfunktionen, die bestimmte Eigenschaften für Programme erzwingen oder Programmfragmente in der Sprache geschrieben.
Einige Modelle eignen sich für physische Maschinen. Einige andere eignen sich besser für eine allgemeine Beschreibung von Algorithmen, die von der Art des zu beschreibenden Algorithmus abhängen kann. Einige Theoretiker verwenden sogar nicht deterministische Spezifikationen von Algorithmen, und sogar diese können in konventionellere Programmierbegriffe übersetzt werden. Es gibt jedoch kein Mismatch-Problem, da wir eine ausgeklügelte Compiler / Interpreter-Technologie entwickelt haben, mit der jedes Modell nach Bedarf in ein anderes übersetzt werden kann (was auch die Grundlage der Church-Turing-These ist).
Nun sollten Sie Ihren Computer niemals als Rohhardware betrachten. Es enthält eine Boolesche Schaltung, die eine sehr elementare Verarbeitung durchführt. Aber ein Großteil davon wird von Mikroprogrammen im Computer gesteuert, von denen Sie nie etwas erfahren. Dann haben Sie das Betriebssystem, das Ihren Computer sogar anders aussehen lässt als die Hardware. Darüber hinaus verfügen Sie möglicherweise über einen virtuellen Computer, der Bytecode ausführt, und anschließend über eine Hochsprache wie Pyva und Jathon oder Haskell , oder OCaml, die in Bytecode kompiliert werden können.
Auf jeder Ebene sehen Sie ein anderes Berechnungsmodell. Es ist sehr schwierig, die Hardware-Ebene von der Software-Ebene zu trennen, um einer Maschine ein bestimmtes Rechenmodell zuzuweisen. Und da sie alle unübersetzbar sind, ist die Idee eines ultimativen Hardware-Berechnungsmodells so ziemlich eine Illusion.
Die Lambda-Kalkül-Maschine existiert tatsächlich: Es ist ein Computer, der Lambda-Kalkül-Ausdrücke reduzieren kann. Anzeige, die leicht gemacht wird.
Über spezialisierte Maschinenarchitekturen
Als Ergänzung zu Peter Taylors Antwort und nach der Verflechtung von Hardware und Software wurden spezielle Maschinen entwickelt, die besser an ein bestimmtes Paradigma angepasst sind, und deren Basissoftware in einer auf diesem Paradigma basierenden Programmiersprache geschrieben wurde.
Diese schließen ein
Grundsätzlich sind dies auch zwingende Hardwarestrukturen, die jedoch durch spezielle Hardware-Funktionen oder mikroprogrammierte Interpreter gemildert werden, um sich besser an das beabsichtigte Paradigma anzupassen.
Tatsächlich scheint Hardware, die auf bestimmte Paradigmen spezialisiert ist, auf lange Sicht nie erfolgreich gewesen zu sein. Der Grund dafür ist, dass die Kompilierungstechnologie zur Implementierung eines Paradigmas auf Vanille-Hardware immer effektiver wurde, sodass keine spezielle Hardware mehr benötigt wurde. Darüber hinaus verbesserte sich die Leistung der Harware schnell, aber die Kosten für Verbesserungen (einschließlich der Weiterentwicklung der Basissoftware) konnten auf Vanille-Hardware leichter amortisiert werden als auf Spezialhardware. Spezialisierte Hardware konnte auf Dauer nicht mithalten.
Trotzdem und obwohl ich keine genauen Daten dazu habe, würde ich vermuten, dass diese Unternehmungen einige Ideen hinterlassen haben, die die Entwicklung der Architektur von Maschinen, Erinnerungen und Befehlssätzen beeinflusst haben.
(a -> a) -> a
.