Não tenho formação em ciência da computação teórica, mas gostaria de entender a que tipo de objetos teóricos os conceitos C ++ correspondem. Basicamente, os conceitos de C ++ permitem definir um conjunto de tipos que satisfazem uma lista de restrições. Portanto, do ponto de vista teórico, a que conceitos C ++ correspondem ou aproximadamente (e nesse caso, quais são as diferenças)?
8
Respostas:
De uma perspectiva da teoria da linguagem de programação, em oposição à perspectiva da computabilidade oferecida por outras respostas e comentários, os modelos C ++ combinados com os conceitos correspondem ao polimorfismo limitado ou à genicidade restrita . Os próprios conceitos correspondem às restrições ou limites colocados em um tipo.
Um modelo é uma função em nível de tipo, parametrizada por tipo que é restringida por um conceito para implementar uma interface específica. Quando o modelo é aplicado a um tipo que satisfaz esse conceito, um novo tipo resulta.
Modelos + conceitos são análogos aos genéricos em Java, Scala ou Eiffel. Eles diferem dos modelos no C ++ anterior porque permitem que restrições nos parâmetros de tipo sejam especificadas e verificadas, enquanto os modelos C ++ não permitem isso. O benefício é uma melhor verificação estática de que o programa após a aplicação do modelo será bem digitado.
Uma boa referência é Pierce, Benjamin C. (2002). Tipos e linguagens de programação . MIT Press, Capítulo 26: Quantificação limitada.
fonte
Os conceitos de C ++ são mapeados para linguagens recursivamente enumeráveis. Como o sistema de tipos C ++ é Turing completo, qualquer propriedade de tipos que possa ser interrogada durante a instanciação do modelo (tamanho, parâmetros etc.) pode ser executada através de um programa arbitrário simulado no sistema de tipos.
fonte