Estoy comenzando una investigación bibliográfica personal sobre algoritmos de verificación de tipos y quiero algunos consejos. ¿Cuáles son los algoritmos, estrategias y técnicas generales de verificación de tipos más utilizados?
Estoy particularmente interesado en algoritmos complejos de verificación de tipos que se implementaron en lenguajes de tipeo muy estáticos y ampliamente conocidos como, por ejemplo, C ++, Java 5+, Scala u otros. IE, algoritmos de verificación de tipos que no son muy simples debido a la mecanografía muy simple del lenguaje subyacente (como Java 1.4 y versiones posteriores).
No estoy interesado en un lenguaje específico X, Y o Z. Estoy interesado en algoritmos de verificación de tipo, independientemente del idioma al que se dirijan. Si proporciona una respuesta como "el lenguaje L del que nunca oyó hablar, que está fuertemente tipeado y el tipeo es complejo, tiene un algoritmo de verificación de tipo que hace A, B y C al verificar X e Y usando el algoritmo Z", o "el la estrategia X e Y utilizada para Scala y una variante Z de A utilizada para C # son geniales debido a las características R, S y T que funcionan de esa manera ", entonces las respuestas son buenas.
fuente
Respuestas:
La mayoría de las investigaciones no publican realmente los algoritmos de verificación de tipos para lenguajes de programación completos. Encontrará algunas formalizaciones de una gran parte de los sistemas de tipos para lenguajes de programación completos, como el trabajo realizado por Drossopoulou y Eisenbach para Java o el trabajo de Nipkov et al en C ++ . Sin embargo, con mayor frecuencia, solo encontrará los sistemas de tipos para alguna parte central del lenguaje (Featherweight Java es un ejemplo) o para los conceptos centrales de un lenguaje como el enfoque de inferencia de tipo local de scala .
En conferencias como POPL e ICFP, encontrará muchos algoritmos de verificación de tipos para tipos específicos de sistemas de tipos, y enfoques novedosos como la verificación de tipos bidireccional y tridireccional .
En términos más generales, es probable que necesite saber sobre el algoritmo de Damas-Milner , la inferencia de tipos locales, la verificación de tipos bidireccionales y tridireccionales, y ampliar a partir de ahí, siguiendo las referencias en los documentos y utilizando Google Scholar para encontrar qué documentos citan estos y construir sobre Los enfoques descritos. Además, como se sugirió anteriormente, conferencias como POPL, ICPF, ESOP e incluso ECOOP y OOPSLA tendrán documentos relevantes para su búsqueda.
fuente
Una herramienta básica son las gramáticas de atributos . Tal vez no puedas hacer todo lo malo que puedas imaginar con ellos, pero son un buen punto de partida.
Esencialmente, puede caminar sobre el árbol de sintaxis abstracta de un programa de arriba hacia abajo y / o de abajo hacia arriba y pasar información. Entonces, por ejemplo, podría pasar información de tipo de alcance global (por ejemplo, clases y sus miembros) hacia abajo y determinar el tipo de expresiones de forma recursiva, es decir, de abajo hacia arriba, pasando los tipos resultantes hacia arriba.
Encuentre alguna explicación y ejemplos en las diapositivas aquí (Capítulo 5).
fuente