SECD-Maschine

Die SECD-Maschine ist eine virtuelle Maschine , die als Zielarchitektur für Compiler Functional Programming gedacht ist . Die Buchstabe für Stehen S Tack, E nvironment, C teuerung, D UMP, sterben Welches intern Register der Maschine Sind. This Register Enthalten Zeiger auf Liste im Speicher .

Die SECD-Maschine Krieg erste virtuelle Maschine sterben, sterben dazu ausdrücklich Entworfen Wurde, Ausdrücke Dezember Lambda Kalküls auszuwerten. Sie Wurde ursprünglich im Jahr 1963 von Peter J. Landin als Teil der Definition Wadenfänger Programmiersprache ISWIM beschrieben. Die von Landin Publizierte Beschreibung Krieg Ziemlich abstrakt und Liess vielen Implementierungsentscheidungen offen, Wie zum beispiel des fragt Eine Operation Ellen semantika . Deshalb Wird SECD-Maschine oft available in detaillierterer Formular Vorgestellt, Wie zum beispiel in sterben Peter Hendersons Lispkit-LISP -Compiler , wo seit 1980 Verteilt Wird. Sie Wird Auch als Zielarchitektur für verschiedene andere experimentelle Compiler used.

Im Jahr 1989 Arbeitete Forscher an der Universität von Calgary an einer Hardware-Implementation der Maschine. [1]

Register und Speicher

Die SECD-Maschine is a Stapelmaschine , Derens Instruktion Ihre Hauptargumente von Einem Stapel nehmen. Zusätzliche Anweisungen für eine Anleitung können unter dem Befehl Namen gegeben werden. Dort wird Stapel, wer alle anderen Praktikanten Datenstrukturen durch eine Liste darstellt, wobeidas Register S auf dem Anfang der Liste steht. Diese Liste wird auf einem Heap gespeichert, so dass der Stapel nicht in einem zusammenhängenden Speicherblock stecken muss. So lange oder frierend Wir haben keine gute Zeit, weder ist es noch Stapelspeicherplatz verfügbar. Wenn all die Speicherzellen verwurrt wurden, kann eine Garbage Collection möglich sein.

Das Register C Zeigt zu Beginn auf die Erste Instruktion aus dem auszuwertenden Programm, das als Liste von Instruktion dargestellt Wird. Nach Jeder Auswertung Wacholder Instruktion Zeigt die C -Register Auf der nächste Instruktion in der List und Verhalten sie DAMIT ähnlich Ein Befehlszähler mit der ausnahme that NACHFOLGER Instruktion nicht in unmittelbar nachfolgenden Speicherplatz Enthalten sein Muß.

Das Register E Enthält sterben momentane Variablenumgebung, EINEN Zeiger Auf eine Liste von List. Funktionsprinzip : Die erste Option definiert die Variablenbindungen einer bestimmten Funktionsstufe: die erste Liste enthält die Parameter der blauen Funktion; Die Variable, stirbt in der Funktion laufender frei Sind, aber in Einer umgebenden Funktion Gebunden Werden, sie FINDEN in nachfolgender Liste.

Der „Dump“, auf dem D flat Anfang des Register D Zeigt, Wird als Temporären Speicher für sterben Inhalt Andere Register used, im zusammenhang mit Funktionsaufrufen Geretta Werden Müssen sterben. Es gibt einen ungenügenden jungen Mann, der in Rolle des Aufrufstapels, Maschinen lebt.

Die Speicherorganisation wo SECD-Maschine ist ähnlich sie Modell, das von den Interpretern des meisten Funktional Programmiersprachen used Wird: Der Speicher ist a Menge von Speicherzellen, stirbt Jeweils Entweder ein Atom , das heißt, EIN primitive Wert, oder Eine Leere oder nicht-Leere Liste enthalten können. Nicht-Leere Liste Ist dabei Durch ein Paar von Zeigern dargestellt, stirbt traditionell Durch Auto und CDR bezeichnet Werden. Moderne Entwicklungen verhielten sich häufig die Bezeichnungen Kopf und Schwanz . Die Verschiedene Art von Wert, stirbt in Einer Zelle Enthalten sein Können, Wird Durch Eine Art Marke ( Typ – Tag) Unterschieden. Häufig unterschieden sie sich von Typen von Athen (Zahlen, Zeichenketten, etc.) unterschiedlich markiert.

Bsp. 1 , 2 und 3 enthält und normalweise in der Form „(1 2 3)“ notiert wird, wie folgt dargestellt:

Adresse Tag Inhalt
----------------------------
 9 [integer | 2]
 8 [ganze Zahl | 3]
 7 [Liste | 8 | 0]
 6 [Liste | 9 | 7]
 ...
 2 [Liste | 1 | 6]
 1 [ganze Zahl | 1]
 0 [keine]

