-
Introducción.
Lenguajes funcionales puros y perezosos. Supercombinadores. Programación
monádica. Intérpretes y compiladores. Presentación
del kernel básico del lenguaje funcional Samba (un simple
subset del lenguaje Haskell).
-
Parsing.
Analizadores lexicográficos y sintácticos: reglas
de producción implementadas como funciones perezosas. Combinadores
léxicos y de parsing. La mónada Parser.
-
Chequeo de tipos. Sistema de Tipos Hindley-Milner. Chequeo de tipos
y su importancia en la construcción de compiladores. Algoritmos
de inferencia de tipos: entendimiento e implementación.
-
Reducción en grafos. Expresiones funcionales como grafos,
evaluación de programas en términos de reducciones en grafos.
Evaluación perezosa. Estudio de un intérprete para el kernel
básico: la máquina Template Instantiation.
-
Lambda lifting. Abstracciones y su transformación en supercombinadores.
Distintos algoritmos de lifteo.
-
La máquina G. La ma'quina abstracta G y su correspondiente
modelo computacional. Compilación y ejecución de supercombinadores.
Compilación de declaraciones locales mutuamente recursivas (letrec).
Tipos de datos inductivos y la compilación de funciones que han
sido definidas usando pattern matching. Esquemas de compilación:
cuando conviene ser completamente perezoso y cuando no.
-
Las máquinas TIM y Spineless Tagless G. Modelos alternativos
de compilación y ejecución de supercombinadores. Se hará
una presentación superficial de las mencionadas máquinas
y se realizará un estudio comparativo de los tres enfoques (G, TIM
y STG).
-
Recolección de residuos. Presentación y discusión
de diferentes técnicas de diseño de algoritmos de recolección
de residuos.
Las horas de clase se distribuirán aproximadamente de la siguiente
forma: tres semanas para los temas 1 y 2, una semana para el tema 3, una
6 semanas para los temas 4, 5 y 6, una semana para el tema 7 y una semana
para el tema 8.