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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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...

  2. #2
    Membre très actif 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
    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.

  3. #3
    Membre éclairé Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    611
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 611
    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)...

  4. #4
    Membre actif
    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
    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 :


  5. #5
    Membre très actif
    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 : 56
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    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).

  6. #6
    Invité
    Invité(e)

  7. #7
    Membre très actif
    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 : 56
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    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.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    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 .

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    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.

  10. #10
    Membre éclairé Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    611
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 611
    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?

  11. #11
    Membre très actif
    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 : 56
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 476
    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.

  12. #12
    Membre éclairé Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    611
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 611
    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#...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    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é .

  14. #14
    Membre extrêmement actif Avatar de air-dex
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 707
    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

  15. #15
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    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 772
    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.

  16. #16
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    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 : 760
    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.)

  17. #17
    Membre éclairé
    Profil pro
    retraité
    Inscrit en
    Décembre 2010
    Messages
    864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 864
    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...

  18. #18
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    9 543
    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 : 9 543
    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 : 20748
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> : 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

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

  20. #20
    Membre extrêmement actif

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    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

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