Wenn Sie darüber nachdenken, sind Architekturen abstrakte Maschinen. Sie beschreiben, wie sich ein Klumpen sorgfältig hergestellten Siliziums "verhalten" sollte. Der Unterschied zwischen den Architekturen und den Turing-Maschinen ist eher eine Frage des Maßstabs als eine grundlegende Änderung des Ansatzes.
Der Vorteil von Turing-Maschinen besteht darin, dass es eine Reihe nützlicher Beweise gibt, die mit einer Turing-Maschine sehr einfach zu erstellen sind. Es ist einfach zu beweisen, dass jede Maschine, die leistungsfähig genug ist, um eine Turing-Maschine zu simulieren, jedes Problem lösen kann, das eine Turing-Maschine kann (duh). Interessanter wird es jedoch, wenn Sie eine berechenbare Funktion definieren . Es stellt sich heraus, dass es viele kompatible Definitionen einer berechenbaren Funktion gibt. Wenn Sie Ihr gesamtes Verhalten als berechenbare Funktionen definieren können, können Sie in einer Turing-Maschine simuliert werden.
Angenommen, Sie haben eine Architektur, die Programme im LISP-Stil direkt unterstützt, und eine andere wie x86, die prozeduraler ist. Ihr Freund behauptet: "LISP ist ausdrucksvoller, sodass Sie Programme auf diesem Computer schreiben können, die Sie niemals auf Ihrem x86 schreiben könnten." Dies ist brutal zu kontern (zumal Sie wahrscheinlich nicht genug LISP kennen). Sie können jedoch mehrere abstrakte Maschinen wie die Turing-Maschine missbrauchen:
- Ihre LISP-Maschine mag ausgefallen sein, aber alles, was sie tun kann, ist auf Lambda-Kalkül reduzierbar. Dein Freund nickt eifrig. Lambda-Kalkül ist für funktionale Programmierer ein Kult.
- Mein x86 mag schick sein, aber alles, was es tun kann, ist auf einen Registercomputer reduzierbar. Nochmals keine Frage von deinem Freund. Register sind in der modernen Computertheorie so einfach!
- Jede Registermaschine kann als Turingmaschine modelliert werden, die diese Registermaschine simuliert. Jetzt wundert sich Ihr Freund, warum Sie auf die Punch-Tape-Ära zurückblicken.
- Und Ihre Lambda-Rechenmaschine kann auch auf eine Turing-Maschine reduziert werden. * Ihr Freund protestiert, aber Sie weisen sie auf die These von Church-Turing hin, und sie lassen beschämt den Kopf hängen.
- Somit kann meine x86-Box alles, was Ihre ausgefallene LISP-basierte Maschine kann!
Es gibt natürlich viele andere Beispiele. Conways Spiel des Lebens hat sich als vollständig erwiesen, was bedeutet, dass es theoretisch alles kann, was Ihr Computer kann. Der einfachste Weg, dies zu tun, war der Bau einer Turing-Maschine im Leben . Ich spreche das an, weil dies ein Fall von einer abstrakten Maschine wäre, die Sie als wörtliche Architektur behandeln! Sie können sich vorstellen, wie schwer der Anspruch auf Berechenbarkeit im Leben ohne die Hilfe abstrakter Modelle wäre (ich bin mir sicher, dass ich kein x64 mit Cache-Peeking modelliere, nur um zu beweisen, dass das Leben berechenbar ist!).
Letztendlich besteht der große Unterschied zwischen Architekturen und abstrakten Maschinen darin, dass Architekturen normalerweise die Leistung betreffen. Architekturen möchten wissen, wie schnell Sie etwas tun können. Abstrakte Maschinen begnügen sich in der Regel damit, nur zu wissen, ob Sie können. Betrachten Sie den Universal Konstruktor, der für von Neuman-Zustandsmaschinen entwickelt wurde. Es war genug zu beweisen, dass die UC funktionieren konnte , egal, dass die Autoren nie genug Rechenleistung hatten, um es tatsächlich durchzuhalten.
Der Preis, den Architekturen zahlen, um zu demonstrieren, wie schnell sie arbeiten können, ist, dass es oft furchtbar schwierig ist zu beweisen, dass sie alles berechnen können . Dafür drehen sich die Architekturen gleich wieder um und beginnen, abstrakte Maschinen zu verwenden.