SECD Maschine

Die SECD Maschine ist eine hoch einflussreiche virtuelle Maschine und abstrakte Maschine, die als ein Ziel für funktionelle Programmiersprache-Bearbeiter beabsichtigt ist. Die Briefe treten für Stapel, Umgebung, Code, Müllkippe, die inneren Register der Maschine ein. Diese Register weisen zu verbundenen Listen im Gedächtnis hin.

Die Maschine war erst, um spezifisch entworfen zu werden, um Lambda-Rechnungsausdrücke zu bewerten. Es wurde von Peter J. Landin als ein Teil seiner ISWIM Programmiersprache-Definition 1963 ursprünglich beschrieben. Die von Landin veröffentlichte Beschreibung war ziemlich abstrakt, und hat viele Durchführungswahlen (wie eine betriebliche Semantik) offen gelassen. Folglich wird die SECD Maschine häufig in einer ausführlicheren Form wie der Lispkit-Lispeln-Bearbeiter von Peter Henderson präsentiert, der seit 1980 verteilt worden ist. Seitdem ist es als das Ziel für mehrere andere experimentelle Bearbeiter verwendet worden.

1989 haben Forscher an der Universität Calgarys an einer Hardware-Durchführung der Maschine gearbeitet.

Register und Gedächtnis

Die SECD Maschine ist Stapel-basiert. Funktionen nehmen ihre Argumente vom Stapel. Die Argumente für eingebaute Instruktionen werden sofort nach ihnen im Instruktionsstrom verschlüsselt.

Wie alle inneren Datenstrukturen ist der Stapel eine Liste mit dem S-Register, das auf den Kopf der Liste oder Anfang hinweist. Wegen der Listenstruktur braucht der Stapel kein dauernder Block des Gedächtnisses zu sein, so schobern Sie Raum auf ist verfügbar, so lange es eine einzelne freie Speicherzelle gibt. Selbst wenn alle Zellen verwendet worden sind, kann Müll-Sammlung zusätzliches freies Gedächtnis nachgeben. Offensichtlich können spezifische Durchführungen der SECD Struktur den Stapel als eine kanonische Stapel-Struktur durchführen, so die gesamte Leistungsfähigkeit der virtuellen Maschine verbessernd, vorausgesetzt, dass ein strenger gebunden hat, auf die Dimension des Stapels gestellt zu werden.

Die C schreiben Punkte an der Spitze des Codes oder der Befehlsliste ein, die bewertet wird. Sobald die Instruktion dort durchgeführt worden ist, wird der C an der folgenden Instruktion in der Liste angespitzt — es ist einem Instruktionszeigestock (oder Programm-Schalter) in herkömmlichen Maschinen ähnlich, außer dass nachfolgende Instruktionen immer während der Ausführung angegeben werden und in nachfolgenden Speicherpositionen nicht standardmäßig enthalten werden, weil es mit den herkömmlichen Maschinen der Fall ist.

Die aktuelle variable Umgebung wird durch das E-Register geführt, das auf eine Liste von Listen hinweist. Jede individuelle Liste vertritt ein Umgebungsniveau: Die Rahmen der aktuellen Funktion sind im Kopf der Liste, Variablen, die in der aktuellen Funktion, aber gebundene durch eine Umgebungsfunktion frei sind, sind in anderen Elementen von E.

Die Müllkippe, an deren dem Kopf die D-Register-Punkte, wird als vorläufige Lagerung für Werte der anderen Register zum Beispiel während Funktionsanrufe verwendet. Es kann mit dem Rückstapel anderer Maschinen verglichen werden.

Die Speicherorganisation der SECD Maschine ist dem von den meisten funktionellen Sprachdolmetschern verwendeten Modell ähnlich: Mehrere Speicherzellen, von denen jede irgendeinen ein Atom (ein einfacher Wert, zum Beispiel 13) halten, oder eine leere oder nichtleere Liste vertreten kann. Im letzten Fall hält die Zelle zwei Zeigestöcke zu anderen Zellen, das ein Darstellen des ersten Elements, das andere Darstellen der Liste abgesehen vom ersten Element. Die zwei Zeigestöcke werden Auto und cdr beziehungsweise traditionell genannt — aber der modernere Begriff-Kopf und Schwanz werden häufig stattdessen verwendet. Die verschiedenen Typen von Werten, die eine Zelle halten kann, sind durch ein Anhängsel bemerkenswert. Häufig sind verschiedene Typen von Atomen (ganze Zahlen, Schnuren, usw.) ebenso bemerkenswert.

So konnte eine Liste, die die Nummern 1, 2, und 3, gewöhnlich schriftlich als" (1 2 3) hält", wie folgt vertreten werden:

Adressanhängsel-Inhalt (schätzen für ganze Zahlen, Auto & cdr für Listen)

9 [ganze Zahl | 2]

8 [ganze Zahl | 3]

7 [haben | 8 | 0] Schlagseite

6 [haben | 9 | 7] Schlagseite

...

