Warren Abstract Machine - Warren Abstract Machine

W 1983 roku David HD Warren zaprojektował abstrakcyjne maszynę za wykonanie Prolog składającej się z pamięci architektury oraz zestaw instrukcji . Ten projekt stał się znany jako Warren Streszczenie Maszynie (WAM) i stał się de facto standardem celem prologowych kompilatorów .

Cel, powód

Celem kompilacji kodu Prolog do bardziej niskopoziomowego kodu WAM jest, aby późniejsza interpretacja programu Prolog bardziej wydajne. Kod Prolog jest stosunkowo łatwy do przetłumaczenia instrukcji WAM, które mogą być bardziej efektywnie interpretowane. Również późniejsze ulepszenia kodu i kompilacji do kodu są często łatwiejsze do wykonania na więcej reprezentacji niskiego poziomu.

Aby pisać wydajne programy prolog, podstawowe zrozumienie, w jaki sposób działa WAM może być korzystne. Niektóre z najważniejszych pojęć WAM są indeksowanie pierwszy argument i jego relacji do wyboru punktów, optymalizacja połączenia ogon i rekultywacji pamięci na niepowodzenie.

obszary pamięci

WAM ma następujące obszary pamięci:

  • Globalny stos lub sterty , używane do przechowywania nazw złożonych
  • Lokalny stos dla ram środowiskowych i wybór punktów
  • Szlak do rekordu, które zmienne Wiązania powinny być cofnięte na backtracking

Przykład

Oto fragment kodu Prolog:

 girl(sally).
 girl(jane).
 
 boy(B) :- \+ girl(B).

WAM oparte Prolog kompilator skompiluje to w instrukcji WAM podobnych do następujących:

 predicate(girl/1):
    switch_on_term(2,1,fail,fail,fail),
 label(1): switch_on_atom([(sally,3),(jane,5)])
 label(2): try_me_else(4)
 label(3): get_atom(sally,0)
           proceed
 label(4): trust_me_else_fail
 label(5): get_atom(jane,0)
           proceed
 
 predicate(boy/1):
    get_variable(x(1),0)
    put_structure(girl/1,0)
    unify_local_value(x(1))
    execute((\+)/1)])

Ważną cechą tego kodu jest jego zdolność do radzenia sobie z różnymi trybami, w którym predykaty mogą być wywołane: dowolny argumentem może być zmienna, termin grunt lub częściowo wystąpienia termin. „Przełącznik” instrukcje obsługi różnych przypadków.

Referencje