Me falta una formación en informática teórica, pero me hubiera gustado entender a qué tipo de objetos teóricos corresponden los conceptos de C ++ . Básicamente, los conceptos de C ++ permiten definir un conjunto de tipos que satisfacen una lista de restricciones. Entonces, desde un punto de vista teórico, ¿a qué conceptos de C ++ corresponden, o corresponden aproximadamente (y en ese caso, cuáles son las diferencias)?
8
Respuestas:
Desde la perspectiva de la teoría del lenguaje de programación, a diferencia de la perspectiva de computabilidad que han ofrecido otras respuestas y comentarios, las plantillas de C ++ combinadas con conceptos corresponden a polimorfismo limitado o genérico limitado . Los conceptos mismos corresponden a las restricciones o límites colocados en un tipo.
Una plantilla es una función de nivel de tipo, parametrizada por tipo que está limitada por un concepto para implementar una interfaz particular. Cuando la plantilla se aplica a un tipo que satisface ese concepto, se genera un nuevo tipo.
Las plantillas + conceptos son análogos a los genéricos en Java, Scala o Eiffel. Se diferencian de las plantillas en C ++ anterior porque permiten que se especifiquen y verifiquen restricciones en los parámetros de tipo, mientras que las plantillas de C ++ no lo permitieron. El beneficio es una mejor comprobación estática de que el programa después de aplicar la plantilla estará bien escrito.
Una buena referencia es Pierce, Benjamin C. (2002). Tipos y lenguajes de programación . MIT Press, Capítulo 26: Cuantificación limitada.
fuente
Los conceptos de C ++ se asignan a lenguajes recursivamente enumerables. Dado que el sistema de tipos C ++ está Turing completo, cualquier propiedad de los tipos que se puede interrogar durante la creación de instancias de plantilla (tamaño, parámetros, etc.) se puede ejecutar a través de un programa arbitrario simulado en el sistema de tipos.
fuente