Developpez.com - Rubrique C++

Le Club des Développeurs et IT Pro

C++0x : le draft final est disponible au téléchargement

Apportez vos commentaires à la norme

Le 2010-03-30 11:03:36, par Jean-Marc.Bourguet, Expert éminent
Ici: http://www.open-std.org/JTC1/SC22/WG...2010/n3092.pdf

La suite des opérations: jusque début juillet pour faire parvenir les commentaires officiels.

3 réunions pour agir sur ces commentaires (août 2010, novembre 2010, mars 2011). La dernière peut décider soit de repartir pour un FCD (et donc des commentaires dont il faut tenir compte) soit pour un FDIS (ou il faut dire oui ou non).
  Discussion forum
63 commentaires
  • JolyLoic
    Rédacteur/Modérateur
    J'avoue quand même être un peu inquiet. Le problème, à mon sens, c'est la move semantic (To move or not to move et Exceptions and Destructors sont tous deux liés à ce sujet). Or la move semantic était sensée être "finie" depuis pas mal de temps. Les compilateurs l'implémentent tous.

    Et finalement, on se rend compte seulement depuis peu qu'elle est inutilisable sauf par des experts prêts à écrire beaucoup de code, et toutes les tentatives pour essayer de corriger ça rencontrent des problèmes. Je ne sais que penser.

    J'ai un peu l'impression que pas mal d'avancées orientée débutant (concepts, modules, bibliothèques filesystem, date_time...) ont été bloquées (pas assez mis en pratique dans les compilateurs, arrivant trop tard) alors que les avancées orientée expert (variadic template, move semantic) ont été fortement poussés en avant ("ça marche déjà", sauf que pour la move semantic, ça ne marche pas...).

    Je pense que le plus grand risque aujourd'hui pour le C++ n'est pas technique, mais lié à un étiolement de sa communauté de développeurs. Et je ne suis pas certain qu'on le fasse évoluer dans le bon sens pour ça.
  • oodini
    Membre émérite
    C'est quoi le nouveau nom ? C++1x ?...
  • Jean-Marc.Bourguet
    Expert éminent
    Si tu regardes les papiers du mailing, C++0X continue a etre utilise (et il me semble que je n'ai pas vu d'autre designation, mais je n'ai pas fait particulierement attention a cela)
  • koala01
    Expert éminent sénior
    Envoyé par Jean-Marc.Bourguet
    Si tu regardes les papiers du mailing, C++0X continue a etre utilise (et il me semble que je n'ai pas vu d'autre designation, mais je n'ai pas fait particulierement attention a cela)
    D'après la discussion créée lorsqu'il a été voté, Herb Sutter aurait effectivement proposé de commencer à parler de C++11, pour en finir avec le troll relié à 0x...

    Mais s'il y a des commentaires trop importants en mars 2011 (comprend "nécessitant des ajustements importants), nous risquons de repartir pour un tour, et je ne peux m'empêcher de penser que cela pourrait très facilement nous mener à 2012, et qu'il serait dommage de nommer C++11 une norme réellement finalisée en... 2012...

    Bon, là, c'est le "scénario catastrophe", bien sur, car il faut rester optimiste et se dire que l'on peut effectivement espérer qu'elle sera finalisée dans le courent de l'année 2011.

    Sa dénomination finale pourrait donc effectivement être C++11
  • 3DArchi
    Rédacteur
    Salut,
    On se rapproche donc, s'il y a peu de commentaires, de la future norme. A télécharger et lire précieusement maintenant.
  • JolyLoic
    Rédacteur/Modérateur
    D'ailleurs, si certains ont des commentaires, n'hésitez pas, on transmettra !
  • Goten
    Membre chevronné
    Ah cool ça . On a jusqu'à quand? (ouai on sait jamais, en le lisant un truc pourrait me sauter aux yeux)
  • Jean-Marc.Bourguet
    Expert éminent
    Envoyé par Goten
    Ah cool ça . On a jusqu'à quand? (ouai on sait jamais, en le lisant un truc pourrait me sauter aux yeux)
    Début juillet il me semble. J'ai pas la date précise sous les yeux.
  • 3DArchi
    Rédacteur
    Salut,
    Envoyé par JolyLoic
    D'ailleurs, si certains ont des commentaires, n'hésitez pas, on transmettra !
    Pour l'instant, sans avoir relu le nouveau draft, il y avait le point dont on avait discuté sur comp.std.c++ sur le =default qui n'était pas autorisé (en déclaration) sur les destructeurs (en fait sur les 4 fcn spéciales) non triviaux :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct base
    {
      virtual ~base()=default; // erreur
    };
    struct base_ok
    {
      virtual ~base_ok();
    };
    base_ok::~base_ok()=default(); // OK
    
    struct trivial
    {
       ~trivial()=default; // OK !!
    };
    Je ne sais pas si ça été rediscuté, mais perso, je trouve gênant d'avoir des comportements OK et d'autres non, le plus simple étant de pouvoir faire =default indépendamment des cas de trivialité.
    Je me reformule car je me rends compte que ce n'est pas très clair, mais j'aurais aimé pouvoir écrire =default dans la classe que le destructeur soit trivial ou non :
    Code :
    1
    2
    3
    4
    5
    6
    7
    struct i_have_a_dream
    {
    virtual ~i_have_a_dream()=default;
    explicit i_have_a_dream(i_have_a_dream const&)=default;
    private:
    i_have_a_dream(i_have_a_dream const&)=default;
    };
    Aux dernières nouvelles, le code ci-dessus n'était pas possible. Il fallait séparer déclaration et default-definition.
  • stardeath
    Expert confirmé
    hum j'avais rien à faire donc j'ai commencé la lecture du pdf, un truc m'a choqué :
    int main(int argc, char*argv[]){/*...*/}
    heu c'est moi ou on se tape encore les char* comme représentant officiel des chaines de caractères?

    j'aurai cru que le comité aurait vraiment dépoussiéré la norme, genre mettre ça en main :

    int main(int argc, string argv[]){/*...*/}
    ou encore mieux :

    int main(vector<string> args){/*...*/}
    bref rien qu'en ayant lu le coup du main, je sens que c++0x va encore me faire pester quelque peu ><