2 [haben | 1 | 6] Schlagseite

1 [ganze Zahl | 1]

0 [Null]

Die Speicherzellen 3 bis 5 gehören unserer Liste nicht, deren Zellen zufällig über das Gedächtnis verteilt werden können. Zelle 2 ist der Kopf der Liste, sie weist zur Zelle 1 hin, der den Wert des ersten Elements und die Liste hält, die nur 2 und 3 enthält (an der Zelle 6 beginnend). Zelle 6 Punkte an einer Zelle, die 2 und an der Zelle 7 hält, der die Liste vertritt, die nur 3 enthält. Es tut so durch das Hinweisen auf die Zelle 8, den Wert 3 enthaltend, und auf eine leere Liste (Null) als cdr hinweisend. In der SECD Maschine vertritt Zelle 0 immer implizit die leere Liste, so ist kein spezieller Anhängsel-Wert erforderlich, um einer leeren Liste Zeichen zu geben (alles brauchend, der einfach zur Zelle 0 hinweisen kann).

Der Grundsatz, dass der cdr in einer Listenzelle auf eine andere Liste hinweisen muss, ist gerade eine Tagung. Wenn sowohl Auto als auch cdr auf Atome hinweisen, die ein Paar nachgeben werden, das gewöhnlich wie schriftlich ist" (1. 2)"

Instruktionen

  • Null stößt einen Null-Zeigestock auf den Stapel
  • ldc stößt ein unveränderliches Argument auf den Stapel
  • ld stößt den Wert einer Variable auf den Stapel. Die Variable wird durch das Argument, ein Paar angezeigt. Das Auto des Paares gibt das Niveau, der cdr die Position an. So" (1. 3)" gibt die aktuelle Funktion (Niveau 1) Drittel-Parameter.
  • sel erwartet zwei Listenargumente, und lässt einen Wert vom Stapel knallen. Die erste Liste wird durchgeführt, wenn der knallen gelassene Wert Nichtnull, die zweite Liste sonst war. Bevor einer dieser Listenzeigestöcke der neue C gemacht wird, wird ein Zeigestock zur Instruktion im Anschluss an sel auf der Müllkippe gespart.
  • schließen Sie sich an lässt eine Listenverweisung von der Müllkippe knallen und macht das den neuen Wert von C. Diese Instruktion kommt am Ende beider Alternativen eines sel vor.
  • ldf nimmt ein Listenargument, das eine Funktion vertritt. Es baut einen Verschluss (ein Paar, das die Funktion und die aktuelle Umgebung enthält) und Stöße das auf den Stapel.
  • AFP lässt einen Verschluss und eine Liste von Parameter-Werten vom Stapel knallen. Der Verschluss wird auf die Rahmen durch die Installation seiner Umgebung als die aktuelle, das Stoßen der Parameter-Liste davor, die Reinigung des Stapels und das Setzen C zum Funktionszeigestock des Verschlusses angewandt. Die vorherigen Werte von S, E, und der folgende Wert von C werden auf der Müllkippe gespart.
  • rösten Sie Knalle ein Rückwert vom Stapel, stellt S, E, und C von der Müllkippe wieder her, und stößt den Rückwert auf den jetzt aktuellen Stapel.
  • dum stößt eine "Modepuppe", eine leere Liste vor der Umgebungsliste.
  • Klopfen arbeitet wie AFP nur, dass es ein Ereignis einer Scheinumgebung mit der aktuellen ersetzt, so rekursive Funktionen möglichen machend

Mehrere zusätzliche Instruktionen für grundlegende Funktionen wie Auto, cdr, Listenaufbau, Hinzufügung der ganzen Zahl, Eingabe/Ausgabe, bestehen usw. Sie alle nehmen irgendwelche notwendigen Rahmen vom Stapel.

Weiterführende Literatur

  • Danvy, Olivier. Ein Vernünftiger Deconstruction der SECD Maschine von Landin. BRICS Forschungsbericht RS-04-30, 2004. ISSN 0909-0878
  • Field, Anthony J. Field und Peter G. Harrison. 1988 Funktionelle Programmierung. Addison-Wesley. Internationale Standardbuchnummer 0-201-19249-7
  • Graham, Brian T. 1992 "Der SECD Mikroprozessor: Eine Überprüfungsfallstudie". Springer. Internationale Standardbuchnummer 0792392450
  • Henderson, Peter. 1980 Funktionelle Programmierung: Anwendung und Durchführung. Prentice Hall. Internationale Standardbuchnummer 0-13-331579-7
  • Kogge, Peter M Die Architektur von Symbolischen Computern. Internationale Standardbuchnummer 0-07-035596-7
  • Landin, Peter J. 1964. Die mechanische Einschätzung von Ausdrücken. Comput. J. 6, 4, 308-320.
  • Landin, Peter J. 1966. Die folgenden 700 Programmiersprachen. Commun. ACM 9, 3, 157-166.

Links


Silesian Voivodeship / Stratego
Impressum & Datenschutz