23 JULHO / TERÇA FEIRA / 16:18
FCUP PT 
 EN
 
 
APRESENTAÇÃO
PESSOAS
ENSINO
INVESTIGAÇÃO
BIBLIOTECA
NOTÍCIAS
CONTACTOS

Um Compilador de Prolog com Expansão de Código

Michel Ferreira

Mestrado em Informática pela Universidade do Minho

Outubro 1996


Resumo

O objectivo desta dissertação é explorar uma nova forma de obter eficiência na compilação de programas Prolog. Esta compilação tem sido o tópico de muita investigação, atingindo um nível, no mínimo, tão elevado como o da compilação de linguagens imperativas. No entanto ainda existe uma diferença considerável entre o tempo de execução de um programa escrito numa linguagem imperativa e um programa equivalente escrito em Prolog. Esta diferença é fruto do código mais geral que se escreve numa linguagem de programação lógica comparativamente com as linguagens imperativas. Para ultrapassar isto é preciso gerar código especializado.

A forma de obter código especializado tem sido implementada recorrendo a interpretação abstracta para deduzir propriedades do programa, por forma a poder gerar esse código especializado. A abordagem explicada nesta dissertação mostra que não é necessária uma fase de interpretação abstracta. A propagação da informação implícita em cada instrução WAM é suficiente para permitir muitas das optimizações que eram suportadas pela interpretaçao abstracta. A propagação desta informação permite a obtenção de predicados especializados para os diferentes tipos de argumentos que aparecem nos objectivos das cláusulas. Mostra-se ainda que complementando as instruções WAM com informação acerca dos seus argumentos permite reduzir substancialmente a complexidade destas instruções, obtendo um efeito idêntico ao de definir uma nova máquina abstracta de um nível mais baixo do que a WAM.

As melhorias obtidas no código gerado comparativamente com o código geral, são equivalentes às melhorias possibilitadas por uma fase de interpretação abstracta nos sistemas que mais partido tiram desta fase de interpretação abstracta, como é o caso do Parma e Aquarius, resultando numa aceleração do tempo de execução do código de cerca de 5 vezes.

FCUP 2024