Técnicas avanzadas de compilación para programación lógica

  1. Morales Caballero, José Francisco
Dirigida por:
  1. Manuel Carro Liñares Director/a
  2. Manuel de Hermenegildo Salinas Director/a

Universidad de defensa: Universidad Politécnica de Madrid

Fecha de defensa: 17 de julio de 2010

Tribunal:
  1. Ricardo Peña Marí Presidente
  2. Julio Mariño Carballo Secretario/a
  3. Jan Wielemaker Vocal
  4. Terrance Swift Vocal
  5. Víctor Santos Costa Vocal

Tipo: Tesis

Resumen

Los lenguajes de programación declarativos permiten expresar programas en un lenguaje que es más cercano al problema que a los detalles de implementación. A pesar de la genericidad de esta definición, Lloyd propone una noción más clara de la declaratividad, definiendo los programas como teorías en una lógica adecuada y la computación deducción en base a la teoría. Prolog es uno de los lenguajes de programación del paradigma lógico más importantes, cuya teoría es la de la la deducción lógica. Implementaciones eficientes capaces de competir con muchos otros lenguajes de alto nivel y su flexibilidad, han hecho de Prolog un importante punto de partida para desarrollar nuevas ideas, como la programación con restricciones y multi-paradigma, mezclando programación funcional, orientada a objetos e imperativa. Aunque el estado del arte de las implementaciones de Prolog esta altamente optimizado para el tipo de problemas de busqueda para los que este está diseñado y que puede competir con muchas implementaciones de otros paradigmas --- tanto lógico, funcional, como imperativo --- su naturaleza caracteristicas dinámicas y declarativas imponen una considerable limitación en eficiencia. Un ambicioso objetivo para las implementaciones de Prolog, compartido por muchos otros lenguajes declarativos, consiste en el desarrollo de téctnicas que superen esta limitación sin sacrificar la expresividad del lenguaje. El objetivo de esta tesis es el desarrollo y mejora de técnicas avanzadas de compilacion para Prolog, en principio ortogonales a extensiones como la programación lógica con restricciones, Prolog con tabulación o CHR sobre Prolog. Las principales contribuciones presentadas en esta tesis pueden resumirse en: - Un compilador optimizante de Prolog, donde predicados seleccionados son compilados a C y diseñado para aceptar información de alto nivel, obtenida mediante análisis automático y expresada en un lenguaje estandarizado de aserciones. - Un enfoce automático a la generación de máquinas abstractas, donde el conjunto de instrucciones y la representación de código de byte y datos son definidas de forma individual. - Una descripción del conjunto de instrucciones completo de una máquina abstract para Prolog, en un dialecto de Prolog extendido para manejar cambios de estado (en forma de variables mutables) y adecuado para realizar transformaciones automáticas de programa. - Una representación de tagged words (palabras con etiquetas) en un lenguaje de alto nivel, explorando variantes para los casos de 32 y 64 bit. - Un marco de trabajo paramétrico para la generación de variaciones de máquinas abstractas, para explorar optimizaciones de forma general o enfocadas a un conjunto particular de programas. - Un estudio de la combinación de técnicas de compilación optimizante en código fuente y en código de bajo nivel, en un caso de prueba real para sistemas ubícuos.