8
votes

C ++ 0x n'aura plus de concepts. Des avis? Comment cela vous affectera-t-il?

à la juillet 2009 C ++ 0x réunion à Francfort , il a été décidé de Supprimer les concepts de C ++ 0x. Personnellement, je suis déçu, mais je préférerais avoir une mise en œuvre de C ++ 0x que n ° C ++ 0x. Ils ont dit qu'ils seront ajoutés à une date ultérieure.

Quelles sont vos opinions sur cette décision / problème? Comment cela vous affectera-t-il?


11 commentaires

Une question qui demande des avis est intrinsèquement subjective. Je voterais pour fermer, mais j'ai frappé ma limite aujourd'hui.


Pouvez-vous les faire travailler sur quelque chose de plus opportun, tel qu'un ABI? Surtout lorsque vous utilisez la bibliothèque standard C ++?


Voté pour fermer. Je ne vois même pas cette viable en tant que wiki communautaire - il n'y a rien que quiconque ici puisse faire à ce sujet. Ceci est juste quelque chose que tout le monde doit vivre avec. En plus de cela, donc un forum pour discuter de choses.


Vous devriez en faire un wiki communautaire, à tout le moins. Je ne fermerai pas, cependant, car c'est une question intéressante.


Je me demande s'il est possible d'ouvrir la question. En outre, non seulement les concepts, mais également la collecte des ordures ont été supprimées.


Voir aussi Stackoverflow.com/Questtions/1155389/...


La police de clôture peut-elle s'il vous plaît SFU? Je pense que c'est une question intéressante et si vous êtes étroit d'esprit, allez lire quelque chose d'autre!


@Tobias: Je vous réfère à Stackoverflow.com/faq sous "Quel type de questions dois-je pas demander ici?"


"Évitez de poser des questions subjectives, argumentatives ou exigent une discussion prolongée. Ce n'est pas un conseil de discussion, il s'agit d'un lieu de réponse qui peut être répondu!"


Là, je l'ai fait moins subjectif.


@Tobias: Les personnes qui ne comprennent pas comment ça marche et les types de questions appropriées ici veuillez lire les FAQ? Et puis, s'ils ne sont pas disposés à travailler dans les paramètres de oui, peuvent-ils aller ailleurs?


9 Réponses :


6
votes

Je les attendais avec impatience. Principalement pour une meilleure déclaration d'erreur lorsque la compilation a échoué. Rien de tel que de lire à travers 1000 cordes de personnage pour comprendre vos erreurs mutrutiques.


0 commentaires

2
votes

Je n'ai pas encore été impliqué dans des concepts. Cependant, ce que j'ai remarqué, c'est qu'ils étaient généralement assez verbeux. Je pense que je ne les voudrais pas dans la bibliothèque STL. Je connais déjà la bibliothèque, je peux facilement analyser les erreurs de compilation. Pas besoin de concepts. Cependant, des concepts seraient bien de décrire mes propres cours, de sorte que les collègues les apprenaient plus rapidement et éviteraient des abus. Chaque concept est aussi loin que je comprenne une contrainte, qui limite l'utilisation d'un type. Ce serait bien lors de la création d'interfaces fraîches que quelqu'un d'autre doit apprendre.


0 commentaires

8
votes

Personnellement, je ne suis pas trop mécontent de l'éloignement, car le but des concepts devait principalement améliorer les messages d'erreur de temps de compilation, comme Jeremy Siek, l'un des co-auteurs de la proposition de concepts, écrit ( http://lambda-the-ultime.org/node/3518#COMMENT-50071 ) :

pendant que la proposition des concepts n'était pas parfait (peut-il une extension à C ++ vraiment jamais être parfait?), ça serait ont fourni un très utilisable et extension utile à la langue, un extension qui serait drastiquement réduire les messages d'erreur infâmes que les utilisateurs actuels de modèle Les bibliothèques sont en proie à.

Bien sûr, les concepts avaient plus de but que simplement permettre aux compilaires de donner des messages d'erreur plus courts, mais je pense que nous pouvons tous vivre sans eux.

Edit: Herb Sutter écrit également sur son Blog :

Q: N'A N: N'A N'ÉTAIT PAS UN BRANTIF DE C ++ 0X fonctionnalité?

A: N ° de concepts serait génial, mais Pour la plupart des utilisateurs, la présence ou L'absence de concepts ne fera pas différence pour leur expérience avec C ++ 0x Sauf pour la qualité de l'erreur messages.

Q: ne sont pas des concepts sur l'ajout majeur Nouveau pouvoir expressif de la langue, et ainsi permettre de nouveaux types de nouveaux types de Programmes ou styles de programmation?

A: Pas vraiment. Les concepts sont presque Entièrement sur l'obtention d'une meilleure erreur messages.


0 commentaires

4
votes

Je suis triste de les voir déposer de la liste.

Personnellement, j'aime les types que j'utilise pour obéir à une interface connue, qu'ils soient des primitifs, des structures ou des classes. De cette façon, je sais comment je peux utiliser le type et ce que je dois mettre en œuvre pour fournir le type.

Ceci est facile à réaliser avec la programmation standard orientée objet. Toutefois, à mon avis, tandis que la programmation techniquement générique est fortement typée, il perd que le concept d'interface qui tapant fournit OO. En fait, la programmation générique est une sorte de typage dynamique mais résolue au type de compilation à partir d'une perspective d'interface.

Par exemple, je passe un itérateur dans un algorithme qu'il doit fournir certains opérateurs, mais il n'y a pas d'interface pour spécifier ce que les opérateurs devraient faire ou quels sont leurs contrats (uniquement la documentation). Si vous avez opérateur ++ () et opérateur * () il compilera mais cela ne vous donne pas le même type de type garantit que les interfaces vous donnent dans OO.

