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

  1. #81
    Membre expérimenté
    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é
    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
    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
    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 :oops:) 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é
    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
    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
    Manque plus que la réflection et Java et C# n'auront plus qu'à aller se réhabiller!

  8. #88
    Membre expert
    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 éclairé
    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é
    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 éclairé
    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é
    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
    Membre expert
    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

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


    É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
    Expert confirmé
    Ah oui, quand même. C'est un nouveau langage en fait.

  16. #96
    Membre expert
    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