IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Normalisation C++ Discussion :

C++0x : le Draft final a été voté !


Sujet :

Normalisation C++

  1. #41
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Un interview de BS sur la prochaine norme (vote final le 26 mars):
    http://www.codeguru.com/cpp/misc/art...Stroustrup.htm
    (en anglais évidemment)
    Linux > *

  2. #42
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Si tout est fixé (à peu de chose près), il ne reste plus qu'à attendre un support décent de la part des compilateurs.

    Une nouvelle ère s'offre à nous !
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #43
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Vous savez si cette nouvelle norme offrira un mécanisme similaire à final en Java ou sealed en C# ?

  4. #44
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonsoir,
    Et bien justement oodini, l'addition des mots clés final et override a été voté dans le tout dernier draft ! (N3225 - novembre 2010)

    Et d'ailleurs je ne peux pas m'empêcher d'être un tantinet inquiet
    A seulement quatre mois du vote final (prévu en mars) je ne pensais pas que le comité rajouterait encore de nouveaux mots clés (context-sensitive en plus!).

  5. #45
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Bonsoir,
    Et bien justement oodini, l'addition des mots clés final et override a été voté dans le tout dernier draft ! (N3225 - novembre 2010)

    Et d'ailleurs je ne peux pas m'empêcher d'être un tantinet inquiet
    A seulement quatre mois du vote final (prévu en mars) je ne pensais pas que le comité rajouterait encore de nouveaux mots clés (context-sensitive en plus!).
    La fonctionalite etait deja presente dans les drafts precedants (avec des attributs), mais ca posait des problemes. L'utilisation de mots cles est la pour resoudre ces problemes.
    (Et si j'ai bien suivit, ca sera encore modifie).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #46
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Oui le souci c'était qu'ils étaient parti du principe que c'était des "attributs" qui sont censés être des indications spéciales pour le compilateur et qui n'étaient pas censé changer la sémantique de l'expression.

    Or comme ils les changent -- et que les attributs sont très moches a écrire et lire -- finalement ça a été remis en question. Dans les derniers votes (il me semble qu')ils ont décider de virer les attributs et tout simplement de prendre ceux qui étaient "demandés" comme de nouveaux mots clés.

    Par contre ça serait bien qu'ils mettent quelque part de visible les raisons qui ont poussé à ajouter final et override. C'est pas toujours évident pour un développeur C++...

  7. #47
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Le final, j'avoue ne pas trop voir ca que ça apporte. Le override, par contre, c'est la meilleure invention depuis l'eau chaude

    En gros, ça assure la fiabilité du code en cas de refactoring.

    Cas réel, bien que datant un peu :
    On a du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class A
    {
      virtual int f(char *s);
    };
     
    class B : A
    {
      virtual int f(char *s);
    }
    Sauf que bien entendu, A et B n'étaient pas au même endroit, pas gérés par les mêmes personnes, et qu'en fait B n'était pas une classe, mais une vingtaine de classes (et pour la plupart de ces classes, f n'était pas redéfinie, le comportement de la classe de base étant convenable). Puis un jour, voulant appeler a->f("toto"), je "corrige" le bug du code initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class A
    {
      virtual int f(char const *s);
    };
    Sauf que sur une des classes B, ce petit mot const n'a pas été reporté. Du coup, pour ces objets, quand on appelait f, on obtenais le f de la classe de base, pas celui au comportement légèrement différent de la classe dérivée. Et la différence de comportement était assez faible pour que le debug de ce qui se passait mal ait été long, très long...

    Avec override, à la recompilation, le responsable de la classe B aurait eu une erreur, et le problème aurait été corrigé immédiatement.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #48
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    J'imagine qu'override corrigera aussi la pratique que j'ai vu souvent d'utiliser virtual dans les surcharges pour se souvenir que c'est une fonction surchargée...

    Ce qui est a mon avis très mauvais pour la compréhension, mais override corrige le problème effectivement.


    Concernant final, je vois où ça peut être intéressant, mais seulement au niveau de la classe (ce qui ne sera pas dispo dans c++0x si je ne me trompe pas?). Donc autrement dit, un "sealed".

    Quand on construit un type de manière a ce que l'heritage devienne dangereux (et donc déconseillé), je me dit que dire explicitement qu'on ne veut pas d'heritage du tout est plus efficace, même si il serait de bonne pratique de ne pas supposer de la manière d'utiliser la classe, sauf si on le sait pertinemment, comme pour les conteneurs de la STL.

  9. #49
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Le final, j'avoue ne pas trop voir ca que ça apporte.
    Empêcher de dériver de classes sans destructeur virtuel, et se reposer sur le polymorphisme (mauvaise idée, je sais, mais on ne maitrise pas toujours les codeurs qui passent derrière nous).

  10. #50
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par oodini Voir le message
    Empêcher de dériver de classes sans destructeur virtuel, et se reposer sur le polymorphisme (mauvaise idée, je sais, mais on ne maitrise pas toujours les codeurs qui passent derrière nous).
    Autrement dit, pour rester "positif", mieu vaut conisidérer ça comme une manière de communiquer nos intentions aux futurs mainteneurs du code en question

  11. #51
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Existe-t-il une liste (ou mieux, une matrice) des bibliothèques Boost qui ont été incluses dans cette nouvelle norme ?

  12. #52
    Invité
    Invité(e)
    Par défaut
    Directement sur le site de boost, il y a onglet indiquant les bibliothèques incluses dans le TR1 et donc dans la prochaine norme : http://www.boost.org/doc/libs/?view=filtered_std-tr1. Par contre les fonctionnalité qui ont été incluses directement dans le langage(je pense notament à auto) ne sont pas répertoriées.

  13. #53
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    THIS IS IT !!

    Howard Hinnant, le président du Library Working Group du comité C++ vient de lâcher le morceau sur Stack Overflow !!


    Le draft final est terminé !!


    Il sera rendu officiel et public le 13 avril. Pour compléter le processus ISO il reste encore quelques formalités administrative mais c'est une étape purement bureaucratique, car du point de vue technique c'est fini !

  14. #54
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut C++0x : Prêt pour la standardisation !
    Zut tu m'as grillé, je voulais faire l'annonce en quasi direct, je n'aurais pas du aller fêter ça au resto avec les autres...

    On a effectivement voté pour que la version du draft après les modifications de cette semaine soit proposée comme la nouvelle version du C++. Ça peut prendre un temps indéterminé à finaliser, mais on (Herb, en particulier) tente de faire ce qu'on peut pour accélérer la partie administrative.

    Ps : Howard n'est plus en charge du library working group depuis un peu plus d'un an. C'est Alisdair Meredith qui l'a remplacé. Mais il en reste un membre actif.

    A noter, comme "gros" changement cette semaine : new et explicit ne sont plus utilisés pour la gestion de l'overload (par contre, final et override restent en place). L'utilisation de noexcept dans la bibliothèque a été rationalisée (et un grand nombre de spécifications ont été enlevées). Les règles de recherche de begin et end pour un range-for ont été modifiées : Le compilateur les cherchera en premier lieu sous la forme de fonctions membre, et s'il ne les trouve pas sous la forme de fonctions libres. Ce qui évitera entre autre une ambiguïté avec boost.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  15. #55
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    new et explicit ne sont plus utilisés pour la gestion de l'overload
    Tu peux préciser? Je ne vois pas du tout de quelle feature tu parles?

    Sinon, j'ai entendu dire que les custom string-literal étaient remis en question. Finalement ils sont bien dans C++0x?

    Enfin au niveau du nom, finalement ça sera C++11 ou C++2011?

  16. #56
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Certains voulaient retirer les user defined literals, ainsi que le forwarding des constructeurs de la classe de base. Rien n'a finalement été retiré.

    L'idée d'override, c'est de déclarer d'une fonction en redéfini bien une autre. Si on ne trouve pas de fonction virtuelle correspondante dans la classe de base, il y a une erreur de compilation (exemple vécu : On ajoute const dans un argument de la fonction virtuelle de la classe de base, tout compile, rien ne marche. Là, on aura une elle erreur en compilant la classe dérivée).

    A partir de là, le reste me semble plus optionnel. Final indique que l'on ne va pas dériver plus.

    Explicit (à mettre à côté du nom de la classe) avait pour but de forcer une classe à déclarer override (et pas seulement virtual) les fonctions qui redéfinissaient une fonction de la classe de base. Et dans ce contexte, new avait pour but de déclarer une fonction avec le même nom qu'une fonction de la classe de base, mais ne la redéfinissant pas. Il y avait des difficultés sur l'utilisation de new, et sans new, ou avec un new partiel (par exemple, sur les fonctions mais pas sur les données membre ni les types) des questions se posaient sur explicit, et les problèmes de compatibilités qu'il pourrait causer. Du coup les deux ont été enlevés.

    Pour le nom, j'espère fortement que ce sera C++11, mais ça dépend aussi de la vélocité de l'ISO.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  17. #57
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ok merci pour l'explication, je savais pas pour new et explicit.

    Herb Sutter commence a faire echo : http://herbsutter.com/2011/03/25/we-...ndards-meeting

    If all goes well, and we expect it will, the International Standard will be approved and published in 2011, henceforth to be known as C++ 2011.
    Donc ça serait C++2011? Perso ça me va.

  18. #58
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Zut tu m'as grillé, je voulais faire l'annonce en quasi direct, je n'aurais pas du aller fêter ça au resto avec les autres...

    On a effectivement voté pour que la version du draft après les modifications de cette semaine soit proposée comme la nouvelle version du C++. Ça peut prendre un temps indéterminé à finaliser, mais on (Herb, en particulier) tente de faire ce qu'on peut pour accélérer la partie administrative.

    Ps : Howard n'est plus en charge du library working group depuis un peu plus d'un an. C'est Alisdair Meredith qui l'a remplacé. Mais il en reste un membre actif.

    A noter, comme "gros" changement cette semaine : new et explicit ne sont plus utilisés pour la gestion de l'overload (par contre, final et override restent en place). L'utilisation de noexcept dans la bibliothèque a été rationalisée (et un grand nombre de spécifications ont été enlevées). Les règles de recherche de begin et end pour un range-for ont été modifiées : Le compilateur les cherchera en premier lieu sous la forme de fonctions membre, et s'il ne les trouve pas sous la forme de fonctions libres. Ce qui évitera entre autre une ambiguïté avec boost.
    Comme gros changement y'a aussi "decltype", à l'heure actuelle toute les implémentations sont devenues défectueuses et fausses. Et c'est très bien car decltype avait plusieurs soucis, qui ont été résolu.

    sinon.... ben HOUURAY `\o/
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  19. #59
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    O__O;

    C'est quoi les changements avec decltype? Parceque je l'utilise pas mal dans mes projets...

  20. #60
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Le problème est avec le protocol result_of.

    http://www.open-std.org/jtc1/sc22/wg...011/n3233.html

    Toute l'histoire . (ça a été accepté bien entendu)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

Discussions similaires

  1. C++14 : le draft final a été publié
    Par LittleWhite dans le forum Normalisation
    Réponses: 15
    Dernier message: 18/01/2015, 15h18
  2. C++0x : Final Committee Draft disponible
    Par Jean-Marc.Bourguet dans le forum Contribuez
    Réponses: 63
    Dernier message: 28/10/2010, 14h11
  3. Final Committee Draft disponible
    Par Jean-Marc.Bourguet dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2010, 12h18
  4. C++0x : le Draft final a été voté !
    Par Klaim dans le forum Contribuez
    Réponses: 2
    Dernier message: 14/03/2010, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo