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

C++ Discussion :

La sp�cification du C++17 n'int�grera pas les concepts


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 132
    Billets dans le blog
    150
    Par d�faut La sp�cification du C++17 n'int�grera pas les concepts
    La sp�cification du C++17 n'int�grera pas les concepts
    D�couvrez les raisons logiques et techniques de son absence

    La nouvelle sp�cification du C++, nomm�e C++17 approche � grands pas. Toutefois, la fonctionnalit� des concepts n'int�grera pas la future sp�cification. Tom Honermann explique sur son blog les raisons faisant que c'�tait improbable, voire impossible.
    Toutefois, avant de d�crire ces raisons, rappelons ce que sont les concepts.

    Prenons le concept suivant :
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    auto concept LessThanComparable<typename T> {
        bool operator<(T, T);
    }
    Celui-ci indique que n�importe quel type ayant un operator< et qui prend en param�tre deux objets et retournant un bool�en sera consid�r� comme un LessThanComparable. Ensuite, il est possible d�utiliser le concept pour restreindre les types pouvant �tre pass�s � un template.

    Le but des concepts est d'apporter une solution � un manque du C++. En effet, m�me s'il est possible de contourner le manque, il est impossible d'apporter une solution propre. Gr�ce aux concepts il devient possible :
    • de contraindre les arguments d'une fonction sans pour autant d�sactiver la d�duction de ceux-ci et sans g�ner la meta arity des fonctions templates ainsi contraintes. Prenons l�exemple suivant :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      template <class T> void f(T);
      L�exemple est plut�t simple. Toutefois, nous aimerions ajouter une interface. Pour ce faire, nous voudrions contraindre les param�tres de la fonction :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      template <class T> void f(enable_if_t<my_trait_v<T>, T>);
      Mais ce faisant, nous avons perdu la d�duction des arguments. Aussi, cela ne fonctionnera pas pour les constructeurs templates. Une seconde approche serait :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      template <class T> auto f(T) -> enable_if_t<my_trait_v<T>, void>;
      La contrainte du param�tre se situe dans le type de retour. Toutefois, cela ne marche toujours pas pour les constructeurs templates. Ce que nous pouvons corriger en ajoutant une contrainte sur l�argument template :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      template <class T, typename = enable_if_t<my_trait_v<T>>> void f(T);
      Malheureusement, la meta arity est pass�e de 1 � 2. De plus, ce n��tait que des contournements alors qu�avec les concepts nous pourrions faire :
    • d��crire plus facilement des surcharges tout en ayant des contraintes exclusives mutuellement. Il est souvent souhait� de pouvoir utiliser telle ou telle surcharge suivant certaines conditions sur les templates. Pour r�ussir, on pourrait �crire :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      template <class T> void f(T, decltype(declval<T>().f())* = 0);
      Ce code est dangereux. On peut facilement en arriver � ce point si on ne souhaite pas cr�er de trait (car c�est l�unique utilisation). De plus, les r�f�rences ne sont pas g�r�es, la contrainte peut �tre ignor�e en passant deux arguments � la fonction. Avec les concepts, nous pourrions �crire :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      1
      2
      template <class T> void f(T) requires requires (T t) {t.f();};
            template <class T> void f(T);
      Les surcharges sont mutuellement exclusives.
    • d��crire des contraintes aussi originales que n�cessaires.


    Malgr� tout l�int�r�t que peuvent avoir les concepts, ceux-ci n'int�greront pas le prochain standard. En effet, plusieurs choses ne sont pas encore claires :
    • la sp�cification des concepts a �t� publi�e le 15 novembre 2015, laissant peu de temps pour un retour efficace et fiable ;
    • la seule impl�mentation est dans une version non publi�e de GCC ;
    • l�impl�mentation r�alis�e dans GCC a �t� r�alis�e par l�auteur de la sp�cification. Il n�y a donc pas eu d�avis externe sur la question de l�impl�mentation dans GCC ou dans les autres compilateurs ;
    • seuls quelques projets utilisent les concepts, mais la sp�cification n�a pas �t� assez mise � l��preuve dans des cas r�els ;
    • la sp�cification ne fournit pas de biblioth�que de d�finitions de concepts. Donc il n�est pas possible de savoir si l��criture d�une telle biblioth�que est possible.


    Toutefois, m�me si tous ces points avaient �t� r�gl�s, Tom Honermann doute de l�int�gration des concepts � la sp�cification du langage. En effet :
    • les concepts apportent une nouvelle �criture pour les templates. Toutefois, une fonction template abr�g�e peut �tre identique � une fonction non template. Le type serait le seul indicateur pour savoir si la fonction est non template ou si elle est template :
    • la proposition d�finit une nouvelle syntaxe pour d�clarer des templates respectant une contrainte :
      Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
      C{A,B} void f(A a, B b);
      toutefois, cette syntaxe n�est pas appr�ci�e ;
    • l�utilisation d�un concept n�cessite de conna�tre comment il a �t� d�fini (fonction ou variable). Cela apporte confusion et est source d�erreurs ;
    • les concepts sont attendus pour am�liorer les messages d�erreur. Toutefois, l�utilisation erron�e des concepts peut apporter des erreurs encore plus denses qu�� l�accoutum�e li�es � la surcharge des fonctions ;
    • de nombreuses autres questions ont �t� soulev�es et ne pourront �tre r�pondues qu�� travers des tentatives d�utilisation.


    M�me si ce constat est malheureux pour tout utilisateur du langage souhaitant les concepts au plus t�t, ces derniers devraient arriver dans la prochaine sp�cification. De plus, il y a de grandes chances pour que chaque compilateur propose une impl�mentation bien avant la compl�tion du futur standard. Finalement, ce retard permet d�affiner l�impl�mentation et ainsi, au comit� de proposer une meilleure fonctionnalit�.


    Votre opinion

    Aviez-vous d�j� imagin� des cas d�utilisation pour les concepts ? Quels sont-ils ?
    Quelles autres fonctionnalit�s du C++ attendez-vous ?


    Source

    Blog de Tom Honermann
    IsoCPP
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  2. #2
    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 : 51
    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
    Par d�faut
    Je suis assez en d�saccord avec ce post qui pr�sente pour moi une vue biais�e de la situation. M�me si je n'�tais pas � la derni�re r�union, j'ai suivi d'assez pr�s son contenu.

    la sp�cification des Concepts a �t� publi�e le 15 novembre 2015, laissant peu de temps pour un retour efficace et fiable
    La sp�cification des concepts existe depuis longtemps... C'est le fait que cette sp�cification soit sous forme de TS qui est r�cent. M�me si le design a commenc� bien avant, la premi�re sp�cification existe depuis janvier 2014. Elle a �volu�, certes, mais si on va par l�, toutes les propositions �voluent, c'est leur objectif, et si on imposait � toute �volution une p�riode de non �volution de plusieurs ann�es avant d'�tre accept�es, on n'aurait rien dans C++17.

    la seule impl�mentation est dans une version non publi�e de GCC ;
    Version qui ne pouvait pas �tre publi�e, puisque les concepts ne sont pas dans le langage.... C'est l��uf et la poule... Et c'�tait l'int�r�t du TS que de rassurer les fabricants de compilateurs � faire l'effort d'impl�mentation avant la standardisation. Et il faut savori que de nombreuses fonctionnalit�s du langage ne sont que dans des versions non publi�es avant d'�tre accept�es (certaines ne sont m�me pas impl�ment�es dans leur forme finale...).

    l�impl�mentation r�alis�e dans GCC a �t� r�alis�e par l�auteur de la sp�cification. Il n�y a donc pas eu d�avis externe sur la question de l�impl�mentation dans GCC ou dans les autres compilateurs ;
    C'est le cas pour l'immense majorit� des nouvelles fonctionnalit�s du langage. Et je n'ai jamais entendu cet argument utilis� pour autre chose que les concepts... Pour les autres cas, une question est r�currente est "Est-ce que �a a �t� impl�ment�?". Pour les concepts, il semblerait que la question soit "Est-ce que ca a �t� impl�ment� 3 fois par 3 �quipes diff�rentes dont aucune n'a le droit de contenir l'auteur principal de la proposition?"...

    seuls quelques projets utilisent les concepts, mais la sp�cification n�a pas �t� assez mise � l��preuve dans des cas r�els ;
    Et comment pourrait-elle l'�tre plus, tant que la proposition n'est pas accept�e ? Elle a �t� utilis�e dans divers contextes, le contexte manquant le plus g�nant �tant la STL. Mais des grandes biblioth�ques l'ont utilis�e (range, par exemple)

    la sp�cification ne fournit pas de biblioth�que de d�finitions de concepts. Donc il n�est pas possible de savoir si l��criture d�une telle biblioth�que est possible.
    C'est un point g�nant mais h�las classique. Les gens qui travaillent sur le langage et ceux qui travaillent sur la biblioth�que sont diff�rents, et tant qu'une fonctionnalit� n'a pas �t� accept�e dans la langage, impl�ment�e dans plusiuers compilateurs, les biblioth�ques ont du mal � suivre. Par exemple, plusieurs ann�es apr�s la mise en place de noexcept, on ne savait toujours pas sur quelles fonctions de la biblioth�que mettre noexcept ou pas. M�me chose pour constexpr qui est seulement en train d'�tre ajout� � la biblioth�que standard.


    les Concepts apportent une nouvelle �criture pour les templates. Toutefois, une fonction template abr�g�e peut �tre identique � une fonction non template. Le type serait le seul indicateur pour savoir si la fonction est non template ou si elle est template :
    C'est le cas depuis le d�but, �a a �t� discut� et accept�. Apr�s, certains n�aiment pas, mais � part rouvrir sans cesse les vieux d�bats...
    Il est courant en C++ de ne pas pouvoir dire ce qu'est un code sans conna�tre le contexte. Si je dis
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    void f(double d) {};
    f(2);
    Je ne peux pas dire si cette fonction f sera appel�e sans savoir s'il n'y a pas aussi visible dans le scope une autre fonction qui serait pr�f�r�e. C'est la base de la surcharge, et �a ne g�ne personne.
    Et bien, dans le m�me ordre d'id�e, si je vois void f(Container const &c), je ne peux pas savoir sans un peu de contexte si je d�finis une fonction ou un template, mais :
    - G�n�ralement, je connais le contexte, et je peux dire par exemple que Container est un concept, et donc que je d�finis un template, mais que f(vector<int> const &v) va d�finir une fonction.
    - Le nom lui m�me doit m'aider
    - Et la plupart du temps, je m'en moque totalement de savoir si une fonction est un template ou pas. J'ai sous la main en conteneur (sans savoir forc�ment son type exact, il est peut-�tre dans une variable auto initialis�e par un retour de fonction, ou dans un argument template), je peux appeler f, c'est tout ce qui compte.

    les Concepts sont attendus pour am�liorer les messages d�erreur. Toutefois, l�utilisation erron�e des Concepts peut apporter des erreurs encore plus dense qu�� l�accoutum�e li� � la surcharge des fonctions ;
    Je manque de recul sur ce point (toujours pareil, tant qu'on ne l'a pas vraiment dans un compilo qu'on utilise quotidiennement...), mais :
    - Ce n'est pas le cas le plus courant
    - Lire une longue liste de surcharge reste au niveau s�mantique de l'interface. Pour les gens ayant l'habitude de plonger dans l'impl�mentation, peut-�tre que c'est un peu plus long, mais pour les gens voulant rester au niveau de l'interface, c'est mieux !
    - Je ne doute pas qu'avec le temps, les compilateurs pourront affiner les messages d'erreur li�s aux concepts (par exemple, lister en premier parmi les surcharges celle qui �tait le plus proche de passer, et donc la plus susceptible d'�tre la bonne).

    de nombreuses autres questions ont �t� soulev�es et ne pourront �tre r�pondues qu�� travers des tentatives d�utilisations.
    Et ces tentatives ne pourront avoir lieu que quand les compilateurs proposeront cette fonctionnalit�. Et qu'ils la proposeront vraiment, pas avec un flag "exp�rimental" et d'autres joyeuset�s qui emp�cheraient les gens de l'utiliser dans un vrai contexte professionnel. J'esp�re vraiment que la pr�sence du TS ira dans cette direction... Je ne doute pas qu'il y aura des petits probl�mes avec les concepts... Il y en a eu avec toutes les grosses fonctionnalit�s du langage. La move s�mantic �tait totalement bancale bien apr�s qu'elle ait �t� mise dans la langage, les lambda �taient incomplets...

    Le probl�me, c'est qu'il y a un risque � ne pas livrer les concepts qui est pour moi plus important que le risque actuel de livrer des concepts imparfaits. Pour une autre vision sur le sujet, je vous propose de lire http://www.open-std.org/jtc1/sc22/wg...6/p0225r0.html
    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.

  3. #3
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Octobre 2008
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur C++

    Informations forums :
    Inscription : Octobre 2008
    Messages : 247
    Par d�faut
    Rien que de voir �a je me demande ce qu'il se passe dans la t�te du commit� parfois.

  4. #4
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par d�faut Trop compliqu�
    C'est pas plus mal. Y'en a marre de ces standards qui s'enrichissent de fonctionnalit�s trop compliqu�s (tout langages confondus).
    "auto concept"...ils peuvent pas choisir d�j� des termes moins compliqu�s ?

  5. #5
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    auto, car tant qu'a faire, utiliser la d�duction de type.
    Il aurait pu �crire bool concept LessThanComparable<typename T> {bool operator<(T, T);}.

    Cela dit, je crois que la syntaxe propos�e �tait plutot:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    template<typename T>
    concept bool LessThanComparable = requires(T a, T b) {
        { a < b } -> bool;
    };
    les deux mots cl�s sont requires et concept. la fonction est n�cessairement bool.

    Regardez par exemple sur cppreference.com pour la proposition actuelle de Concepts Technical Specification ISO/IEC TS 19217:2015.

    La proposition est suffisamment int�ressante � mon gout, elle permet de sp�cifier des attentes plus complexes, telles que "dispose de begin et end", "dispose de size()", ou encore est un appelable avec tels arguments.
    Je dois dire que j'ai r�cemment �crit une biblioth�que de manipulation de fonctions math�matiques (somme, produit, composition, etc) et qu'un concept tel que callable_as<arg1, arg2> m'aurait grandement arrang�.
    La moiti� du code de cette biblioth�que consiste pr�cis�ment � me donner cette capacit�, au prix d'appel de deux classes de traits (et sept sp�cialisations chacune), de pleins de static_assert.

    Avec les concepts, je n'aurai eu qu'a �crire une template de concept, et c'est tout.

  6. #6
    Membre tr�s actif Avatar de nikau6
    Homme Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 406
    Par d�faut
    Citation Envoy� par paladice Voir le message
    C'est pas plus mal. Y'en a marre de ces standards qui s'enrichissent de fonctionnalit�s trop compliqu�s (tout langages confondus).
    Je pense �galement que le C++ est en train de devenir un langage de plus en plus compliqu�, de plus en plus �litiste. Et d'ailleurs, pourquoi pas ! Le probl�me, c'est qu'ils pr�tendent le simplifier, et dans une certaine mesure on peut effectivement dire qu'il se simplifie, mais seulement pour ceux qui maitrisent d�j� l'ensemble du langage. Pour les d�butants par contre, �a va �tre de plus en plus hard-core de l'apprendre.

  7. #7
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    Par d�faut
    Oui, le langage devient de plus en plus complet / complexe.
    Mais du coup son utilisation devient plus simple (et l'apprentissage de son utilisation aussi).

    Les d�butants n'ont pas / plus besoin d'apprendre les choses compliqu�es.
    Pour donner un exemple avec les concepts : l'apprentissage et l'utilisation des concepts est beaucoup plus simple que celles de SFINAE.
    Certains programmes qui �taient compliqu�s peuvent �tre r��crits en programmes relativement simples (m�me pour les d�butants).

  8. #8
    Membre tr�s actif Avatar de nikau6
    Homme Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 406
    Par d�faut
    On ne peut pr�tendre maitriser un langage que si l'on maitrise l' ENSEMBLE de ses fonctionnalit�s, et pas simplement les plus r�centes, qui viennent en g�n�rale r�parer les problemes de la sp�cification pr�c�dente.
    Donc, en fait, d;une certaine mani�re, tu abondes en mon sens. Pour celui qui a conscience des probl�me li�s aux SFINAE, les concepts paraissent simple, mais pour celui qui par de z�ro, il va devoir tout comprendre, les SFINAE et les concepts.

  9. #9
    Membre �prouv� Avatar de AoCannaille
    Inscrit en
    Juin 2009
    Messages
    1 453
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1 453
    Par d�faut
    Citation Envoy� par nikau6 Voir le message
    On ne peut pr�tendre maitriser un langage que si l'on maitrise l'ENSEMBLE de ses fonctionnalit�s, et pas simplement la plus r�cente, qui vient en g�n�rale r�parer les problemes de la sp�cification pr�c�dente.
    Tout d�pend de la d�finition de "ma�triser" un langage. Mais en mon sens, si tu maitrise l'orient� objet, l'utilisation des fonctions, des boucles et des conditions en C++, tu sais d�j� te d�brouiller dans �norm�ment de cas.

    C++11 a introduit les boucle de type foreach en se basant sur les it�rateurs. On peut sans aucun probl�me continuer � se contenter des boucles for classique sans se sentir limit�. Est-ce qu'ignorer cette fonctionnalit� emp�che de ma�triser le reste?

    Car au final, on ne ma�trise que ce qu'on utilise, et quand la boite � outils est si grande, on ne peut pas tout ma�triser. Seuls les gourous peuvent dirent qu'il ma�trisent le langage dans ce cas. Et �a repr�sente quoi? entre 1000 et 5000 personnes sur Terre...

    Un peu comme Excel o� un utilisateur normal utilise 1% des fonctionnalit�s et un power-user 10%.

  10. #10
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    Par d�faut
    Citation Envoy� par nikau6 Voir le message
    On ne peut pr�tendre maitriser un langage que si l'on maitrise l' ENSEMBLE de ses fonctionnalit�s, et pas simplement les plus r�centes, qui viennent en g�n�rale r�parer les problemes de la sp�cification pr�c�dente.
    Donc, en fait, d;une certaine mani�re, tu abondes en mon sens. Pour celui qui a conscience des probl�me li�s aux SFINAE, les concepts paraissent simple, mais pour celui qui par de z�ro, il va devoir tout comprendre, les SFINAE et les concepts.
    (Il y a une diff�rence entre l'apprentissage / l'utilisation du langage par un d�butant et sa ma�trise.)

    Je n'aime pas trop parler de ma�trise d'un langage. C'est une notion un peu flou pour moi.
    M�me si on conna�t toutes les r�gles et la syntaxe, il est possible de ne pas "comprendre" un code (pour des questions d'algo par exemple) ou ne pas savoir l'�crire de la fa�on la plus propre. Programmer n'est pas qu'une histoire de langage mais aussi de combinaison de diff�rents techniques / patterns.

    � l'inverse je pense que l'on peux conna�tre la sous partie du langage qui me permet de comprendre / d'�crire l'ensemble des codes que je rencontre / souhaite d�velopper.
    Est-ce vraiment grave de ne pas tout conna�tre ?

  11. #11
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Tiens, on en a parl� un peu hier � la rencontre C++ de Montpellier:
    C++17 sera vraissemblablement une version mineure:
    • pas de Modules
    • pas de Concepts
    • pas de Range (d�pendance sur les concepts)
    • pas de Coroutines
    • pas de *uniform call syntax*

    Rendez-vous en 2020 ou peut-�tre m�me 2019 pour ces points l�.
    Pas de concepts �a implique aussi pas de range... Dommage pour le uniform call syntax aussi... Mais malgr� tout, C++17 devrait quand m�me pas mal changer notre style:

    Ce qui sera inclus dans C++17:
    • STL parall�le / vectoris�e
    • Library Fundamentals TS (any, optional, string_view, ...)
    • File System TS
    • Beaucoup de petits ajouts et am�liorations qui vont faire �voluer notre style de programmation:
      • if constexpr
      • lambdas constexpr
      • operator. (smart references)
      • g�n�ration de comparateurs par d�faut (==, !=, <, <=, >, >=)
      • attributs [[fallthrough]], [[nodiscard]], [[maybe_unused]]

    Les mart reference en particulier, je suis curieux de voir ce que �a va donner!

  12. #12
    Membre extr�mement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 633
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Graphic Programmer
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 633
    Par d�faut
    je sais pas si on peut dire que le c++ pour les d�butant est hard-core. disons que oui si c'est le 1er langage qu�on apprend.

    personnellement j'ai toujours regrett� d�avoir appris le c++ comme 1er langage avant le c.

  13. #13
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    Citation Envoy� par Aiekick Voir le message
    personnellement j'ai toujours regrett� d�avoir appris le c++ comme 1er langage avant le c.
    Pour avoir subit l'inverse, je peux te garantir que C puis C++ c'est la combo maudite pour faire de la merde sans le savoir.

    Arr�tez de pendre vos lunettes de vieux cons, comment pouvez-vous regretter l'utilisation syst�matique de pointeurs nus dans un langage � exception ?
    Les smart pointeurs, c'est irrempla�able, jusqu'� trouver encore mieux.

    La normalisation du C++ a une d�marche proche des framework progressifs, rendre simple les cas courants, faire en sorte que les cas courants couvre le plus de cas possible et faire en sorte que les cas rares et complexes soient
    Et oui, la programmation g�n�rique (template simple), le code fonctionnel � base de lambda, la programmation parall�le ou concurrente sont des cas maintenant des plus courants ou en passe de l'�tre. Et que les normalisateurs me tracent une autoroute pour m'en servir le plus simplement du monde, je leur en suis profond�ment reconnaissant.

    Moi, je ne maitrise pas le C++, m�me apr�s plus de 20ans d'utilisation, mais tant que j'arrive � faire ce que je veux et qu'en cherchant un peu je trouve de super trucs qui me simplifient la vie, biblioth�que ou nouvelles normes, je suis content.

    Avoir l'illusion de maitriser un machin et bien plus d�vastatrice que de savoir qu'on ne sait rien.

    D�sol� les gars, mais les seules personnes qui peuvent dire que le C++ est trop compliqu�, c'est les vrais d�butants, pas ceux qui se paluchent les intrinsics des compilateurs en assembleur x64 ou Itanium.

  14. #14
    Membre extr�mement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 633
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Graphic Programmer
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 633
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Pour avoir subit l'inverse, je peux te garantir que C puis C++ c'est la combo maudite pour faire de la merde sans le savoir.

    Arr�tez de pendre vos lunettes de vieux cons, comment pouvez-vous regretter l'utilisation syst�matique de pointeurs nus dans un langage � exception ?
    Les smart pointeurs, c'est irrempla�able, jusqu'� trouver encore mieux.

    La normalisation du C++ a une d�marche proche des framework progressifs, rendre simple les cas courants, faire en sorte que les cas courants couvre le plus de cas possible et faire en sorte que les cas rares et complexes soient
    Et oui, la programmation g�n�rique (template simple), le code fonctionnel � base de lambda, la programmation parall�le ou concurrente sont des cas maintenant des plus courants ou en passe de l'�tre. Et que les normalisateurs me tracent une autoroute pour m'en servir le plus simplement du monde, je leur en suis profond�ment reconnaissant.

    Moi, je ne maitrise pas le C++, m�me apr�s plus de 20ans d'utilisation, mais tant que j'arrive � faire ce que je veux et qu'en cherchant un peu je trouve de super trucs qui me simplifient la vie, biblioth�que ou nouvelles normes, je suis content.

    Avoir l'illusion de maitriser un machin et bien plus d�vastatrice que de savoir qu'on ne sait rien.

    D�sol� les gars, mais les seules personnes qui peuvent dire que le C++ est trop compliqu�, c'est les vrais d�butants, pas ceux qui se paluchent les intrinsics des compilateurs en assembleur x64 ou Itanium.
    un poil violent ta r�ponse dit donc.
    Ce qui m'interrese c'est l'optimisation memoire, j'essai de faire ce que je veut tout en etant lightweight au possible (memoire, cpu et disk). j�aurais peu �tre du expliqu� �a.
    et dans ce cadre, je code en asm les fonctions utiles, j'alloue ma memoire en C quand c'est utile, et j'utilise le c++ pour le reste.

    Apres si on veut coder comme "un gros lourdos" a la java ou la c# ou on a un ramasse miette qui fait ce qu'il veut quand il veut et dont on ce fou, parce que au fond c'est pas notre probl�me la gestion memoire.
    ou en c++ avoir un code simple au prix de 1000 lib toutes moins opti les une que les autre pour garder notre code propre c'est autre chose.

    j'ai aussi regr�tt� d'avoir decouvert la prog sur windows plutot que sous linux, le c++ sur avec borland et son framework plutot que vs et le sdk windows.

    ps : "gors lourdos" repond a 'lunettes de vieux cons' de ta r�ponse

  15. #15
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    C++ est ce qui permet de ne payer que pour ce qu'on utilise, tant en place m�moire qu'en vitesse.
    Et le unique_ptr<> est l'une des fonctionnalit�s les moins ch�res et les plus utiles du C++: Un pointeur transf�rable, mais garanti n'avoir qu'un seul "propri�taire", et g�rant la d�sallocation automatiquement.

    C'est le meilleur moyen d'�crire du code exception-safe, absolument indispensable.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Citation Envoy� par Aiekick Voir le message
    Ce qui m'interrese c'est l'optimisation memoire, j'essai de faire ce que je veut tout en etant lightweight au possible (memoire, cpu et disk). j�aurais peu �tre du expliqu� �a.
    Mu� enfin, je connais personne de sens� qui n'essaye pas de limiter un peu chacun de ces aspects. M�me si "on s'en moque" du cpu ou de la ram, on va pas s'�clater � en utiliser plus que n�cessaire.

    Citation Envoy� par Aiekick Voir le message
    et dans ce cadre, je code en asm les fonctions utiles, j'alloue ma memoire en C quand c'est utile, et j'utilise le c++ pour le reste.
    Et t'as une quelconque �tude, article ou quoi qui prouve que c'est bien/mieux ?
    Par exemple, coder en assembleur certaines parties, � part pour montrer qu'on connait l'assembleur et qu'on fait du code non/dificilement portable, y'a un int�r�t pour les perfs ? Parce que bon on est en 2016 et les compilos sont d�sormais bien puissants hein.
    De m�me, allouer la m�moire en C ? Parce que tu crois vraiment qu'un malloc fera mieux qu'un new ? Et quoi de mieux au juste ?
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  17. #17
    Membre �prouv� Avatar de AoCannaille
    Inscrit en
    Juin 2009
    Messages
    1 453
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1 453
    Par d�faut
    Citation Envoy� par Bousk Voir le message
    De m�me, allouer la m�moire en C ? Parce que tu crois vraiment qu'un malloc fera mieux qu'un new ? Et quoi de mieux au juste ?
    Il en fera moins, donc plus vite. Il n'appelle pas la pile de constructeur dont h�rite un objet. Les constructeurs impl�ment�s sont potentiellement utile, ceux "par d�faut" font juste un appel de fonction et un changement de contexte pour rien.

    Enfin bon, mis � part cette seule exception; je ne vois rien d'autre, mais bon, je ne suis pas un sp�cialiste du fonctionnement profond de la m�moire en C ^^

  18. #18
    Membre extr�mement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 633
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Graphic Programmer
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 633
    Par d�faut
    Citation Envoy� par Bousk Voir le message
    Mu� enfin, je connais personne de sens� qui n'essaye pas de limiter un peu chacun de ces aspects. M�me si "on s'en moque" du cpu ou de la ram, on va pas s'�clater � en utiliser plus que n�cessaire.


    Et t'as une quelconque �tude, article ou quoi qui prouve que c'est bien/mieux ?
    Par exemple, coder en assembleur certaines parties, � part pour montrer qu'on connait l'assembleur et qu'on fait du code non/dificilement portable, y'a un int�r�t pour les perfs ? Parce que bon on est en 2016 et les compilos sont d�sormais bien puissants hein.
    De m�me, allouer la m�moire en C ? Parce que tu crois vraiment qu'un malloc fera mieux qu'un new ? Et quoi de mieux au juste ?
    Par exemple fait un comparatif. utilise opencv avec et sans la librairie de primitive intel ( ou toutes les op matricielles sont cod� en asm) tu verras la diff�rence, c'est flagrant, comme d'un coup on un meilleur fps qui permet de faire de la reconnaissance pouss� en temps reel.

  19. #19
    Membre �clair�
    Homme Profil pro
    -
    Inscrit en
    Octobre 2011
    Messages
    344
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : -

    Informations forums :
    Inscription : Octobre 2011
    Messages : 344
    Par d�faut
    Je ne ma�trise pas l'enti�ret� du fran�ais. Par exemple, jusqu'� il y a 10 secondes, je ne savais pas ce que � d�cize � voulait dire. Mais je me d�brouille quand m�me pour comprendre ce que racontes les autres.

  20. #20
    Membre tr�s actif Avatar de nikau6
    Homme Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 406
    Par d�faut
    Tr�s dr�le :-) Mais plaisanterie mise � part, l'exemple est tr�s mauvais. Il peut �tre impossible de comprendre le sens de certaines phrases si on ne maitrise pas le vocabulaire qui y est employ�. Mais il est �galement vrai que des phrases compos�s de mots tr�s simples peuvent �tre difficiles � comprendre.

Discussions similaires

  1. [Debutant(e)]Eclipse ne voit pas les sources
    Par uliss dans le forum Eclipse Java
    R�ponses: 3
    Dernier message: 04/08/2004, 09h34
  2. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de donn�es
    R�ponses: 3
    Dernier message: 24/02/2004, 14h45
  3. TASM ne conna�t pas les registres FS et GS
    Par forthx dans le forum Assembleur
    R�ponses: 4
    Dernier message: 07/06/2003, 00h56

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