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. #81
    Membre chevronné Avatar de onilink_
    Profil pro
    Inscrit en
    juillet 2010
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : juillet 2010
    Messages : 478
    Points : 1 948
    Points
    1 948
    Par défaut
    Oui, c'est pour ça que la question n'a de sens que si on se projette sur une boite qui cherche à recruter ou a des besoins spécifiques.
    Un bon dev C++ ça coûte cher effectivement.

    Maintenant je pense qu'il y a quand même une garantie, étant donné que pour être un bon dev C++ cela nécessite beaucoup plus d'investissement que dans de nombreux langages, il y a moins de risque de tomber sur quelqu'un qui ne connaît pas son métier (je pense notamment a cet article qui me fait penser qu'être programmeur de nos jours ça ne veut plus dire grand chose).
    Mais je suis d'accord que pour faire des choses simples, ce n'est pas forcement la meilleur idée économiquement.

    Maintenant, dire que personne ne veut dev en C++, ça me parait un peu abusé. Si tu veux vite bosser en entreprise avec peu d'investissement personnel, d'accord.
    Mais les bons dev C++ sont beaucoup recherchés non? J'ai peut être du mal a me rendre compte car 90% de mon entourage dev fait du C++ en pro.
    Et c'est dans pas mal de domaines: optimisation de réseaux électriques, radio, interfaces, jeux vidéo, robotique (avec du Qt pour les outils justement), cloud gaming...

    Quand à Qt si le projet est open source la licence est gratuite non?
    Si c'est pour faire des outils, même a usage pro, c'est pas forcement un problème.
    En tout cas ça a l'air difficile de trouver des prix, mais à priori ils ont un truc flexible en fonction du revenu de la boite.
    Et vu l'efficacité du framework ça peut valoir le coup...

    Quand je parle de "beauté du langage", je parle surtout de l'efficacité.
    Il y a des choses que je fais en C++ que je ne me verrais absolument pas faire ailleurs, notamment car la metaprog ça n'existe pas chez Java/C#...
    Des tutos de pixel art: https://twitter.com/OniMille

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

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

    Informations forums :
    Inscription : août 2014
    Messages : 472
    Points : 1 001
    Points
    1 001
    Par défaut
    On est une boite qui fabriquons egalement du materiel et donc il nous reste principalement ces equipes qui sont necessairement souvent en C++ car ca a du sens pour les perfs (couche de comms etc)
    (la couche C# a bien ete tentée mais sur l'embarqué les framework C# sont des framework canada dry; ca ressemble a du .Net mais fonctionnellement ya un monde avec ceux sous PC.
    Sinon coté back office alors la clairement je fais encore partie des derniers des mohicans avec mes applis C++ que je maintiens; mais sinon personne ne s'aventure dans ces territoires (C#, JS, webapi/mvc leur monde se resume a cela).

  3. #83
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 621
    Points : 3 644
    Points
    3 644
    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 le problème avec les langages plus " " "récents" " " (je mets des guillemets à foison car je pense à Java et à C# qui sont loin d'être récents ). À les écouter le C++ a ses limites et ils sont là pour les résoudre. Mais ils finissent par singer le C++ d'une manière où d'une autre. Prenons l'exemple de l'héritage. "L'héritage c'est mal, surtout quand il est multiple." Soit. Mais que proposent des langages comme Java ou C# pour pallier à cela ? Des concepts alambiqués d'interfaces et de traits (pas forcément en Java et en C# pour ces derniers), qui quelque part reviennent à faire de l'héritage multiple sans en dire le nom. Idem avec l'abus des références pour ne pas prononcer le gros mot "pointeur", surtout quand t'as une référence null à gérer comme ton pointeur NULL en C/C++. En face de tout ça t'as le C++ qui est franc du collier au possible. Il veut faire de l'héritage multiple ? Il en fait et il le dit clairement, sans enfumer son monde avec des traits et des interfaces. Il veut utiliser des pointeurs ? Il les utilise ! Les références ça existe en C++ mais l'usage est légèrement différent. Les jeunes générations sont bercées par les "limites du C++" dont Java, C# et toute la clique viennent nous sauver. Alors qu'en fait ils font comme en C++ mais sans en dire le nom, afin de ne surtout pas dévoiler la supercherie. Une querelle des anciens et des modernes, en quelque sorte.

    Je ne dis pas que le C++ est parfait. Mais il n'y a pas grand chose en POO Java ou C# que tu ne puisses pas faire tout aussi bien (voire mieux) en bon vieux C++ (hors côté WORA). Au contraire les autres seraient même plus que limités par rapport à C++. Je pense entre autres à l'héritage protégé. Si je dois en faire alors la question de l'utilisation du C++ pour faire ce que j'ai à faire ne se pose même pas.

    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+ .

    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.
    Rust n'a pas vocation à remplacer le C++, ne serait-ce que parce qu'il ne fait pas de POO, du moins pas ouvertement et dans les règles de l'art. Il n'y a ni classes ni héritage ni surcharges en Rust, mais seulement des modificateurs de visibilité (encapsulation) et de l'implémentation de traits (tiens donc !). Va faire correctement de la POO sans ça. Rust est plus à même de remplacer le C que le C++ car il est plus proche d'un "C with classes" intermédiaire entre C et C++ que du C++.

    Pour le reste C++ aurait donc avant tout besoin de sucre syntaxique. "C++ n'a pas les interfaces", mais quelle est la différence entre une interface et une classe abstraite composée exclusivement de méthodes virtuelles pures et publiques (et d'attributs publiques statiques) ? Pourquoi l'une plutôt que l'autre, surtout dans un langage tolérant l'héritage multiple ?

    Citation Envoyé par redcurve Voir le message
    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 .
    +1. Un langage c'est avant tout un tas de concepts implémentés avec de la syntaxe. Si t'as les concepts généraux alors tu sauras retrouver tes petits peu importe le langage. Tu seras dans tes pantoufles à peu près partout. Une boucle conditionnelle reste une boucle conditionnelle, que ce soit en C, C++, Java, C#, Kotlin, Python, PHP, Ruby, Swift, Go, Rust, VB(.NET), JavaScript... Ce n'est pas parce qu'on dit switch en C++ mais match en Rust que les concepts derrière en sont fondamentalement différents. Il peut y avoir des subtilités, celles de l'implémentation du concept dans le langage, mais au fond c'est la même chose.

    Le problème avec les syntaxes est que les gros langages ont presque tous ("presque" parce que Python) des syntaxes proches, fortement inspirées de celle du C. Du coup tu peux aller encore plus vite donc encore plus mal sur ce point.

    Citation Envoyé par onilink_ Voir le message
    Quand à Qt si le projet est open source la licence est gratuite non?
    Si c'est pour faire des outils, même a usage pro, c'est pas forcement un problème.
    En tout cas ça a l'air difficile de trouver des prix, mais à priori ils ont un truc flexible en fonction du revenu de la boite.
    Et vu l'efficacité du framework ça peut valoir le coup...
    Qt est disponible sous licence LGPL. Donc à moins de modifier Qt ou de compiler en statique tu peux utiliser la version gratuite et open source de Qt dans un projet pro. Certains outils intéressants comme le Qt Quick Compiler (pour compiler tes fichiers QML et ainsi gagner en performance) sont désormais disponibles dans la version gratuite. La version gratuite de Qt peut convenir à beaucoup de projets pro, enfin je pense.

    Le comparatif est disponible ici : https://www.qt.io/download
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  4. #84
    Expert éminent
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 4 057
    Points : 9 092
    Points
    9 092
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Les jeunes générations sont bercées par les "limites du C++" dont Java, C#
    ...
    Ce n'est pas parce qu'on dit switch en C++ mais match en Rust que les concepts derrière en sont fondamentalement différents
    Ouais bof

    Lorsque tu vois que le switch en JavaScript prend en charge les chaînes de caractères. Pour moi ce n'est pas que du sucre syntaxique.
    Lorsque tu vois que le switch en Delphi prend en charge les intervalles de valeurs. Pour moi ce n'est pas que du sucre syntaxique.
    Lorsque tu vois comment JavaScript gère les fermetures (closures). Ce n'est pas comparable avec le C++, et le problème du double [ (<- si je ne dis pas de bêtises )
    J'ai travaillé en Objective-C, et l’introspection (tester si une classe a ou pas une méthode) c'est très utile. Mais, on va encore me sortir "en C++, on ne paye pas le surcoût"

    Il y aussi le support de l'Unicode : je sais que c'est un sujet glissant, et que le PHP s'est troué sur ce sujet. Mais ce n'est pas glorieux.

  5. #85
    Expert confirmé
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 1 215
    Points : 5 157
    Points
    5 157
    Par défaut
    Citation Envoyé par onilink_ Voir le message
    Mais les bons dev C++ sont beaucoup recherchés non? J'ai peut être du mal a me rendre compte car 90% de mon entourage dev fait du C++ en pro.
    L'an dernier, j'avais cherché des postes en C++ et en Python, avec les mêmes prétentions salariales, en précisant à tous les recruteurs (même les recruteurs Python) que je maîtrisais mieux le C++ que le Python.
    Pour les postes C++, les recruteurs m'ont tous rejetés en disant que mes prétentions salariales étaient trop élevées. Pourtant, ce n'étaient pas des postes dans des jeux vidéos (réputés pour payer au lance-pierre). Du coup, j'ai décroché un poste en Python, que j'occupe depuis cette année.

    Citation Envoyé par air-dex Voir le message
    Rust n'a pas vocation à remplacer le C++, ne serait-ce que parce qu'il ne fait pas de POO, du moins pas ouvertement et dans les règles de l'art. Il n'y a ni classes ni héritage ni surcharges en Rust, mais seulement des modificateurs de visibilité (encapsulation) et de l'implémentation de traits (tiens donc !). Va faire correctement de la POO sans ça.
    Et pourquoi veux-tu absolument pouvoir faire de la "POO dans les règles de l'art" ? Qu'est-ce qui te gêne dans les traits du Rust ?

    Citation Envoyé par air-dex Voir le message
    Ce n'est pas parce qu'on dit switch en C++ mais match en Rust que les concepts derrière en sont fondamentalement différents. Il peut y avoir des subtilités, celles de l'implémentation du concept dans le langage, mais au fond c'est la même chose.
    La fonctionnlité du C++ qui se rapproche le plus de match serait plutôt std::visit. Au passage, match fait aussi du destructuring (l'équivalent des structured bindings du C++17).

  6. #86
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2011
    Messages
    706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : juin 2011
    Messages : 706
    Points : 3 424
    Points
    3 424
    Par défaut
    Citation Envoyé par foetus Voir le message
    J'ai travaillé en Objective-C, et l’introspection (tester si une classe a ou pas une méthode) c'est très utile. Mais, on va encore me sortir "en C++, on ne paye pas le surcoût"
    Mais on peut déjà vérifier à la compilation si une fonction membre existe ou pas. Après le C++ ne dispose pas encore d’introspection, mais cela devrait dans quelques années.

    match est quand même vachement plus puissant qu'un switch, ce n'est pas pour rien qu'il y a des propositions d'un mot clef similaire (inspect) qui regroupe std::visit, structured bindings en plus puissant et if constexpr. Au bout d'un moment, il faut voir au-delà du simple sucre syntaxique. (Ce n'est pas passé dans le 20, mais il y aura probablement quelque chose de similaire dans les normes suivantes.)

  7. #87
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2011
    Messages : 124
    Points : 341
    Points
    341
    Par défaut
    Manque plus que la réflection et Java et C# n'auront plus qu'à aller se réhabiller!

  8. #88
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 621
    Points : 3 644
    Points
    3 644
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Et pourquoi veux-tu absolument pouvoir faire de la "POO dans les règles de l'art" ? Qu'est-ce qui te gêne dans les traits du Rust ?
    Je trouve que Rust fait de la POO sans en faire, comme si le langage s'arrêtait au milieu du gué.

    Citation Envoyé par Pyramidev Voir le message
    La fonctionnlité du C++ qui se rapproche le plus de match serait plutôt std::visit. Au passage, match fait aussi du destructuring (l'équivalent des structured bindings du C++17).
    Oui il est vrai que match est bien plus qu'un simple switch de C/C++. Au temps pour moi.

    Citation Envoyé par foetus Voir le message
    Lorsque tu vois que le switch en JavaScript prend en charge les chaînes de caractères. Pour moi ce n'est pas que du sucre syntaxique.
    Lorsque tu vois que le switch en Delphi prend en charge les intervalles de valeurs. Pour moi ce n'est pas que du sucre syntaxique.
    C'est du sucre syntaxique dans le sens où un switch ne sera toujours qu'un if/else if/else déguisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    switch (val) {
        case V0:
            do0();
            break;
     
        case V1:
            do1();
            break;
     
        case V2:
            do2();
            break;
     
        case V3:
            do3();
     
        case V4:
            do4();
            break;
     
        case V5:
        case V6:
            do56();
            break;
     
        // ...
     
        case VN:
            doN();
            break;
     
        default:
            doDefault();
            break;
    }
     
    // Pareil
     
    if (val == V0) {
        do0();
    } else if (val == V1) {
        do1();
    } else if (val == V2) {
        do2();
    } else if (val == V3) {
        do3();
        do4();
    } else if (val == V4) {
        do4();
    } else if (val == V5 || val == V6) {
        do56();
    }
    // ...
    else if (val == VN) {
        doN();
    } else {
        doDefault();
    }
    Qui n'a jamais réécrit une boucle if en boucle switch, et vice-versa ?

    On en revient au fait d'apprendre de la syntaxe ou des concepts et leurs implémentations dans des langages.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  9. #89
    Membre expérimenté
    Profil pro
    retraité
    Inscrit en
    décembre 2010
    Messages
    562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2010
    Messages : 562
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Qt est disponible sous licence LGPL. Donc à moins de modifier Qt ou de compiler en statique tu peux utiliser la version gratuite et open source de Qt dans un projet pro. Certains outils intéressants comme le Qt Quick Compiler (pour compiler tes fichiers QML et ainsi gagner en performance) sont désormais disponibles dans la version gratuite. La version gratuite de Qt peut convenir à beaucoup de projets pro, enfin je pense.

    Le comparatif est disponible ici : https://www.qt.io/download
    En fait c'est assez simple, tu as le droit de faire une liaison statique, ceux qu'impose la LGPL c'est de permettre à l'utilisateur de changer la version de Qt dans ton soft, donc en liaison dynamique tu changes les dlls (sous windows).
    Pour la liason statique il faut juste que le développeur offre la possibilité à l'utilisateur de faire la liaison statique avec une autre version de Qt (même ABI bien sûr).

    Là ou cela est compliqué c'est pour l'embarqué/mobile, imagine un constructeur qui laisse changer le logiciel...par contre à ce niveau y a un biais juridique sur qui est l'utilisateur, vous qui vendez le matériel ? ou l'utilisateur final ?

    Il y a avait eu une vidéo qui expliquait cela pour du matériel médical et la LGPL...

    L'inconvénient avec la licence Qt c'est la fait qu'il faille payer avant de démarrer un projet. Un projet qui démarre en GPL/LGPL ne peut pas ensuite basculer en commercial. De plus le prix est donné par mois et non pas pour un achat de licence final (on paye la version Qt 5.13 une fois et on fait ce que l'on veut avec). C'est surtout cette partie qui est compliqué avec Qt. Et à 4500 euros/an c'est cher...

  10. #90
    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 : 895
    Points
    895
    Par défaut
    Je rappelle à tous le monde que cette discussion porte sur les nouveautés de C++20 et non sur savoir qui est le mieux entre C++ et C#/Java. Recentrons un peu le débat.

  11. #91
    Membre expérimenté
    Profil pro
    retraité
    Inscrit en
    décembre 2010
    Messages
    562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2010
    Messages : 562
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par Matthieu76 Voir le message
    Je rappelle à tous le monde que cette discussion porte sur les nouveautés de C++20 et non sur savoir qui est le mieux entre C++ et C#/Java. Recentrons un peu le débat.
    ça diverge, et dix ça fait beaucoup (Desproges je crois)

  12. #92
    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 : 895
    Points
    895
    Par défaut Les coroutines c'est trop bien !!!!!!!
    Et mais faite je viens de me rendre compte les coroutines ça déchire du feu de dieux !

    Comment cela se fait-il que tous les languages n'ont pas ce "composant" d'implémenter ? Ça a l'air tellement pratique sur des models MVC ou MVVM pour dissocier l'affichage du reste ! Je vois déjà tellement bien comment l'intégrer à mon code existant, j'ai trop hâte de C++20 sorte !!!

  13. #93
    Expert confirmé

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

    Informations forums :
    Inscription : février 2006
    Messages : 2 314
    Points : 4 563
    Points
    4 563
    Par défaut
    je ne parlerai que d'un papier : http://www.open-std.org/jtc1/sc22/wg...19/p1754r0.pdf
    pour une fois qu'il y a un papier concret sur ce que je décris depuis des années dans l'absence de cohérence dans le comité c++ ...

    y a pas à dire, je comprends vraiment pourquoi les gens ne veulent plus en faire.

  14. #94
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2013
    Messages
    6 354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mars 2013
    Messages : 6 354
    Points : 154 783
    Points
    154 783
    Par défaut Le comité ISO C++ a finalisé la nouvelle version du langage C++ 20
    Le comité ISO C++ a proposé une feuille de route pour C++ 23 et finalisé la nouvelle version du langage C++ 20,
    la norme devrait être publiée dans les mois à venir

    La dernière réunion du comité ISO C++ s’est tenue à Prague, en République tchèque. Durant cette réunion, le comité a fait des ajouts au brouillon de C++ 20 et a opté pour l'envoyer au Draft International Standard (DIS) pour approbation finale et publication. Sur le plan de la procédure, il est possible que le DIS soit rejeté, mais en raison des procédures et processus du comité, il est très peu probable que cela se produise. Cela signifie que le développement de C++ 20 est terminé, et dans quelques mois la norme sera publiée.

    Lors de la réunion, les modifications et ajouts suivants au projet C ++ 20 :
    • Amélioration de la reconnaissance contextuelle du « module » et de « l'importation » pour permettre aux outils non compilateurs tels que les systèmes de génération de déterminer plus facilement les dépendances de génération.
    • Ajout de plusieurs nouveaux algorithmes de classement.
    • Ajout de ranges::ssize.
    • Affinage de la signification de static et inline dans les interfaces de module (P1779 et P1815).
    • Résolution de nombreux problèmes de langage et de bibliothèque de base et amélioration substantielle des spécifications.

    Les éléments suivants sont des fonctionnalités clés dans C++20 :
    • Les Modules.
    • Les Coroutines.
    • Les Concepts.
    • Les Ranges.
    • Les constexprification: constinit, consteval, std::is_constant_evaluated, constexpr allocation, constexpr std::vector, constexpr std::string, constexpr union, constexpr try and catch, constexpr dynamic_cast and typeid.
    • std::format("For C++{}", 20)
    • operator<=>
    • Macros de test de fonctionnalités.
    • std::span
    • std::source_location.
    • std::atomic_ref.
    • std::atomic::wait, std::atomic::notify, std::latch, std::barrier, std::counting_semaphore, etc.
    • std::jthread and std::stop_*.



    Comme l’explique Herb Sutter, président du comité de normalisation ISO C++, 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. Il existait jusque-là trois fonctionnalités de ce type qui permettent aux développeurs de créer leurs propres mots de pouvoir en (a) donnant un nom défini par l'utilisateur en (b) quelque chose dont l'implémentation est cachée, explique Sutter. Ce sont : la variable (qui encapsule la valeur actuelle), la fonction (qui encapsule le code et le comportement) et la classe (qui encapsule les deux pour délivrer un ensemble d’états et de fonctions).

    Même des fonctionnalités majeures telles que les Modèles constituent des moyens de décorer ou de paramétrer ces trois fonctionnalités fondamentales. À ces trois, est ajoutée maintenant une quatrième, les Modules qui encapsulent les trois pour en livrer un ensemble. Les Coroutines quant à elles, sont des fonctions qui peuvent suspendre et reprendre leur exécution tout en conservant leur état. L'évolution en C++ 20 va encore plus loin. Le terme Coroutines est inventé par Melvin Conway. Il l'a utilisé dans sa publication pour la construction d'un compilateur en 1963. Cette fonctionnalité existe également dans les langages comme Python. L'implémentation spécifique de Coroutines en C++ est un peu intéressante. Au niveau le plus élémentaire, il ajoute quelques mots-clés à C++ comme co_return, co_await, co_yield ainsi que des types de bibliothèques qui fonctionnent avec eux. Une fonction devient une coroutine en ayant une de ces fonctions dans son corps.

    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.

    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 std::vector 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 et constexpr std::string.

    Au cours de cette réunion, le comité a également adopté un plan pour C ++ 23, qui inclut la hiérarchisation d'une bibliothèque standard modulaire, le support de bibliothèque pour les coroutines, les exécuteurs et la mise en réseau. Elle est prévue à Varna (en Bulgarie).

    Nom : CPP.png
Affichages : 16753
Taille : 260,2 Ko

    Évolution du langage

    Evolution Working Group Incubator (EWGI) Progress

    L'incubateur EWG s'est réuni pendant trois jours à Prague et a examiné et commenté 22 articles pour C ++ 23. 10 de ces documents ont été transmis à Evolution, éventuellement avec quelques révisions demandées. Notamment:
    • Élision de copie garantie pour les objets de retour nommés
    • Déclaration et utilisation généralisées de pack
    • Modèles de membres pour les classes locales


    Plusieurs articles ont reçu beaucoup de commentaires et reviendront à l'incubateur, probablement à Varna:
    • Un opérateur pipeline-rewrite
    • Des paramètres template universels
    • Captures lambda partiellement mutables
    • C ++ devrait prendre en charge la compilation just-in-time

    Concernant les paramètres template universels, imaginez-vous essayer d'écrire une métafonction pour apply :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <template <class...> class F, typename... Args>
    using apply = F<Args...>;
    template <typename X>
    class G { using type = X; };
    static_assert(std::is_same<apply<G, int>, G<int>>{});// OK

    Dès que G essaie de prendre n'importe quel type de NTTP (paramètre de template non-type) ou un paramètre de template-template, apply devient impossible à écrire; nous devons fournir des types de paramètres analogues pour chaque combinaison de paramètres possible:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template <template <class> class F>
    using H = F<int>;
    apply<H, G>// error, can't pass H as arg1 of apply, and G as arg2

    La solution proposée ? Un moyen de spécifier un paramètre template vraiment universel qui peut se lier à tout ce qui peut être utilisé comme argument template. Appelons le template auto. « La syntaxe est la meilleure que nous puissions trouver; mais il existe de nombreuses façons inexplorées d'orthographier un tel paramètre template ». Par exemple :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <template <template auto...> 
    class F, template auto... Args>
    using apply = F<Args...>;
    apply<G, int>;// OK, G<int>
    apply<H, G>;// OK, G<int>

    Le nouveau paramètre template universel introduit des généralisations similaires à l'universel auto NTTP ; afin de permettre le pattern-matching sur le paramètre, les classes template doivent également pouvoir être spécialisées sur le type de paramètre:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    template <template auto>
    struct X;
     
    template <typename T>
    struct X<T> {
    // T is a type
    using type = T;
    };
     
    template <auto val>
    struct X<val>&nbsp;: std::integral_constant<decltype(val), val> {
    // val is an NTTP
    };
     
    template <template <class> F>
    struct X<C> {
    // C is a unary metafunction
    template <typename T>
    using func = F<T>;
    };

    Source : Rapport du comité C++
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  15. #95
    Invité
    Invité(e)
    Par défaut
    Ah oui, quand même. C'est un nouveau langage en fait.

  16. #96
    Expert confirmé

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

    Informations forums :
    Inscription : février 2006
    Messages : 2 314
    Points : 4 563
    Points
    4 563
    Par défaut
    en tout cas, visiblement le problème de syntaxe de c++ ne pose pas de problème qu'à moi, vu la proposition epochs : http://www.open-std.org/jtc1/sc22/wg...0/p1881r1.html

  17. #97
    Membre extrêmement actif
    Homme Profil pro
    Consultant Ingenierie mécanique
    Inscrit en
    mars 2006
    Messages
    1 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Ingenierie mécanique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2006
    Messages : 1 248
    Points : 2 863
    Points
    2 863
    Par défaut
    toutes ces nouvelles fonctionnalités ne vont t'elles pas compliquer un peu plus les compilateurs, voir comme l'abus des templates creer des temps de compilation hyper long ?
    peut t'il y avoir un impact perf ?

    la feature "module" c'est comme les imports en java ou en C# ?

  18. #98
    Membre actif
    Profil pro
    Inscrit en
    février 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : février 2005
    Messages : 55
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par onilink_ Voir le message
    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.
    Moi je suis vite passé au C# Après mes études. Justement parce que je trouve que c'est un bon langage, élégant etc... Bref en fait les mêmes arguments que toi mais pour C# au lieu de C++. Et durant mes études j'ai appris à programmer avec c++ , et j'ai du faire du c, du java et accessoirement on a également vu toute une floppée de languages "exotiques" (haskell, etc...).
    Alors ça fait longtemps que j'ai plus fais de c++ et je m’intéresse pas trop aux nouveautés même si je suis l'actualité, mais quand je vois les examples de code rien que la synthaxe me fait peur et je la trouve pas élégante pour un sou.
    Néanmoins ça m’intéresse d'avoir un avis de quelqu'un qui aime le c++ et donc en quoi le trouve-tu élégant, bon, etc... ?

    J'essaie de me tenir vaguement au courant sur ce qui peut se faire comme langage mais le nouveau c++ ne m'a jamais attiré, seul Rust récemment a attiré mon attention et j'ai commencé à lire le bouquin, du coup je pense complètement laisser tomber le c++ (ou du moins l'espoir que j'avais de m'y (re)mettre). (Ça me fait penser à une vidéo que j'ai vue récemment sur un top top10 des "jeux de société qu'on aurait voulu aimé", je pense qui si c'était une vidéo sur les langages de programmation alors c++ arriverait en tête pour moi. J'aurais vraiment voulu l'aimer mais non j'y arrive pas)

    Citation Envoyé par kilroyFR Voir le message
    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).
    Je vois pas en quoi ne pas savoir lire du code CPP est une tare, surtout si c'est pas le langage de programmation pro !(vous êtes passé c# d'après ce que j'ai compris)


    Sinon je vois pas en quoi il faut absolument passer par le c/c++ (qui sont en fait 2 langages très différent faut le rappeler) pour comprendre les notions de mémoire etc... On peut très bien le faire en c# également, y'a pas forcément besoin de pointeurs et de leur syntaxe c++. Je trouve le discours condescendant envers les nouveaux dev qui ne font pas du c++ et qui du coup seraient automatiquement des "sous-développeurs" justement sous le seul prétextes qu'ils n'ont pas fait de c++.
    Le truc que je remarque par contre, c'est vrai, bcp de devs (c#) n'ont pas fait d'études d'info mais viennent d'autres filières avec parfois une formation courte en dev. Et là effectivement il y a beaucoup de notions sur ce qu'est un ordi, un langage de prog et comment le tout fonctionne qui sont passé à la trappe. Mais rien qui ne peut pas être apris par la suite, et donc à vous d'apprendre aux nouveaux les concepts si ils ne les ont pas.

    ps: en bonus pour ceux qui font du c#, je vous recommande l'excellent Jamie King sur youtube qui justement explique bien les notions de c# et décortique certaines syntaxes pour montrer que rien n'est magique mais plutot bien pensé .

  19. #99
    Membre chevronné Avatar de onilink_
    Profil pro
    Inscrit en
    juillet 2010
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : juillet 2010
    Messages : 478
    Points : 1 948
    Points
    1 948
    Par défaut
    Citation Envoyé par zoonel Voir le message
    Moi je suis vite passé au C# Après mes études. Justement parce que je trouve que c'est un bon langage, élégant etc... Bref en fait les mêmes arguments que toi mais pour C# au lieu de C++. Et durant mes études j'ai appris à programmer avec c++ , et j'ai du faire du c, du java et accessoirement on a également vu toute une floppée de languages "exotiques" (haskell, etc...).
    Alors ça fait longtemps que j'ai plus fais de c++ et je m’intéresse pas trop aux nouveautés même si je suis l'actualité, mais quand je vois les examples de code rien que la synthaxe me fait peur et je la trouve pas élégante pour un sou.
    Néanmoins ça m’intéresse d'avoir un avis de quelqu'un qui aime le c++ et donc en quoi le trouve-tu élégant, bon, etc... ?

    J'essaie de me tenir vaguement au courant sur ce qui peut se faire comme langage mais le nouveau c++ ne m'a jamais attiré, seul Rust récemment a attiré mon attention et j'ai commencé à lire le bouquin, du coup je pense complètement laisser tomber le c++ (ou du moins l'espoir que j'avais de m'y (re)mettre). (Ça me fait penser à une vidéo que j'ai vue récemment sur un top top10 des "jeux de société qu'on aurait voulu aimé", je pense qui si c'était une vidéo sur les langages de programmation alors c++ arriverait en tête pour moi. J'aurais vraiment voulu l'aimer mais non j'y arrive pas)
    Pour être honnête, je pense que si je devais reprendre le dev de zéro en 2020, j'apprendrais probablement plus Rust que C++.
    J'aime énormément la philosophie de C++ et le langage en lui même mais il y a quand même un point noir sur le tableau: il reste trop de choses de C et C++98 (parce qu'il faut garder une retro compatibilité, Rust n'a pas ce soucis, étant jeune) qui rendent C++ bien moins moderne que ce qu'il pourrait être.

    Pour ce que j'aime du C++ moderne:
    - le langage n'est pas explicitement désigné en prenant les utilisateurs pour des cons. Des choses comme les pointeurs ne sont pas cachés sous un autre nom avec moins de features juste parce que dans l'imaginaire collectif "pointeur == compliqué" (ce qui est faux bien entendu).
    - sur le même principe il n'y a pas de GC, mais des pointeurs intelligents, qui IMO sont beaucoup plus pratiques (et applicables dans d'autres domaines que juste gérer la mémoire), mais surtout cela permet d'avoir une durée de vie définie sur nos objets, et la construction/destruction est bien plus simple au final.
    - une grosse partie de la philosophie de C++ c'est "ce qu'on peut faire à la compilation, on le fait a la compilation", et ça permet d'avoir des objets pratiques comme unique_ptr qui vont avoir absolument zéro overhead, mais en plus ça permet aussi de voir pas mal d'erreurs a la compilation, et ne pas attendre que ça pète au runtime. Et sur ce point Rust a l'air vraiment génial avec son borrow checker.
    - je trouve tout le principe des templates et ce que l'on peut en faire complètement génial. Je sais pas si tu as déjà vu les patterns genre CRTP ou encore le polymorphisme statique, je trouve juste ça très élégant en plus d'être pratique (et très performant). Les templates c'est vraiment très puissant (il y a qu'a voir la lib standard, et boost), et on à rarement vu autant de possibilités dans d'autres langages, même si j'ai cru comprendre qu'en Rust il y avait de quoi faire des choses équivalentes, peut être plus facilement.
    - chaque nouveau standard nous amène des outils incroyables, toujours plus puissants, et qui réparent petit à petit tous les problèmes majeurs du langage

    Après y a aussi tous les trucs obvious qui font que personnellement, je préfère un langage natif à un langage qui tourne dans une VM.
    On comprend mieux ce qu'on manipule, ça consomme moins, ça permet d'utiliser des outils plus "standards"... et en C++ on profite quand même de tout l'écosystème qu'il y a déjà autour de C (outils, bibliothèques), d'autant que moi je suis sous Linux et l'OS est vraiment très adapté à ce niveau.

    Néanmoins, C++ n'est vraiment pas un langage safe (même si on suit beaucoup de règles, comme les C++ core guideline etc qui permettent de grandement limiter la casse), et je considère perso que ce n'est pas du tout un bon choix dans tout domaine qui nécessite du code vraiment safe (genre serveurs). Moi je développe un jeu donc ça ne me pose pas trop de problèmes, mais dans certains domaines il faut vraiment oublier le C++.

    Bon, j'oublie probablement plein de choses, mais ça te permettra de voir mon ressentis général sur la chose je pense

    Par contre j'ajouterais que savoir programmer en C++, ça ne se fait pas en quelques années d'études. J'ai fait genre 4 ans de C++ a la fac, et mon niveau était vraiment lamentable (et celui de mes profs encore pire) malgré le fait que je pratiquais pas mal (j'avais l'impression d'être bon, mais la suite m'a montré que non).
    Par contre quand je suis allé bosser, et que j'ai rencontré des personnes très compétentes, dont une personne qui maîtrise vraiment le langage, ça a changé beaucoup de choses et mon niveau a été propulsé d'un coup, bien plus en très peu de temps qu'en toutes mes années d'étude cumulées.
    Et je pense que c'est le même problème pour la plupart des langages quand on étudie, mais a mon avis C++ est l'un des pires à ce niveau, car tout le monde pense savoir le connaître ou le maîtriser... sans savoir en faire, en fait.
    C++ est un langage difficile a apprendre en profondeur, mais pas du tout pour les raisons que la plupart des étudiants pensent (pointeurs, gestion de la mémoire, bas niveau).
    Des tutos de pixel art: https://twitter.com/OniMille

  20. #100
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 621
    Points : 3 644
    Points
    3 644
    Par défaut
    @VDD : le hic est que Rust ne nourrit pas encore son homme. Ce ne sont pas les technos sympas qui manquent. Par contre elles sont rarement présentes en masse dans les offres d'emploi.

    Pour prendre un autre exemple, plus axé GUI. J'adore QML, mais si je devais recommencer je le laisserai complètement de côté au profit de CSS que je n'aime pas et que je trouve archaïque au possible. Je ferai cela uniquement parce qu'il ne faut généralement pas compter sur QML pour trouver un boulot permettant de vivre du développement. Par contre CSS c'est pourri, mais ce ne sont pas les offres qui manquent. Heureusement que Sass ("SCSS") est digeste et peut ainsi représenter un bon compromis.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

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