La disponibilità del primo compilatore Prolog, realizzato da David H. D. Warren nel 1977, incrementò la diffusione del linguaggio proponendolo come un efficace strumento di programmazione per classi di applicazioni in cui i linguaggi tradizionali si erano rivelati inadeguati. Nel 1983, lo stesso Warren definì un modello di macchina astratta (Warren Abstract Machine - WAM) che è diventata di fatto uno standard nello sviluppo di macchine astratte e compilatori per il linguaggio Prolog. Come per altri linguaggi, lo scopo della compilazione è quello di estrarre tutta l'informazione possibile prima dell'esecuzione in modo da ottimizzare il tempo di esecuzione di un programma. Nel caso del linguaggio Prolog, la compilazione scompone l'unificazione in una sequenza di operazioni elementari con le quali sono possibili molte ottimizzazioni, individua le situazioni particolari che possono richiedere una soluzione ottimizzata (per le variabili temporanee, per la prima occorrenza di una variabile, ecc.) e traduce il codice cercando di rinviare il più possibile l'esecuzione di certe operazioni che potrebbero risultare inutilii a causa del fallimento di operazioni successive.
Macchina Astratta di Warren e compilatore Prolog
DOMENICI, ANDREA;PRETE, COSIMO ANTONIO
1993-01-01
Abstract
La disponibilità del primo compilatore Prolog, realizzato da David H. D. Warren nel 1977, incrementò la diffusione del linguaggio proponendolo come un efficace strumento di programmazione per classi di applicazioni in cui i linguaggi tradizionali si erano rivelati inadeguati. Nel 1983, lo stesso Warren definì un modello di macchina astratta (Warren Abstract Machine - WAM) che è diventata di fatto uno standard nello sviluppo di macchine astratte e compilatori per il linguaggio Prolog. Come per altri linguaggi, lo scopo della compilazione è quello di estrarre tutta l'informazione possibile prima dell'esecuzione in modo da ottimizzare il tempo di esecuzione di un programma. Nel caso del linguaggio Prolog, la compilazione scompone l'unificazione in una sequenza di operazioni elementari con le quali sono possibili molte ottimizzazioni, individua le situazioni particolari che possono richiedere una soluzione ottimizzata (per le variabili temporanee, per la prima occorrenza di una variabile, ecc.) e traduce il codice cercando di rinviare il più possibile l'esecuzione di certe operazioni che potrebbero risultare inutilii a causa del fallimento di operazioni successive.I documenti in IRIS sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.