Pour moi Les concepts apportent des types à la programmation générique et les interfaces de certitude apportent à OO, la meilleure compilation ne constitue qu'un bonus.

Je sais que nous sommes tous des programmeurs C ++ et nous sommes très intelligents et nous lisons la documentation et comprenons la surcharge de l'opérateur et les subtilités de la programmation générique. Mais lorsque la langue fournissant des garanties que je peux compiler et que le compilateur peut tester, je peux dépenser plus de puissance cérébrale de résoudre les problèmes que je suis payé pour résoudre.


2 commentaires

+1: bons points! Et lorsque vous recherchez des cartes conceptuelles, il apporte également des «implémentations d'interface externe» à la programmation générique.


Les interfaces ne fournissent plus de garanties que vous pouvez compter sur. Cela dit simplement "Le programmateur a voulu que cette classe fonctionne dans ce contexte". Rien de savoir si cela se comporte comme si vous vous attendez. Quoi qu'il en soit, c'était exactement la raison pour laquelle il a été supprimé. Ce type d'interfaces explicites a été considérée comme une affaire mauvaise . Le problème est que cela rend vraiment une programmation générique une corvée et dans des cas non triviaux, pratiquement impossible.



1
votes

J'aime beaucoup les concepts! La possibilité de créer des types très différents se comporter de la même manière par une définition externe (la cartographie de concept) est une caractéristique très puissante et utile (surtout qu'elle survient à l'heure de la compilation et n'affecte pas la performance du temps d'exécution).

Je pense que c'est encore plus puissant et meilleur que de mettre en œuvre toutes les fonctionnalités utiles directement dans le type et y accéder via des interfaces telles que faites dans .NET. Cela ne permet pas à l'extensibilité ultérieurement (d'accord, .NET connaît des méthodes d'extension depuis 3,0 (ou 3.5, pas sûres) mais ce n'est pas le même).

Améliorer les messages d'erreur est un autre (et l'original) grandement amélioration que les concepts apportent.

Mais une de mes premières pensées lors de la lecture des concepts était la suivante: cela prendra un temps looooong jusqu'à ce que GCC et MSVC le soutiennent.

Donc, je pense qu'il est logique de le supprimer de la norme à venir. Mais ce que je souhaiterais, c'est un accord fixe de fonctionnalités pour les normes POST C ++ 0X contenant des concepts. Cela permettrait aux fournisseurs du compilateur de mieux se préparer à la norme C ++ 2X.

Alors j'espère vraiment que nous verrons des concepts dans l'avenir pas si loin.


0 commentaires

1
votes

Je pense qu'ils ont pris la bonne décision. J'aimerais voir une mise en œuvre de concepts de haute qualité ajoutée à la langue, mais la spécification se dirigeait dans la mauvaise direction, mettant trop de fardeau sur l'utilisateur pour spécifier explicitement les cartes de concept. Le papier de Stroustrup a suggéré des corrections à cela, mais ce serait un changement assez radical si tard dans le processus, je pense. Et sans compilateur pour le tester.

En résumé, les concepts tels qu'ils ont été spécifiés vers la fin, auraient été un grand pas en arrière, entrave des programmes génériques et éventuellement éclater la communauté C ++, avec un grand groupe de programmeurs qui collent avec C ++ 03.

concepts, comme proposé "fixe" par STROSTRUP, aurait, aussi loin que possible, a été correct, mais ce serait risqué d'adopter ces changements si rapidement. (Et je ne suis pas convaincu que cela n'aurait pas causé d'autres retards.)

Honnêtement, je suis heureux de voir qu'ils l'ont joué en toute sécurité et enlevé pour le moment. Nous avons survécu sans concepts jusqu'à présent, et je peux vivre sans eux pendant 5 ans.


0 commentaires

1
votes

C'est très triste. Apporter des concepts à C ++ apporterait son système de type presque au même niveau de pouvoir que les typlasses de haskell, et cela aurait été génial - une langue optimisée à la vitesse, vous permettant de faire ce que vous voulez, et pourtant strictement typeAfe, à moins que vous n'utilisiez d'évents d'évasion (tout en restant rapide!). Il était également censé résoudre le problème de longue date de STL et de boost (et des bibliothèques de modèle en général) étant difficiles à utiliser en raison de la nature de la nature de la nature de la nature des modèles C ++ 03 et des problèmes qui en résultent avec le compilateur Rapport d'erreur.


0 commentaires

1
votes

J'ai aussi pensé que c'était un mauvais appel et que c ++ 0x sera le pire pour la suppression, mais il suffit de lire la lecture de STROSTRUP Simplifiant l'utilisation de concepts J'ai changé d'avis. Je ne savais pas que la proposition des concepts était celle compliquée et je pense que c'est une bonne chose qu'elle sera bien pensée avant d'ajouter à la langue. Même si STROSTRUP prêche à maintenir les concepts que son article m'a convaincu que, comme il se trouve que les concepts feraient plus de mal que de bien et même si BS propose une solution que je crains que cela puisse être précipité et non toutes les implications.


0 commentaires

1
votes

Je suis triste.

i Checkout the conceptgcc et c'est génial! J'écris déjà une bibliothèque simple en utilisant cela, et je vois des inconvénients comme plus de code pour écrire ou une difficulté d'esprit en pensant à la puissance de l'abstraction des concepts. La bibliothèque des concepts STD pose vraiment des problèmes, notamment une telle standard, c'est juste malentendu. Je pense que la norme à venir ne devrait normaliser que la grammaire du concept et fournir des indications sur la manière de l'utiliser.


0 commentaires