Die Speicherzellen 3a wurden hier geworen, weil sie nicht viel mehr sind als diejenigen, die auf das Speicher-Signal hören. Die Zelle 2 enthält den Kopf der Liste. Sie zigt in de Zelle 1, im ersten Teil der Liste, findet das an der Zelle 6, in der die Restliste findet. Der Rest der Liste wurde detailliert auf der Zelle 9, die als das Zweite Element („2“) der Liste bekannt ist, und der Zelle 7, die das Wiederum eine Restliste beschreibt, beschrieben. Nun deht de Restliste aus einem Verweis auf der Zelle 8 mit dem Element („3“) und einem Verweis auf die Liste ( nil ) als Abschluss. In der SECD-Maschine impliziert die Zelle mit der Adresse 0 die Liste der Lehrer sowie die spezielle Liste für die Künstlerliste.

Das Prinzip, dass der zweite Zeiger („cdr“) in einer Listenzelle immer auf eine andere Liste zeigen muss, ist reine Konvention. Wenn sowohl „car“ als auch „cdr“ auf Atome zeigen, kann dies auch gleich als Paar dargestellt werden, das normalerweise als „(1 . 2)“ notiert wird.

Instruktionen[Bearbeiten | Quelltext bearbeiten]

Die wesentlichen Instruktionen der SECD-Maschine sind die folgenden:

  • nil schreibt einen nil-Zeiger auf den Stapel
  • ldc c schreibt ein konstantes Argument c auf den Stapel
  • ld v schreibt den Wert einer Variablen v auf den Stapel. Variablen werden dabei durch Paare (l . p) dargestellt, wobei l die Abstraktionsstufe bezeichnet und p die Position innerhalb der Parameter dieser Stufe. Als Beispiel bezeichnet „(1 . 3)“ den dritten Parameter der aktuellen Funktion (Abstraktionsstufe = 1).
  • Dichtungen l1, l2 Entfernt EINEN Wert vom Stapel und macht Einen Fall Unter Scheidung vorgefundenen über den Wert: Wenn Spitze des Stapel verschieden von sterben nil Krieg Wird Instruktionsfolge ausgeführt, auf sterben die l1 Zeigt, Ander fallen diejenige, auf sterben l2 Zeigt. Außerdem kann man C durch l1 beziehen, dh ersetzt; in Jedem Fall Wird ein Zeiger auf sterben sie dichtet NACHFOLGER Instruktion Auf dem Dump Geretta.
  • beitreten Entfernt EINEN Listenzeiger vom Dump und macht daraus der Neuen Wert des Registers C . This Instruktion kommt am Ende der Beiden Alternativen Wacholder Robben -Instruktion vor.
  • ldf f erwartet ein Listenargument, das den Code einer Funktion darstellt. Daraus wird eine Closure hergestellt: ein Paar, bestehend aus dem Code der Funktion und dem aktuellen Environment E. Diese Closure wird auf dem Stapel gespeichert.
  • ap entfernt eine Closure und eine Liste von Parameterwerten vom Stapel. Die Closure wird auf die Parameter angewendet, indem sie ihr eigenes Environment zu dem aktuellen macht, die Parameterliste davor schreibt, den Stapel leert und das C-Register auf den Funktionszeiger aus der Closure setzt. Die vorherigen Werte von S und E und die Fortsetzungsadresse aus C werden auf den Dump gerettet.
  • Einfach nur unterhalten, hier finden Sie die Register S , E und C aus dem Dump wieder hier, entfernt das oberste Element aus dem Dump und verschiebt den zu entfernenden Stapelwert.
  • dum schreibt ein „Dummy“, eine leere Liste, an der Spitze der Environment-Liste.
  • Rap funktioniert Wie AP mit der ausnahme that es ein Vorkommen Einer Dummy – Umgebungen Durch die augenblickliche Umwelt Ersetzt. Auf diese Weise wurde rekursive Funktion möglich.

Dazu kommt keiner der Anweisungen für primitive Funktionen wie „Auto“, „Cdr“, Listenkonstruktion, Addition, Ein- / Ausgabe und andere. Mögliche Argumentieren diese Funktion vom Stapel.

Literatur

  • Danvy, Olivier: Eine rationale Dekonstruktion von Landins SECD-Maschine . BRICS-Forschungsbericht RS-04-30, 2004. ISSN  0909-0878 .
  • Field, Anthony J. Field und Peter G. Harrison: Funktionale Programmierung . Addison Wesley, 1988, ISBN 0-201-19249-7 .
  • Graham, Brian T: Der SECD-Mikroprozessor: Eine Verifikations-Fallstudie . Springer, 1992, ISBN 0-7923-9245-0 .
  • Henderson, Peter: Funktionale Programmierung: Anwendung und Implementierung . Prentice Hall, 1980, ISBN 0-13-331579-7 .
  • Kogge, Peter M: Die Architektur symbolischer Computer . ISBN 0-07-035596-7 .
  • Landin, Peter J: 1964. Die mechanische Bewertung von Ausdrücken . Comput. J. 6, 4, 308-320.
  • Landin, Peter J. 1966: Die nächsten 700 Programmiersprachen. Commun. ACM 9, 3, 157-166.

Weblinks

  • SECD-Sammlung

Einzelstunden

  1. Hochspringen↑ Ein Bericht über den Entwurf ist verfügbar unter SECD: DESIGN ISSUES .