Warren absztrakt gép - Warren Abstract Machine

1983-ban David HD Warren egy absztrakt gépet tervezett a Prolog végrehajtására, amely memória- architektúrát és utasításkészletet tartalmaz . Ez a terv a Warren Abstract Machine (WAM) néven vált ismertté, és a Prolog fordítóinak tényleges standard célpontjává vált .

Célja

A Prolog-kódnak az alacsonyabb szintű WAM-kódhoz történő fordításának célja a Prolog-program későbbi értelmezésének hatékonyabbá tétele. A Prolog kódot meglehetősen könnyű lefordítani a WAM utasításokra, amelyek hatékonyabban értelmezhetők. Ezenkívül a későbbi kódjavításokat és a natív kódokká történő összeállítást gyakran könnyebb elvégezni az alacsonyabb szintű ábrázolásnál.

A hatékony Prolog programok írása érdekében előnyös lehet a WAM működésének alapvető ismerete. A WAM-fogalmak néhány fontos eleme az első argumentumindexálás és a választási pontokhoz való kapcsolódása, a farokhívás optimalizálása és a memória helyreállítása hiba esetén.

Memóriaterületek

A WAM a következő memóriaterületekkel rendelkezik:

  • Az összetett kifejezések tárolására használt globális verem vagy halom
  • A helyi verem környezetvédelmi keretek és választási pontok
  • A visszatekintéskor le kell vonni azt a nyomkövetést , amely rögzíti a kötődő változókat

Példa

Itt van egy darab Prolog-kód:

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

A WAM-alapú Prolog fordító ezt összeállítja a következő WAM utasításokba:

 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)])

Ennek a kódnak a fontos jellemzője, hogy képes megbirkózni a predikációk előidézésének különböző módjaival: Bármely érv lehet változó, földi kifejezés vagy részben aktualizált kifejezés. A "kapcsoló" utasítások kezelik a különféle eseteket.

Irodalom