Valencia, Octubre de 2012Dedicada a: Angélica, mi esposa.A mis hijas Zanya e Itzayana.Juntos, los cuatro, hemos culminado esta aventura.i ii
ResumenLa evaluación parcial dirigida por narrowing (NPE) [Vid96, AFV98, AV02] es una técnica para la especialización de programas funcionales y lógico funcionales. La técnica original es de tipo online, es decir, realiza la propagación de valores estáticos y los controles de terminación durante el propio proceso de especialización. Los esquemas oine, por el contrario, tienen dos fases bien diferenciadas: el análisis de tiempo de enlace, en el que se propagan los parámetros estáticos y se determina la estrategia de control mediante anotaciones, y la fase de especialización propiamente dicha (la cual sólo debe seguir las anotaciones de la primera fase). En general, se dice que la evaluación parcial oine es más ecientepero menos precisaque la evaluación parcial online.El objetivo principal de esta tesis es mejorar la aproximación oine a la evaluación parcial dirigida por narrowing de [RSV05a]. En particular, se mejora el procedimiento de anotación y se implementa un evaluador parcial más efectivo con el n de obtener programas mejor especializados y más rápidos. Como aplicaciones, empleamos el evaluador parcial para llevar a cabo la especialización de un intérprete, lo que de acuerdo a la primera proyección de Futamura [Fut71] se considera como un tipo de compilación. Esta aplicación representa la primera aproximación a la compilación por evaluación parcial de programas lógico funcionales. Además, consideramos también la especialización de un lenguaje de dominio especíco que tiene como propósito generar programas para máquinas de control numérico computarizado (CNC).Desde un punto de vista más teórico, se extiende la técnica oine básica para programas funcionales de orden superior mediante la aproximación conocida como desfuncionalización. Además, se aplica una transformación polivariante que permite mejorar la precisión del proceso de iii especialización sin necesidad de implementar un esquema polivariante real.El esquema resultante tiene un buen equilibrio entre eciencia y precisión, mejorando así las propuestas anteriores y constituyendo un buen punto de partida para el desarrollo de herramientas de especialización de programas lógico funcionales ecaces. The aim of this thesis is to improve the approach to oine narrowing driven partial evaluation of [Ram07]. In particular, the annotation procedure is enhanced and a more eective partial evaluator is developed in order to get better specialized and faster programs. As applications, we carry out the specialization of interpreters which, in agreement with the rst Futamura projection [Fut71], is considered like a kind of program compilation. This application represents the rst approach to the compilation by partial evaluation of functional logic programs. Additionally, we consider the specialization of a domain specic language whose goal is to generate programs for computerized numerical control of machines (CNC).From a theoret...