Abstrakte Maschine von Warren

1983 hat David H. D. Warren eine abstrakte Maschine für die Ausführung der Einleitung entworfen, die aus einer Speicherarchitektur und einem Befehlssatz besteht.

Dieses Design ist bekannt als Warren Abstract Machine (WAM) geworden und ist das Standardziel für Einleitungsbearbeiter geworden.

Zweck

Der Zweck, Einleitungscode zum mehr auf niedriger Stufe WAM-Code zu kompilieren, soll nachfolgende Interpretation des Einleitungsprogramms effizienter machen. Einleitungscode ist vernünftig leicht, zu WAM Instruktionen zu übersetzen, die effizienter interpretiert werden können. Außerdem sind nachfolgende Codeverbesserungen und Kompilation zum heimischen Code häufig leichter, auf der mehr auf niedriger Stufe Darstellung zu leisten.

Speicherbereiche

Der WAM hat die folgenden Speicherbereiche:

  • Der globale Stapel oder Haufen, verwendet, um zusammengesetzte Begriffe zu versorgen
  • Der lokale Stapel für Umgebungsrahmen und auserlesene Punkte
  • Die Spur, um zu registrieren, welche Variablen bindings beim Zurückverfolgen aufgemacht werden sollten

Relevanz für Einleitungsbenutzer

Um effiziente Einleitungsprogramme, ein grundlegendes Verstehen dessen zu schreiben, wie die WAM-Arbeiten vorteilhaft sein können. Einige der wichtigsten WAM Konzepte sind das erste Argument-Indexieren und seine Beziehung zu auserlesenen Punkten, Schwanz-Anruf-Optimierung und Speicherreklamation auf dem Misserfolg.

Beispiel

Hier ist ein Stück des Einleitungscodes:

Mädchen (Ausfall).

Mädchen (jane).

Junge (B):-\+ Mädchen (B).

Ein WAM-basierter Einleitungsbearbeiter wird das in WAM dem folgenden ähnliche Instruktionen kompilieren:

Prädikat (Mädchen/1):

switch_on_term (2,1, scheitern Sie, scheitern Sie, scheitern Sie),

Etikett (1): switch_on_atom ([(Ausfall, 3), (jane, 5)])

Etikett (2): try_me_else (4)

Etikett (3): get_atom (Ausfall, 0)

gehen Sie weiter

Etikett (4): trust_me_else_fail

Etikett (5): get_atom (jane, 0)

gehen Sie weiter

Prädikat (Junge/1):

get_variable (x (1), 0)

put_structure (Mädchen/1,0)

unify_local_value (x (1))

führen Sie ((\+)/1)]) durch

Eine wichtige Eigenschaft dieses Codes ist seine Fähigkeit, mit den verschiedenen Weisen fertig zu werden, in denen die Prädikate herbeigerufen werden können: Jedes Argument könnte eine Variable, ein Boden-Begriff oder ein teilweise realisierter Begriff sein. Die "Schalter"-Instruktionen behandeln die verschiedenen Fälle.


Gegenaktueller Austausch / Melrose Place (1992 Fernsehreihen)
Impressum & Datenschutz