¡Buena pregunta! Pregunta qué esperamos de los tipos en un idioma escrito.
Primero tenga en cuenta que podemos escribir cualquier lenguaje de programación con la unidad : simplemente elija una letra, diga U
y diga que cada programa tiene tipo U
. Esto no es terriblemente útil, pero tiene sentido.
eAeAAint
No hay fin a lo expresivos que pueden ser sus tipos. En principio, podrían ser cualquier tipo de enunciados lógicos, podrían usar la teoría de categorías y otras cosas, etc. Por ejemplo, los tipos dependientes le permitirán expresar cosas como "esta función asigna listas a listas para que la salida sea una entrada ordenada". Puede ir más allá, en este momento estoy escuchando una charla sobre "lógicas de separación concurrente" que le permite hablar sobre cómo funcionan los programas concurrentes con estado compartido. Cosas lujosas.
El arte de los tipos en el diseño del lenguaje de programación es uno de equilibrar la expresividad y la simplicidad :
- tipos más expresivos nos permiten explicar con más detalle (a nosotros mismos y al compilador) lo que se supone que está sucediendo
- los tipos más simples son más fáciles de entender y pueden automatizarse más fácilmente en el compilador. (A las personas se les ocurren tipos que esencialmente requieren un asistente de prueba y la entrada del usuario para hacer la verificación de tipos).
La simplicidad no debe subestimarse, ya que no todos los programadores tienen un doctorado en teoría de lenguajes de programación.
Así que volvamos a su pregunta: ¿cómo sabe que su sistema de tipos es bueno ? Bueno, pruebe los teoremas que muestran que sus tipos están equilibrados. Habrá dos tipos de teoremas:
Teoremas que dicen que tus tipos son útiles . Saber que un programa tiene un tipo debería implicar algunas garantías, por ejemplo, que el programa no se atascará (eso sería un teorema de seguridad ). Otra familia de teoremas conectaría los tipos con los modelos semánticos para que podamos comenzar a usar matemáticas reales para probar cosas sobre nuestros programas (esos serían los teoremas de adecuación y muchos otros). La unidad anterior es mala porque no tiene teoremas tan útiles.
Teoremas que dicen que tus tipos son simples . Uno básico sería que es decidible si una expresión dada tiene un tipo dado. Otra característica de simplicidad es dar un algoritmo para inferir un tipo. Otros teoremas sobre la simplicidad serían: que una expresión tiene como máximo un tipo, o que una expresión tiene un tipo principal (es decir, el "mejor" entre todos los tipos que tiene).
Es difícil ser más específico porque los tipos son un mecanismo muy general. Pero espero que veas a qué debes disparar. Como la mayoría de los aspectos del diseño del lenguaje de programación, no existe una medida absoluta de éxito. En cambio, hay un espacio de posibilidades de diseño, y lo importante es comprender en qué parte del espacio se encuentra o quiere estar.