Projeto e Implementação do Compilador YAPc: Um Compilador Otimizador para Linguagens de Programação em Lógica
Autores
4595 |
1994,563
|
|
4596 |
1994,563
|
Informações:
Publicações do PESC
Prolog é uma linguagem declarativa largamente usada. Obter desempenho é um dos principais objetivos associados a qualquer implementação de Prolog. Atualmente, muitos sistemas Prolog são baseados na máquina abstrata de Warrem, a WAM. Para obter bom desempenho, trabalhos em implementação de Prolog propõem compiladores para código nativo. Estes sistemas podem ser caros, pois se baseiam em análises globais e/ou na intervenção de usuários para obter bom desempenho.
Esta tese propõe compilação dinâmica para Prolog, em um estilo de compiladores Just-In-time. Esta abordagem possui importantes vantagens. Primeiro, ela adapta-se às características do programa compilando apenas as partes do programa que são executadas freqüentemente. Segundo, ela não necessita de suporte da linguagem, apenas complexos padrões de execução, tais como gerência de exceções, podem ser deixadas para o interpretador. Por outro lado, o custo de compilação é agora parte do tempo total de execução. Os resultados iniciais sugerem que YAPc alcança um desempenho substancial sobre o emulador original, e que ele é um sistema com ótimo desempenho comparado com o estado da arte em geração de código nativo.
Prolog is a widely used declarative language. Performance is an important issue in the design of Prolog systems. Currently, most Prolog systems rely on emuladors of Warren's Abstract Machine, the WAM. Towards better performance, previous research on high-performance Prolog implementations has proposed several native-code compilers. These systems can be expensive, as they rely on expensive global analysis and/or user annotations for best performance.
This thesis proposes a dynamic compilation for Prolog, in the style of Just-In-Time compilers. This approach has several important advantages. First, it adapts to the actual charateristics of the program by compiling only the parts of the program that are executed frequently.Second, it does need to fully support the language, only what is deemed important to performance. Complex execution patterns, such as exception handling, may be left to the interpreter. On the other hand, compilation cost is now part of the run-time. The initial results suggest that the YAPc achieves very substantial performance improvements over the original emulator, and that it can approach and even out-perform state-of-the-art native code systems.