Una Introducción Básica a Sistemas de Tipos Estáticos Pablo E. (Fidel) Martínez López
“The study of type systems – and of programming languages form a type-theoretical perspective – has become an energetic field with major applications in software engeneering, language design, high-performance compiler implementation, and security.” Benjamin C. Pierce Types and Programming Languages
Sistemas de Tipos Estáticos Overview Definición y características Estilos y presentaciones Métodos de presentación y algoritmos Importancia Conclusiones Bibliografía
Sistemas de Tipos Estáticos ¿Qué son? herramientas para determinar propiedades de programas sin ejecutarlos asocian información a cada parte de un programa se basan en el texto del programa, teniendo en cuenta la semántica
Sistemas de Tipos Estáticos Características generales estáticos no ejecutan el programa decidibles (en general) hay un algoritmo que calcula la propiedad ALTERNATIVA: tipos dependientes no decidibles asistentes para la construcción de programas correctos pueden requerir anotaciones del usuario o no diferentes estilos de programación
Sistemas de Tipos Estáticos Estilos de diseño del sistema A la Curry términos sin tipo semántica sobre ellos el sistema de tipo que elimina (ciertos) programas erróneos A la Church términos tipados semántica basada en los tipos
Sistemas de Tipos Estáticos Presentaciones del sistema implícita (términos sin anotaciones de tipos) explícita (términos con anotaciones de tipos) Históricamente los implícitos se presentan a la Curry los explícitos se presentan a la Church Es común mezclar estilo y presentación
Sistemas de Tipos Estáticos Sistemas a la Curry lenguaje de términos semántica sobre este lenguaje lenguaje de tipos relación entre términos y tipos Propiedades fundamental un término con tipo no tiene ciertos errores el tipo describe propiedades del término
Sistemas de Tipos Estáticos Método para especificar la relación juicios (esquemas de) reglas de derivación árboles de derivación Propiedad básica juicio válido árbol de derivación para él
Sistemas de Tipos Estáticos Características de un sistema dado relaciones funcionales (o no) a cada término le corresponde un único tipo relaciones dirigidas por sintaxis (o no) hay una regla por cada construcción del lenguaje Implicaciones Para 1. los algoritmos son casi triviales Para 2. los algoritmos son recursivos
Sistemas de Tipos Estáticos ¿Y si el sistema no es funcional o dirigido por sintaxis? Diseñamos uno equivalente que lo sea ¡Debe demostrarse en qué sentido son equivalentes! Típicamente: relación entre diferentes tipos para un término, establecer la relación entre la salida del algoritmo y sus tipos
Sistemas de Tipos Estáticos Importancia ventajas para los programadores chequeo de errores comunes documentación rudimentaria posibilidades de optimización al compilar desarrollos posteriores basados en ellos Types & Effects Type Specialization Grammar Based Analysis
Sistemas de Tipos Estáticos Conclusiones proveen numerosas ventajas alimentaron el desarrollo de nuevas técnicas presentes en la mayoría de los lenguajes mainstream, de una forma u otra
Sistemas de Tipos Estáticos Bibliografía Benjamin C. Pierce. Types & Programming Languages. The MIT Press, 2002 John C. Reynolds. Theories of Programming Languages. Cambridge University Press, 1998. Pablo E. Martínez López. Static Type Systems: From Specification to Implementation. Chapter 11 of Verification, Validation and Testing in Software Engeneering. Aristides Dasso and Ana Funes (eds.). Idea Group Publishing, 2005.