La primera pregunta es cómo se vería C ++ si tuviera tipos estáticos fuertes con polimorfismo paramétrico.
C ++ necesitaría tener tipos estáticos fuertes, lo que significaría que ya no se nos permitiría usar números enteros como booleanos y todas esas cosas divertidas.
Para evitar que el programador subvierta las garantías de tipo mediante la sustitución de valores de un tipo por otro, C ++ también debería ser seguro para la memoria, lo que significa que necesitaríamos reemplazar toda la administración de memoria con administración automática de memoria.
Finalmente, tener polimorfismo paramétrico impondría restricciones (y orden) en la forma en que puede existir el polimorfismo, la capacidad de una clase o función para ser utilizada generalmente sobre valores de todo tipo.
- ¿Qué cambiarías si fueras el encargado de los Juegos Olímpicos?
- ¿Qué hubiera pasado si Ryan Giggs hubiera optado por jugar para Inglaterra y no para Gales?
- ¿Qué pasaría con los precios de la gasolina si todos boicotearan a Exxon Mobil?
- ¿Qué pasaría si un grupo de personas, con un total combinado de billones de dólares, decidiera quemar colectivamente su dinero?
- ¿Qué le sucedería a tu cuerpo si corrieras una milla en 10 segundos?
El sistema de tipo Hindley-Milner garantiza que las funciones polimórficas paramétricas sean en realidad polimórficas paramétricas: por ejemplo, si una función tiene el tipo “\ forall a. A -> a” (donde -> es el tipo de función), esto solo * puede * ser La función de identidad. En C ++, este tipo de polimorfismo se manifiesta en plantillas, que permiten definir la funcionalidad sobre variables de tipo en lugar de tipos concretos. Las plantillas de C ++ son mucho más permisivas y requieren que las plantillas solo funcionen para los casos que aparecen en el código. Tener un sistema de tipo Hindley-Milner encima de esto permitiría que las funciones de plantilla existan solo si son lo suficientemente generales como para operar sobre argumentos de tipo * any *.
Si tuviéramos una inferencia de tipos en la parte superior de un sistema de tipos de estilo Hindley-Milner, tendríamos formas de omitir los tipos y las variables de tipo en las declaraciones de clase de plantilla. Sin embargo, C ++ necesitaría mensajes de error de plantilla mucho mejores, o el programador seguramente morirá.