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++ 20 est publié avec de nouvelles fonctionnalités pour le langage et la bibliothèque


Sujet :

Normalisation C++

  1. #61
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    - Déjà, celle expliquées par Aurélien qui font que ça aurait un mauvais impact sur l'évolution du code
    en fait je ne vois pas ce que ça change par rapport à maintenant, si tu as besoin de faire évoluer ton code, tu le fais évoluer, fixer une version permet juste de fixer la syntaxe utilisée ainsi que les fonctionnalités c++ associées au niveau de syntaxe.
    ensuite si pour mettre une ligne de nouveau c++, il faut porter 2000 comme le souligne Aurélien, c'est, pour moi, qu'il y a un problème avant, problème qui existe donc déjà quand on a un changement en c++ actuel.

    donc oui, si tu as une fonction de 2000 lignes en c++98 et que tu désires y mettre une lambda, va falloir le porter en version c++ plus récente.
    mais bon, c'est la même chose si cette fonction contient des auto_ptr, des string ou des list qui s'appuient sur l'ancienne spec, qui contient auto en tant que classe de stockage, et j'en passe.
    l'avantage, pour reprendre le cas du changement de sémantique de auto, c'est que ton compilo qui rencontre un auto dans du code flaggué c++98 n'aura pas de raison de te signaler que le sens de auto à changé, ça sera une classe de stockage et pas autre chose.

    Citation Envoyé par JolyLoic Voir le message
    - Ensuite à cause de la difficulté énorme pour un développeur qui devrait à chaque instant maîtriser non pas 1 version de la norme (le sous ensemble commun mis en oeuvre par ses compilateurs actuels), mais plusieurs en même temps
    je comprend pas trop, ce n'est pas déjà le cas? si ton projet contient du vieux et du nouveau code, tu dois déjà maîtriser plusieurs versions de c++ (moins les trucs qui ont changés entre 2 versions, car déjà portés). et encore plus si tu dois faire du portage de vieux code toi même.

    Citation Envoyé par JolyLoic Voir le message
    - Finalement, je pense que comme les différences vont bien au délà de la syntaxe, il va y avoir plein de problème aux interfaces... Quelques exemples sans vraiment réfléchir profondément :
    - Un fonction C98 prend un argument par valeur. Je l'appelle dans un contexte C++11 avec un temporaire. Ce dernier doit-il être copié (sémentique C++98) ou déplacé (sémentique C++11) ?
    - Ai-je le droit de faire dans un code C++11 un memcpy d'un objet défini en C++98 qui n'est pas un POD mais est triviallement copiable ?
    - Deux séquences de token identiques sont-elles ODR-equivalent si elles ne sont pas dans la même version de la norme ?
    - Est-ce que je peux instantier un template C++98 avec un argument C++17 ? Quelle version de la norme sera utilisée pour interpréter le code résultant de cette instantiation ? Si on dit C++98, il risque d'y avoir plein de truc étranges dans l'argument que le compilateur ne comprendra pas. Si on dit C++17, on risque d'avoir des soucis si le code C++98 n'est plus considéré comme valide justement parce que le but de cette mécanique est de pouvoir ne plus le considérer comme valide...
    - Même question en remplaçant "template" par "macro"...
    - Et je ne fais probablement qu'effleurer la surface...
    faudra que j'y regarde plus en détail pour chacun des cas, mais j'ai l'impression que tout peut être répondu par : le code c++98 dans ce cas garde la syntaxe c++98 mais en dessous on prend du c++17 ; exactement comme si tu compilais ton code c++98 avec -std=c++17 (tout en ignorant les changements de syntaxe entre les 2).

    c'est pas vraiment un schéma exact (voir pas du tout, vu que l'ast est très voir totalement lié à la syntaxe, il faudrait plutôt un intermediate language comme en .net), mais ça serait un truc du genre :

    c++98 code -> c++98 lexer -> c++17 ast -> c++17 obj

    ps: la doc de clang me ferait changer la ligne au dessus par ça : c++98 code -> c++98 lexer -> c++98 ast -> c++17 llvm ir -> c++17 obj

    Citation Envoyé par JolyLoic Voir le message
    Dit autrement, je pense que ça pourrait peut-être marcher au niveau syntaxique et code généré, mais j'ai du mal à voir ce que ça pourrait donner au niveau préprocesseur et surtout sémantique...
    en fait, ça ne résout pas ces problèmes, puisqu'ils sont déjà problématiques actuellement, prenons le cas des tristement célèbres macros min et max sous windows, qui rentrent en conflits avec les fonctions min et max de la stl par exemple, à moins d'interdire soit le préprocesseur soit certaines constructions dans le préprocesseur (comme pour les mots clés), moi qui souhaite intervenir plus tard dans le processus de compilation, je ne peux rien faire.
    pareil pour, par exemple le copy-on-write de l'ancienne version de std::string, si ton code s'appuyait sur ça et que tu changes de version de c++, tu devras faire extrêmement attention à ce code.

    la seule chose que je propose c'est recadrer la syntaxe (et arrêter le mélange des genres actuel), ce qu'il y a en dessous, à moins de changer radicalement les fonctionnalités/la philosophie du langage, on ne peut rien faire.

  2. #62
    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
    Je n'ai pas le temps de répondre en détails pour l'instant, mais je vais le faire sur 2 points :
    Citation Envoyé par stardeath Voir le message
    je comprend pas trop, ce n'est pas déjà le cas? si ton projet contient du vieux et du nouveau code, tu dois déjà maîtriser plusieurs versions de c++ (moins les trucs qui ont changés entre 2 versions, car déjà portés). et encore plus si tu dois faire du portage de vieux code toi même.
    Ce n'est pas une différence de principe, mais une différence de portée. Le but de la manoeuvre est bien de pouvoir casser la compatibilité plus aisément, donc aujourd'hui, un développeur passant de C++98 à C++17 peut le faire tranquillou, car, sauf quelques rares exceptions déjà peu utilisées en C++98 en pratique, sa manière de coder reste valide, bien que non optimale. Si suite à ces versions plus identitiées on se permet de casser plus de choses, le changement ressemblera forcément plus à un portage...
    Citation Envoyé par stardeath Voir le message
    c'est pas vraiment un schéma exact (voir pas du tout, vu que l'ast est très voir totalement lié à la syntaxe, il faudrait plutôt un intermediate language comme en .net), mais ça serait un truc du genre :
    Le langage intermédiaire du .NET n'est pas au niveau AST, mais au niveau llvm IR (à un niveau un peu plus élevé, mais c'est du détail). C'est ce que je disais quand je parlais qu'en terme de code généré, ça ne posait plus vraiment problème, car les différences d'un langage à l'autre étaient en grande partie gommées. Mais je pense que justement les exemples que j'ai donnés demandent une intégration à un niveau plus tôt dans la chaîne de compilation, et que là, c'est plus problématique...
    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. #63
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Le langage intermédiaire du .NET n'est pas au niveau AST, mais au niveau llvm IR (à un niveau un peu plus élevé, mais c'est du détail). C'est ce que je disais quand je parlais qu'en terme de code généré, ça ne posait plus vraiment problème, car les différences d'un langage à l'autre étaient en grande partie gommées.
    est ce que ça correspond plus à la "ligne corrigée" (celle du post scriptum) qui inclus "llvm ir" ? (j'aurais peut être du retirer la ligne après la correction, si il y a un risque de confusion)

    Citation Envoyé par JolyLoic Voir le message
    Mais je pense que justement les exemples que j'ai donnés demandent une intégration à un niveau plus tôt dans la chaîne de compilation, et que là, c'est plus problématique...
    sauf que là, si on s'intègre à un autre endroit de la chaine, ça casse la compatibilité.

    la solution est peut être de faire un nouveau langage compatible avec le c++, mais dans ce cas, c'est une proposition totalement différente, et vu l'hostilité au changement, je doute que ça passera.

  4. #64
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 108
    Points
    6 108
    Par défaut
    Citation Envoyé par stardeath Voir le message
    la solution est peut être de faire un nouveau langage compatible avec le c++
    Compatible jusqu'à tel point ? Parce que si tu veux pouvoir réutiliser directement les templates, alors le compilateur de ton nouveau langage devra récupérer toute la complexité du C++.
    À part ça, on a souvent besoin que l'ancien code puisse appeler le nouveau code.

  5. #65
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    je ne peux pas dire jusqu'à quel point, entre ma proposition et proposer un nouveau langage, il y a un monde.

    si je devais proposer ça, il faudrait que le nouveau langage puisse au moins lire les headers (donc probablement avec les macros et les templates) et être compatible avec le modèle mémoire du c++.
    il faudrait aussi que la chaîne de compilation soit compatible, que les conventions d'appel soient les mêmes, etc.

    bref, plein de choses qui diffèrent de "juste" ajouter une syntaxe à un ensemble existant.

  6. #66
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 257
    Points
    66 257
    Par défaut La spécification du C++ 20 a été approuvée à l'unanimité, elle succèdera à C++ 17
    La spécification du C++ 20 a été approuvée à l'unanimité, elle succèdera à C++ 17
    et apporte bon nombre de nouveautés dont les Modules, les Coroutines et autres

    Mise à jour du 07/09/2020 : Samedi dernier, le projet de normes ISO/IEC 14882:2020 a été approuvé en tant que dernière mise à jour majeure du langage de programmation C ++. Le vote sur le DIS (Draft International Standard) du C++20 s'est achevé le vendredi, et il a été adopté à l'unanimité. L'approbation du C ++ 20 a été unanime et constitue une mise à jour très importante par rapport à C ++ 17. Cela signifie que le C++20 a maintenant reçu l'approbation technique finale et qu'il a été soumis au vote de l'ISO.

    Il sera officiellement publié vers la fin de 2020, après un dernier cycle de travail éditorial de l'ISO. Même s'il arrivait qu'il soit publié en 2021, il sera toujours appelé C++20, car le WG21 a terminé ses travaux techniques en février. En résumé, C ++ 20 apporte les Modules, les Coroutines, l’ajout de l’opérateur ⇔ à la bibliothèque standard, les Concepts et autres.


    Comme annoncé en février dernier, le comité ISO C++ 20 a tenu sa réunion d’été la semaine passée à Cologne, en Allemagne. Le compte rendu de la réunion indique que les travaux sont achevés pour le C++ 20 et un brouillon sera diffusé avant la fin de l’été. Au cours de la réunion, quelques ajouts et modifications ont été apportés au brouillon du C++ 20 présenté en février dernier par le comité. La norme internationale C++ 20 est prévue pour être publiée officiellement en février 2020 à Prague.

    Au cours de la précédente réunion de février, le comité ISO C++ 20 avait ajouté plusieurs nouvelles fonctionnalités au langage. Parmi ces fonctionnalités figurent les Coroutines et les Modules. Les Modules constituent une nouvelle alternative aux fichiers d’entête et apportent un certain nombre d’améliorations clés notamment en isolant les effets des macros et en permettant des générations évolutives. Cette fonctionnalité permet aux utilisateurs du langage de définir une limite d’encapsulation nommée. Les Coroutines sont des fonctions qui peuvent suspendre et reprendre leur exécution tout en conservant leur état.

    Nom : z1.png
Affichages : 82228
Taille : 51,8 Ko

    À l’issue de la réunion de la semaine passée, il a été rapporté que quelques ajouts et modifications ont de nouveau été apportés à la spécification C++ 20. Selon le compte rendu présenté sur Reddit, de nouvelles fonctionnalités ont été ajoutées et de nombreuses modifications ont également été apportées. Parmi les nouveaux ajouts, on peut citer std::format, l’intégration de l’opérateur ⇔ dans la bibliothèque standard du langage, etc., et les conteneurs constexpr. Herb Sutter, le président de comité de normalisation de la norme C++ 20, a apporté plus d’explications sur ces nouveaux ajouts :

    std::format

    std::format ajoute la prise en charge des chaînes de format à la bibliothèque standard C++, y compris pour les paramètres de type sécurisé et de position. Si vous connaissez les chaînes au format Boost.Format ou POSIX, ou même simplement printf, vous saurez exactement de quoi il s'agit. Selon lui, std::format donne le meilleur de printf (commodité) et le meilleur de iostreams (sécurité et extensibilité des iostreams), mais il ne se limite pas à iostreams. Il vous permet également de formater n’importe quelle chaîne. « Cela fait longtemps que j'attends cela, de sorte que je n'aurai plus jamais à utiliser l’entête iomanip », a-t-il déclaré à propos.

    Stop Token and Joining Thread

    Sutter a expliqué que cette fonctionnalité introduit deux nouveaux concepts. Premièrement, il s’agit d’un type de thread dont le destructeur se joint implicitement si vous ne vous êtes pas encore connecté ou détaché. Et deuxièmement, mais plus important encore, cette fonctionnalité constitue un mécanisme d'annulation composable général dans la bibliothèque standard que tous les types peuvent utiliser. Ce mécanisme porte le nom de stop_token.

    Les conteneurs constexpr

    Les conteneurs constexpr suivants ont été ajoutés à la norme C++ 20 : constexpr INVOKE, constexpr std::vector et constexpr std::string. Selon Sutter, cela signifie que beaucoup de code C++ ordinaire peut être exécuté à la compilation, y compris même les conteneurs vectoriels et chaînes dynamiques standard. « C’était quelque chose qui aurait été difficile à imaginer il y a quelques années à peine, mais cela montre de plus en plus que nous sommes sur un chemin où nous pouvons exécuter du code C ++ simple au moment de la compilation au lieu d’essayer d’exprimer ces calculs sous forme de métaprogrammes de modèle », a-t-il précisé à propos de ces ajouts.

    L’utilisation des énumérations a été revue

    Selon les explications sur la fonctionnalité, les énumérations dont il s'agit ici ne sont pas des classes. Ils sont plus proches des espaces de noms comprenant des variables en ligne. La syntaxe familière qui fonctionne pour les espaces de noms devrait donc également leur être appliquée, d’une manière ou d’une autre. Comme ils sont fermés, petits et ne contiennent pas de jeux de surcharge, l’on peut mieux faire que la directive using pour les espaces de noms et obtenir les identifiants dans la portée locale. L'introduction de cette fonctionnalité permettra de mieux nommer les énumérations.

    Actuellement, les énumérations sont nommées avec un identifiant aussi court que possible, souvent jusqu'à l'absurdité, lorsqu'ils sont réduits à des abréviations totalement non descriptives. Avec cette fonctionnalité, les identifiants deviennent disponibles pour une recherche non qualifiée dans des contextes locaux où leur source est évidente, ce qui permet à l'utilisateur de l'énumération de contrôler le style de recherche au lieu de créer une sémantique de recherche dans le type de l'énumération.

    Certaines modifications ont également été apportées au cours de la réunion de la semaine passée. Les Contrats ont été transférés de C++ 20 à un autre groupe d’étude. Selon Sutter, lors de cette réunion, il est apparu clairement que le comité n’a pas encore fini de concevoir les Contrats à temps pour C ++ 20. « Lorsque nous avions adopté la fonctionnalité il y a un an, nous pensions qu'elle était prête pour la norme, mais depuis lors, nous avons découvert des désaccords de conception persistants et des préoccupations que nous ne pouvions pas résoudre suffisamment pour obtenir un consensus (accord général sans objections soutenues). Les principaux soumissionnaires ont unanimement convenu que la bonne chose à faire est de différer sa publication », a-t-il déclaré.

    Cependant, les Contrats sont une caractéristique importante, et les travaux sur celles-ci n’arrêtent pas, mais continuent. « J'espère que lors des prochaines réunions, nous ferrons de solides progrès dans ce domaine important », a-t-il expliqué à propos. Les composantes de la norme C++ 20 sont à présent connues. Un brouillon de comité sera publié dans les prochaines semaines et la publication officielle du C++ 20 est prévue pour le mois de février 2020. Voici une liste non exhaustive des fonctionnalités notables qui sont attendues pour C++ 20 :

    • les Modules ;
    • les Coroutines ;
    • l’ajout de l’opérateur ⇔ à la bibliothèque standard ;
    • les Concepts ;
    • les Ranges ;
    • les conteneurs constexpr ;
    • les macros de test de fonctionnalité ;
    • std::span ;
    • std::format ;
    • std::atomic_ref ;
    • etc.


    Sources : Rapport du Comité C++, Herb Sutter

    Et vous ?

    Que pensez-vous des fonctionnalités apportées à C++ 20 ?
    Quelles autres fonctionnalités auriez-vous souhaité avoir pour le C++ 20 ?

    Voir aussi

    La conception de C++ 20 est achevée et le premier brouillon sera publié en juillet 2019. Les Modules et les Coroutines y sont présents

    La réunion d'automne du comité WG21 sur l'ajout de fonctionnalités au C ++ 20 est achevée. Voici quelques nouveautés introduites au langage

    La spécification de la nouvelle version du langage C++ (C++17) est finalisée. Quelles sont les nouveautés introduites ?
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  7. #67
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut Contrats
    C'est vraiment dommage que les contrats soit décalé, c'est la feature qui me hypait le plus et de loin.

  8. #68
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    597
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 597
    Points : 2 443
    Points
    2 443
    Par défaut
    Oui, mais bon il vaut mieux l'avoir plus tard que maintenant avec des problèmes
    Surtout que c'est remplaçable (certes pas de manière aussi efficace) à coup de macros.

    Puis on a pas mal de trucs vraiment cool, rien que les concepts ça va vraiment changer la façon de programmer...

    Perso j'attendais surtout la réflexivité avec impatience.
    Circuits intégrés mis à nu: https://twitter.com/TICS_Game

  9. #69
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 20
    Points : 50
    Points
    50
    Par défaut Hitler à propos du C++ moderne Parodie
    Le C++ qui je le rappel ce nomme C++ car par rapport au C traditionnel augmente ++ :

    • l'arthrose
    • la myopie sans même faire de toi un Indiana Jones capable de déchiffrer les hiéroglyphes
    • les douleurs musculaires
    • le Syndrome du canal carpien !!!


    Cette parodie qui détourne un film sur Hitler est génial :


  10. #70
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par onilink_ Voir le message
    Puis on a pas mal de trucs vraiment cool, rien que les concepts ça va vraiment changer la façon de programmer...
    C'est clair. Il y a déjà de quoi s'occuper avec les modules, coroutines, concepts, ranges,.. Sans compter que beaucoup de fonctionnalités du C++11, comme les lambdas, rvalue references, variadic templates, etc sont encore loins d'être maitrisées par tout le monde...

  11. #71
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Août 2014
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    Points : 1 042
    Points
    1 042
    Par défaut
    Je reste toujours surpris ces dernieres années de voir le C++ qui revient au gout du jour. En ayant fait pendant 25 ans je n'ai pourtant pu constater que son desinteret de la part des nouveaux devs.
    Les nouveaux devs (dans ma boite en tout cas) ne voient que par M$ et C# (au point de l'imposer comme unique langage a tout le monde !).
    Ils n'ont aucune culture informatique et ne voient que le C++ comme quelque chose de compliqué.
    On est en train de reecrire des applis C++ existantes eprouvées en leur version C# (je n'ai toujours pas compris l'interet).

    Du coup dans quels types d'applications le C++ moderne a t il sa place en 2019 ?
    J'ai bien essayé de pousser encore et encore (pour les perfs, maitrise memoire etc) mais j'ai du jeter l'eponge pour na pas passer pour le refractaire au changement (sur nos applis API Web, c'est principalement JS +C#).
    On ne fait plus d'applis client lourd donc le coté multiplatforme est porté principalement par des applis web (sous Windows car on a des layatolas M$ qui pensent, respirent, vivent M$ exclusivement).

  12. #72
    Invité
    Invité(e)

  13. #73
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Août 2014
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    Points : 1 042
    Points
    1 042
    Par défaut
    ok MERCI.

    effectivement, autant de domaines qu'on n'utilise pas ou pour lesquels on utilise des composants deja existants (ex : cpprestsdk).
    On privilegie des briques existantes avant de recoder un serveur web maison etc.
    On a des devs qui font principalement des applis de gestion CRUD (type webapi/mvc) en archi micro services et pas des logiciels necessitant un background technique plus important donc loin de ce genre de composants (plus des devs qui font du C# comme on programmait sous visual basic cad programmation pour les noobs).
    Donc effectivement C++ est hors de portee pour eux; ils ne comprendraient meme pas les notions de base.

  14. #74
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Citation Envoyé par kilroyFR Voir le message
    Je reste toujours surpris ces dernieres années de voir le C++ qui revient au gout du jour. En ayant fait pendant 25 ans je n'ai pourtant pu constater que son desinteret de la part des nouveaux devs.
    Les nouveaux devs (dans ma boite en tout cas) ne voient que par M$ et C# (au point de l'imposer comme unique langage a tout le monde !).
    Ils n'ont aucune culture informatique et ne voient que le C++ comme quelque chose de compliqué.
    On est en train de reecrire des applis C++ existantes eprouvées en leur version C# (je n'ai toujours pas compris l'interet).

    Du coup dans quels types d'applications le C++ moderne a t il sa place en 2019 ?
    J'ai bien essayé de pousser encore et encore (pour les perfs, maitrise memoire etc) mais j'ai du jeter l'eponge pour na pas passer pour le refractaire au changement (sur nos applis API Web, c'est principalement JS +C#).
    On ne fait plus d'applis client lourd donc le coté multiplatforme est porté principalement par des applis web (sous Windows car on a des layatolas M$ qui pensent, respirent, vivent M$ exclusivement).
    C# est un excellent langage qui sert de base pour tout un tas de trucs dans C++ 11+ .

    De plus personne ne fait de client lourd depuis bien 10 ans, trop chiant à déployer etc. Tout est fait en web et ce même quand ce n'est pas forcément adapté et je ne pense pas que MS ait quelque chose à voir la dedans ils ont d'excellentes techno client lourd.

    C++ sera a un moment donné remplacé par Rust, Go ou un truc du genre, après la structuration de C++ n'aide pas non plus pas de modules etc. une vraie chiasse à ce niveau après bon ça reste compréhensible à l'époque fallait pouvoir embarquer les dev cobol, c etc. Donc je ne vais pas trop lui taper dessus pour ça et puis ça a été ajouté donc .

    Le truc qui m'intéresse le plus à porter de C++ vers dotnet ce sont les templates variadrique, j'attend la sortie de .Net 5 pour me lancer dans des modifs du compilateur et faire une spec etc. pour implémenter cela sur .Net.

  15. #75
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Citation Envoyé par kilroyFR Voir le message
    ok MERCI.

    effectivement, autant de domaines qu'on n'utilise pas ou pour lesquels on utilise des composants deja existants (ex : cpprestsdk).
    On privilegie des briques existantes avant de recoder un serveur web maison etc.
    On a des devs qui font principalement des applis de gestion CRUD (type webapi/mvc) en archi micro services et pas des logiciels necessitant un background technique plus important donc loin de ce genre de composants (plus des devs qui font du C# comme on programmait sous visual basic cad programmation pour les noobs).
    Donc effectivement C++ est hors de portee pour eux; ils ne comprendraient meme pas les notions de base.
    C# est un langage assez fin, dernièrement j'ai été surpris qu'un type avec autant d'expérience que moi me demande à quoi correspond le mot clef "in" que j'avais utilisé dans mon programme. Je lui explique qu'il s'agit de "const MyType& arg" et la je l'ai perdu... En fait n'ayant jamais touché C/C++ il était pas capable de comprendre le concept ^^ . J'ai des tas d'exemple comme ça, on forme les gens à l'arrache en leur faisant croire que tout est magique mais C# ne l'est pas et on se retrouve avec des personnes incapable de comprendre ce qu'il se passe dans la machine quand il font par exemple "mytring += otherstring" ou encore qu'un événement est une liste de pointeurs de fonction et que ça n'est pas magiquement supprimé par le GC.

    Tout le problème vient du fait que les gens sont formés sur de la syntaxe (enfin le gros de la syntaxe les subtilités osef... sauf que ça fait toute la différence), et pas sur la technologie qui est .NET qui elle même nécessite d'explorer C/C++.

    C# reste de loin mon langage préféré même si je trouve C++ cool, en ce moment je dev un pilote linux en C++ et une couche d'intérop .NetCore qui va avec du fun .

  16. #76
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Août 2014
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    Points : 1 042
    Points
    1 042
    Par défaut
    Citation Envoyé par redcurve Voir le message
    J'ai des tas d'exemple comme ça, on forme les gens à l'arrache en leur faisant croire que tout est magique...
    Tout le problème vient du fait que les gens sont formés sur de la syntaxe (enfin le gros de la syntaxe les subtilités osef... sauf que ça fait toute la différence), et pas sur la technologie qui est .NET qui elle même nécessite d'explorer C/C++.
    Oui alors la je plussoie totalement; on a des devs qui font le focus sur la maitrise des syntaxes et autre recherche de COMPACITE d'ecriture de code (ecrire en 4 lignes ce que tu ecris en 5) mais sur certaines mecaniques (garbage collector etc) ben on se retrouve devant des pbs qu'ils ne comprennent pas - le coté magique (sur equipements embarqués notamment avec fuite memoire ou objets dechargés au mauvais moment).
    Bizarrement j'ai toujours trouvé plus interessant de resoudre des problemes "techniques" ou d'algorithmie que d'essayer de faire du code facon poupees russes ou la maintenance est terrible (mais le code compact, argument mis en avant - bref des gens qui allouent des Go de memoire mais essaient de gratter quelques lignes de code - j'avoue que ca m'echappe).

  17. #77
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    597
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 597
    Points : 2 443
    Points
    2 443
    Par défaut
    Citation Envoyé par kilroyFR Voir le message
    Du coup dans quels types d'applications le C++ moderne a t il sa place en 2019 ?
    Ce genre de question n'a de sens que si tu penses en tant que boite/RH qui va engager des devs.

    Mais dans l'absolu je te dirais absolument tout, pour la simple raison qu'un dev qui maîtrise C++ ne fait pas du C++ seulement parce que c'est "rapide" (j'ai toujours trouvé cet argument pour faire du C++ plutôt moisi) ou encore "léger" (pareil pour ça), mais parce que C++ est réellement un bon langage, avec une élégance et une philosophie que tu ne retrouveras pas ailleurs. Puis niveau frameworks y a de quoi faire (genre Qt).
    J'ai personnellement essayé pas mal de langages, et y a rien à faire, pour rien au monde je ne changerais. Seul Rust m’intéresse a côté mais c'est pour des cas assez précis, ou encore des langages fonctionnels pour leur façon de fonctionner.

    Le seul "soucis" de C++ (qui a mon sens est plus une qualité mais bon) est le temps qu'il faut pour le maîtriser un tant soit peu, étant énormément fournis en concepts/fonctionnalités, et la lib standard étant directement liée au langage, il y a beaucoup de choses à apprendre (par exemple rien que maîtriser <algorithm> ça prend beaucoup de temps).

    Beaucoup de langages eux vont cacher les difficultés sous le tapis. Y a qu'a voir les garbage collectors présents dans tellement de langages, et c'est pourtant une abomination:
    - ça ne simplifie rien du tout, car tout ce que l'on gagne pour que les objets "s'effacent" comme par magie on le perd ailleurs (ordre de destruction indéterminé à cause des références cycliques, mémoire inutile supplémentaire, dégradation des performances)
    - ça ne fonctionne pas pour tout ce qui n'est pas été prévu à cet effet (handle de fichier, vram)
    - ça répond à un besoin qui n'existe pas à mon sens, mais pour ça il faut connaître la RAII et les pointeurs intelligents par exemple...
    On se retrouve ainsi avec de faux pointeurs partout dans Java ou encore C#, parce que "les pointeurs et l'allocation de mémoire ça fait peur".
    Ou encore des fonctions virtuelles partout dans Java...
    Enfin bref, que des abominations pour faire croire que les choses sont plus simples qu'ailleurs, alors qu'en fait on se rend bien vite compte que c'est tout sauf le cas.

    Citation Envoyé par redcurve Voir le message
    C# est un excellent langage qui sert de base pour tout un tas de trucs dans C++ 11+ .
    Comme quoi?
    Circuits intégrés mis à nu: https://twitter.com/TICS_Game

  18. #78
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut concepts or not concepts
    Citation Envoyé par onilink_ Voir le message
    Puis on a pas mal de trucs vraiment cool, rien que les concepts ça va vraiment changer la façon de programmer...
    Moi les concepts, j'ai du mal à en saisir le ... concept

    J'ai un peu regarder sur internet quelques exemples et à chaque fois que trouve ça lourd pour pas grand-chose, et à chaque fois je vois une solution plus simple et plus claire, généralement en passant par de l'héritage.

  19. #79
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    597
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 597
    Points : 2 443
    Points
    2 443
    Par défaut
    Les concepts c'est pour de la TMP, donc l'héritage ça n'a clairement rien à voir.

    Des fois que t'ai pas vu y a des exemples pas mal ici: https://en.cppreference.com/w/cpp/language/constraints
    Ça permettra d'ailleurs de rendre les messages d'erreurs de compilation quand on utilise la lib standard beaucoup plus clairs (pour tout ce qui est TMP)...
    Circuits intégrés mis à nu: https://twitter.com/TICS_Game

  20. #80
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Août 2014
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    Points : 1 042
    Points
    1 042
    Par défaut
    Citation Envoyé par onilink_ Voir le message
    Ce genre de question n'a de sens que si tu penses en tant que boite/RH qui va engager des devs.

    Mais dans l'absolu je te dirais absolument tout, pour la simple raison qu'un dev qui maîtrise C++ ne fait pas du C++ seulement parce que c'est "rapide" (j'ai toujours trouvé cet argument pour faire du C++ plutôt moisi) ou encore "léger" (pareil pour ça), mais parce que C++ est réellement un bon langage, avec une élégance et une philosophie que tu ne retrouveras pas ailleurs. Puis niveau frameworks y a de quoi faire (genre Qt).
    J'ai personnellement essayé pas mal de langages, et y a rien à faire, pour rien au monde je ne changerais. Seul Rust m’intéresse a côté mais c'est pour des cas assez précis, ou encore des langages fonctionnels pour leur façon de fonctionner.

    Le seul "soucis" de C++ (qui a mon sens est plus une qualité mais bon) est le temps qu'il faut pour le maîtriser un tant soit peu, étant énormément fournis en concepts/fonctionnalités, et la lib standard étant directement liée au langage, il y a beaucoup de choses à apprendre (par exemple rien que maîtriser <algorithm> ça prend beaucoup de temps).

    Beaucoup de langages eux vont cacher les difficultés sous le tapis. Y a qu'a voir les garbage collectors présents dans tellement de langages, et c'est pourtant une abomination:
    - ça ne simplifie rien du tout, car tout ce que l'on gagne pour que les objets "s'effacent" comme par magie on le perd ailleurs (ordre de destruction indéterminé à cause des références cycliques, mémoire inutile supplémentaire, dégradation des performances)
    - ça ne fonctionne pas pour tout ce qui n'est pas été prévu à cet effet (handle de fichier, vram)
    - ça répond à un besoin qui n'existe pas à mon sens, mais pour ça il faut connaître la RAII et les pointeurs intelligents par exemple...
    On se retrouve ainsi avec de faux pointeurs partout dans Java ou encore C#, parce que "les pointeurs et l'allocation de mémoire ça fait peur".
    Ou encore des fonctions virtuelles partout dans Java...
    Enfin bref, que des abominations pour faire croire que les choses sont plus simples qu'ailleurs, alors qu'en fait on se rend bien vite compte que c'est tout sauf le cas.


    Comme quoi?
    Tu preches un convaincu puisque je viens du C/C++. C'est juste que malgré la "beauté du langage" (pour moi c'est de la branlette d'informaticien) etc comme tu le dis ben on est dans un monde ou il faut developper rapidement. Si je demande a un developpeur il pourra effectivement se faire plaisir en utilisant tel ou tel langage parce que ca lui plait (ce que j'ai fais pendant des années avec C++); en pratique on choisit ce qui est le plus efficace pour arriver a la cible et surtoutpour que ca puisse etre maintenu par le plus grand nombre.
    Donc tout ce qui est specialisé ben on a tendance a eviter.
    Et comme souvent dans les dernieres années ce n'est pas C++ qui s'en sort le mieux car ca rebute les nouveaux qui ne veulent pas s'emmerder.
    Si ca prend du temps ou apprentissage long (et donc couteux) ben le choix est vite fait pour un manager ou un dev junior.
    De nos jours dans ma boite, hormis les devs +40 ans personne ne veut developper en C++ (on est d'ailleurs regardé comme des extra terrestres; des has been) - meme pire que ca ils n'arrivent pas lire le code CPP pour la maintenance; quand on parle d'API pour eux ca veut dire exclusivement WEB API (la notion d'API/Librairie leur echappe completement).

    Et il faut arreter avec QT. Faire des logiciels a usage professionnel avec QT coute une blinde en terme de licence et on se fait vite rentrer dans le lard par nos clients qui ne veulent que du mobile/web mais certainement pas de client lourd (on a arrete avec les framework MFC/silverlight/WPF depuis un moment car pareil, plus personne ne voulait travailler sur ces technos jugées has been -pas en phase avec les demandes du marché du travail - ou alors dans des niches tres limitées presentant ainsi peu d'interet).
    Donc tout le monde suit comme des moutons le mouvement general. Je me suis accroché a ce langage C/C++ pendant 25 ans (tout en me formant sur les autres java/Csharp sans grande conviction) mais j'ai bien jeté l'eponge depuis 2 ans . Ainsi va le monde du developpement.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/09/2017, 12h11
  2. Android Studio 2.3 : la nouvelle version de l'EDI est disponible
    Par Coriolan dans le forum Android Studio
    Réponses: 7
    Dernier message: 08/03/2017, 10h01
  3. Pharo 5 : la nouvelle version du langage
    Par maske dans le forum Smalltalk
    Réponses: 0
    Dernier message: 13/05/2016, 10h31
  4. Une nouvelle version de MariaDB Entreprise est disponible
    Par Olivier Famien dans le forum Actualités
    Réponses: 2
    Dernier message: 14/04/2015, 10h48

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