Gradual refinement types
Author
Professor Advisor
Abstract
Los tipos refinados (Refinement Types) son una técnica efectiva de verificación basada en lenguajes que extienden la expresividad de los sistemas de tipos tradicionales incluyendo la posibilidad de restringir valores usando predicados lógicos. Sin embargo, como cualquier otra disciplina de tipos expresiva, obligan a los programadores a lidiar con las estrictas restricciones impuestas por los tipos. Esto puede resultar ser demasiado tedioso para los programadores, especialmente en etapas tempranas de desarrollo donde el código cambia constantemente. Nosotros conjeturamos que esta rigidez no deseada puede obstaculizar la adopción de los tipos refinados.
Los tipos graduales (Gradual Typing) permiten combinar la flexibilidad de los lenguajes dinámicamente tipados con las garantías otorgadas por los lenguajes estáticamente tipados. Usando tipos graduales, los programadores pueden comenzar un desarrollo con código chequeado completamente de forma dinámica y aprovechar la flexibilidad de las construcciones idiomáticas típicas de los lenguajes dinámicos. A medida que el código se vuelve más estable, el programador o la programadora puede escoger verificar estáticamente ciertas porciones del programa, haciendo precisos los tipos en esos puntos. Finalmente, si lo desea, también puede
decidir verificar el código completamente de forma estática. Los sistemas de tipos graduales aseguran una transición suave entre estos distintos niveles de precisión.
Esta tesis demuestra como los tipos graduales pueden ser extendidos para soportar los tipos refinados, permitiendo una evolución suave además de interoperabilidad entre tipos simples y tipos lógicamente refinados. Al hacer esto, se atacan dos desafíos previamente inexplorados en la literatura sobre tipos graduales: lidiar con información lógica imprecisa y con la presencia de tipos dependientes. El primer desafío condujo a una noción crucial de localidad para fórmulas, mientras que el segundo desafío terminó en la definición de novedosos operadores relacionados con substitución al nivel de tipos y términos, que identifican nuevas oportunidades para errores en tiempo de ejecución en lenguajes graduales con tipos dependientes.
General note
Magíster en Ciencias, Mención Computación
Patrocinador
Este trabajo ha sido parcialmente financiado por CONICYT - PCHA Magíster Nacional 2015-22150894
Identifier
URI: https://repositorio.uchile.cl/handle/2250/144325
Collections
The following license files are associated with this item: