Standard C++0x : Les concepts ne seront pas intégrés
Qu'en pensez-vous ?
Le 2009-07-13 18:11:42, par JolyLoic, Rédacteur/Modérateur
Bonjour,
Le vote a eu lieu aujourd'hui, et la décision a été prise de ne pas inclure les concepts dans C++0x. Les principaux arguments étaient que beaucoup d'acteurs estimaient que la proposition n'était pas assez mature, et risquait de repousser le standard.
Nous n'avons pas encore décidé comment le travail sur les concepts doit continuer, et quand ils pourront être intégrés dans le langage.
Le vote a eu lieu aujourd'hui, et la décision a été prise de ne pas inclure les concepts dans C++0x. Les principaux arguments étaient que beaucoup d'acteurs estimaient que la proposition n'était pas assez mature, et risquait de repousser le standard.
Nous n'avons pas encore décidé comment le travail sur les concepts doit continuer, et quand ils pourront être intégrés dans le langage.
-
hiuraMembre actifPour les ignorants comme moi, aurais-tu un lien de ce que sont les concepts ?le 13/07/2009 à 19:07
-
GotenMembre chevronnéEn gros ça permet de définir une interface que doit fournir un paramètre de template.
Ca permet en premier lieu d'avoir des erreurs du compilo plus direct, par exemple si t'essayes de stocker dans un vecteur un objet qui n'est pas copi-able.
Ca aurait permis d'écrire ce genre de chose :Code : 1
2
3
4
5
6
7
8
9
10
11
12template <typename T> requires equalityComparable<T> bool isEqual(const T& lhs, const T& rhs) { return lhs==rhs; } // et on définit un concept comme ceci : auto concept equalityComparable<typename T> { bool operator==(const T&); }
J'ai pas de lien très poussé sous la main, jte retrouve ça.le 13/07/2009 à 19:59 -
JolyLoicRédacteur/ModérateurUn des exemples fondateurs est std::sort. Si tu fais std::sort sur des itérateurs de std::list, tu auras un message d'erreur obscur qui parlera peut-être d'un problème avec un opérateur [] ou un opérateur + dans du code qui n'est pas à toi, mais fait partie de la bibliothèque standard.
Avec des concepts, tu aurais eu une erreur dans ton code, indiquant que sort a besoin d'itérateurs à accès direct (RandomAccessIterator), et que tu lui as fourni des itérateurs d'un mauvais type.
Le but étant de rendre les messages d'erreur des templates compréhensibles par le commun des mortels.
Et ils permettaient aussi bien d'autres choses, entre autre une bonne gestion de l'overloading des templates, ce qui aujourd'hui doit se faire à la main avec des astuces et des classes de traits. Avec les concepts, les classes de traits auraient probablement disparu peu à peu.le 14/07/2009 à 7:55 -
hiuraMembre actifD'accord, merci à vous deux.
Je crois en fait que j'en avais déjà entendu parler. N'y avait-il pas l'intention d'introduire le mot clef where ?le 14/07/2009 à 9:01 -
3DArchiRédacteurBonjour,
Effectivement, c'est dommage.
Entre autres, les concepts :
-> jouent le rôle des classes traits : ils spécifient les exigences qu'un paramètre d'une classe/fonction template doit remplir (le code suivant ne suit pas la syntaxe exacte proposée mais illustre le propos ):
Code : 1
2
3
4
5
6
7
8
9
10
11
12// définition d'un concept : concept Comparable<typename T> { bool operator<(T, T); // On spécifique qu'il doit exister un opérateur '<' de la forme indiquée ci-dessus. } // utilisation dans une fonction template : template<class T> requires Comparable<T> T min(T t1, T T2) {...
Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22class personne { public: std::string nom; std::string prénom; }; concept Comparable<typename T> { bool operator<(T, T); } concept_map Comparable<personne > { // ca ne définit pas un opérateur '<' sur la classe personne // mais ça indique comment l'exigence doit être remplie bool operator<(const personne& a, const personne& b) { return (a.nom == b.nom) ?( (a.prénom == b.prénom)? false : (a.prénom< b.prénom)) : (a.nom < b.nom) ; }
le 14/07/2009 à 9:09 -
AlpExpert éminent séniorC'est bien dommage
Qui plus est, j'avais commencé un article dessusle 15/07/2009 à 8:45 -
GotenMembre chevronnéC'est "qu'un" article (pas péjoratif du tout hein), quand je pense au petit gars des compilo qui implémentait déjà cette feature, les glandes :p.le 15/07/2009 à 8:59
-
AlpExpert éminent séniorOui, Doug Gregor doit avoir du mal à digérer ça, il était derrière Concept GCC, et les concepts en général je crois.le 15/07/2009 à 9:38
-
hiuraMembre actifMerci pour les liens.
De mon point de vue "utilisateur", c'est vrai que je suis déçu que ça soit repoussé au prochain std, mais en même temps je préfère ça à un ajournement du 0x.
Pour le travail de Doug Gregor, n'y a-t-il pas un "plan" de prévu ? ( Du style une version de gcc qui accepte les concepts ? )le 15/07/2009 à 9:54 -
AlpExpert éminent séniorHé bien : http://www.generic-programming.org/s...re/ConceptGCC/
qui devient (devenait ?) : http://gcc.gnu.org/svn/gcc/branches/...ncepts-branch/ (branche pour les concepts de gcc)
Plus d'infos sur http://www.generic-programming.org/ et http://gcc.gnu.org/projects/cxx0x.html#conceptsle 15/07/2009 à 11:08