IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Henrique Bucher : « C++ aujourd’hui est comme Fortran : il a atteint ses limites »


Sujet :

C++

  1. #21
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Points : 26
    Points
    26
    Par défaut Il prêche pour sa paroisse comme on dit.
    Je ne remets pas en cause ses arguments, le gars à l'air de s'y connaître vachement plus que moi.

    Toutefois, je mettrais en exergue que le dit-gars parle de domaines très pointus (trading hyper fréquence, communication à très (très haut débit)), qui ne correspondent pas à l'utilisation du C++ que doivent faire 99% des développeurs dans ce langage.

    Effectivement j'imagine qu'un programme écrit dans un langage "générique" exécuté sur du matériel "générique" (CPU et GPU) ne permet pas de suivre le rythme qu'un développement "matériel" (fpga) spécifique aura.

    Heu, c'est pas un peu une évidence ça ?

  2. #22
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Citation Envoyé par foetus Voir le message
    là où le bât blesse , c'est que le C++ moderne (C++14, C++17, C++19, C++22 et le brouillon C++11) en est rempli: exemple, unique_ptr, weak_ptr, auto_ptr...

    Donc sans template tu retombes en C++03
    Les conteneurs, les algorithmes, les string, les streams... ça fait beaucoup de template en C++03. Au point que beaucoup auraient du mal a donner des exemples de classes de la SL qui ne sont pas dans la STL (voire qui ne connaissent pas la différence entre ces 2 termes historiques)

    Donc sans template, on ne retombe pas sur du C++03 ou du C++98... on retombe sur du C

    Au final, il critique pas mal le C++ "moderne"... sur des points qui ne sont pas moderne du tout. (D'ailleurs, tu as fait l'erreur : tu as cite auto_ptr qui est du C++98/03).
    D'ailleurs, c'est ce qui me gêne : ses critiques sont tout a fait fondées, personne ne le nie. Mais elles ne sont pas liées aux évolutions récentes du C++.

  3. #23
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Je trouve que l'intervention de cet ingénieur n'est rien d'autre qu'une énième intervention dans le sempiternel débat stérile cherchant à déterminer quel langage de programmation a la plus grosse... Certes, le C++ souffre de certains défauts et limitations, mais je vous pose la question: quel langage n'en souffre d'aucun?
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  4. #24
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 959
    Points
    18 959
    Par défaut
    Salut à tous.

    L'opinion d'une seule personne ne fait pas une vérité !

    Pourquoi choisir le langage C++ pour cette activité professionnelle ?
    Est-ce à cause des applications existantes et qui par la suite, on n'a pas voulu se remettre en question ?

    Est-ce que cette personne sait correctement exploiter ce langage dans son contexte professionnel, voire dans la culture de son entreprise ?
    Je doute fortement que cette personne possède toutes les qualités pour bien développer en C++ !!!
    Il se peut aussi qu'il n'a pas le temps de s'y investir, voire même qu'il n'a plus du tout l'envie de le faire.

    Le C++ n'est pas responsable des erreur stratégique de la part de l'entreprise.
    Et cela ne vient en aucune façon remettre en cause les qualité de ce langage.
    Mais venir le comparer à du fortran, c'est un peu trop facile comme argument.

    J'ai déjà vu des usines à gaz où l'on critiquait fortement un langage comme le COBOL.
    J'ai surtout constaté que la personne qui développait, n'avait pas les compétences requises !

    De toute évidence, ce monsieur a besoin d'un système embarqué pour faire du temps réel pour ses traitements très particulier.

    Citation Envoyé par ParseCoder
    Je trouve la critique un peu radicale même si c'est vrai que le C++ est un peu une usine à gaz.
    Votre argument est faux ! Le C++ n'est pas une usine à gaz.
    Je reconnais que ce langage n'est pas facile à maitriser pour des débutants.
    Mais pour cela, il vous faut les compétences requises. Et puis, ce langage n'a rien à voir avec du 'C' !!!

    Citation Envoyé par ParseCoder
    On comprend mieux en lisant le billet original car son argument est surtout pourquoi passer un temps fou à essayer de devenir un gourou du C++, alors qu'en terme de perf le passage à des technos à base de fpga est beaucoup plus intéressant.
    C'est ce que je dis ci-dessus. C'est une erreur stratégique de l'entreprise qui ne remet en aucune façon les excellentes qualités de ce langage.

    Citation Envoyé par Aurelien.Regat-Barrel
    d'autant plus quand il s'agit du trading haute fréquence (qui est assez... particulier quand même).
    Erreur stratégique de l'entreprise !

    Citation Envoyé par Aurelien.Regat-Barrel
    Un langage spécialisé sera toujours plus simple et efficace qu'un langage généraliste. Ca ne veut pas dire que les langages généralistes ont fait leur temps. Enfin, je ne pense pas.
    Je suis du même avis que toi. Si on se trompe de langage pour faire un développement particulier, ce n'est pas le langage qui est en cause.

    Citation Envoyé par sazearte
    C'est l'une des raisons qui m'a poussé à abandonné complètement le c++ il y'a quelques années déjà.
    Tout dépend de ce que tu désires faire avec le C++. Si c'est pour développer un site web, il n'est pas le plus adapté à cela.

    Citation Envoyé par dalfab
    La maîtrise du C++ oblige à en comprendre tous les rouages. L'apprentissage du C++ est de plus en plus long.
    Entièrement d'accord avec toi.

    Citation Envoyé par dalfab
    Et le fortran ou le C ne font pas mieux, peut-être un nouveau langage de bas niveau mieux adapté au multi-processing?
    Arrêtez de comparer des choses qui ne sont pas comparables ! Avez-vous déjà fait du multi-processing avec du fortan ????
    Non, car le fortran qui date des années 1960 ne sait pas faire cela.

    Citation Envoyé par Darktib
    par exemple le fait que deux variables ne désignent pas le même objet en fortran (par définition) permet de meilleures optimisations.
    La notion d'objet n'existe pas en fortran. C'est par l'usage de "common" en fortran que l'on peut associer deux noms de variables à la zone de mémoire.
    --> http://fortran.developpez.com/faq/?page=section8#common

    Citation Envoyé par Darktib
    bah oui, 99% des machines sont programmées en série, ou part fils d'exécutions série exécutés en parallèle (genre GPU).
    C'est quoi ce charabia ???
    Avez-vous au moins la connaissance de ce qu'est [url=https://fr.wikipedia.org/wiki/Machine_de_Turing]la machine de Turing(/url] ? A priori non.
    Tous les ordinateurs fonctionnent selon ce principe, c'est à dire séquentiellement. Donc la réponse est 100% !!!
    Si votre ordinateurs possèdent plusieurs coeurs, voire plusieurs processeurs, cela ne remet pas en cause le principe de la machine de Turing.

    Citation Envoyé par article
    C++ ne peut plus être utilisé parce qu’il est intrinsèquement en série, même dans des systèmes massivement multithread comme les GPU
    C'est sûr, que ce n'est pas avec le langage de base du C++ que l'on peut faire cela.
    Ce sont des API incluent dans la langage C++, qui permettent de découper votre application en tâches pouvant s'exécuter en parallèle.
    Faut-il encore connaitre ces techniques de développement avant de dire que le C++ ne peut pas le faire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Points : 38
    Points
    38
    Par défaut C++ est l'avenir
    Je pense qu'on fait un mauvais procès au C++
    Je suis architecte en informatique, et je code et je conseille des équipes en C# , JAVA J2EE, Pyhton, et en C++ , Qt , ...
    Pour moi le C++ est le seule langage qui permet de partiquer :
    - le multi paradigme : programation fonctionelle, DSL, conception objet, meta programation , générique ....
    - d'avoir un niveau d'abstraction tres eleves (Le programmes sont plus court par rapport à Java ) et de pouvoir optimiser l'exuction
    - il est vraiment universelle : je ne connnais pas une machine sans un compilateur C++, je recompile des fichiers sources de 30 ans
    - Optimisation est sans limite
    Par contre :
    - ce langage étant universelle => apprentissage difficile
    - beaucoup de liberte -> beaucoup de pieges

    Il est possible d'aider une équipe de codeur C++ en n'utilisant que les concepts de Java, pour simplifier l'utilisation du langage C++ :
    -> pas d'écriture de template par l'équipe , ou tres limite
    -> utilisation obligatoire de
    - auto, utilisation des shared_ptr et des unique_ptr , ...
    - pas de delete ou de new dans le programmes
    - pas d'heritage multiple
    - pas de passage de pointeur, etc

    Il manque au langage :
    - Les proprietes, introspection, les packages, programmation par aspect...

  6. #26
    Membre confirmé
    Profil pro
    C Embarqué / C++ Qt
    Inscrit en
    Janvier 2010
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : C Embarqué / C++ Qt

    Informations forums :
    Inscription : Janvier 2010
    Messages : 231
    Points : 648
    Points
    648
    Par défaut
    Citation Envoyé par boumchalet Voir le message
    - pas de delete ou de new dans le programmes
    - pas d'heritage multiple
    - pas de passage de pointeur, etc
    Peut-on vraiment faire un programme sans tout ça ? Sans même passer l'adresse d'une variable à une fonction ?

  7. #27
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Ben oui on peut...
    Si les références ne sont pas interdites (ce qui serait idiot, en C++).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #28
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    On peut très bien. C'est ce que je fais dans la majorité de mon code :
    - Pas de new/delete : à remplacer par vector, make_unique, make_shared...
    - Pas d'héritage multiple : Je suis peu en phase avec ce point de vue, mais je comprend très bien qu'il puisse avoir de l'intérêt avec des développeurs Java
    - Pas de passage par pointeur : Les références sont plus simples et moins risquées à manipuler, et c'est ce qu'un développeur Java manipule par défaut même s'il ne le sait pas.


    Sinon, par rapport à l'avis que j'ai vu plusieurs fois dans le thread, comme quoi l'augmentation de taille du C++ le rend toujours plus difficile à maîtriser : Je suis à la fois d'accord et pas d'accord avec ça. Certes, connaître l'ensemble du langage deviens de plus en plus complexe et long. Mais, et ça va dans le même sens que la réponse précédente, je trouve que le sous-ensemble minimal à connaître pour commencer de manière autonome (sans bien évidemment être un expert) a lui tendance à diminuer, ce qui est une bonne chose.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #29
    Membre expert
    Avatar de Chauve souris
    Homme Profil pro
    amateur (éclairé ?)
    Inscrit en
    Novembre 2005
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Paraguay

    Informations professionnelles :
    Activité : amateur (éclairé ?)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 186
    Points : 3 086
    Points
    3 086
    Par défaut
    Il me semble (il y a longtemps que je n'ai pas touché à ce langage) que le C++ (ou le C) reste incontournable pour la vitesse de l'éxécutable, en particulier dans les jeux. Ca reste toujours vrai ou bien on utilise autre chose ? Il est clair que pour des applis où le temps dépend des doigts des utilisateurs (bureautique, base de données) ou de l'accès loooong au disque dur, d'autres langages, dits de haut niveau, sont plus aisément utilisables.

    Relecture du code. Là aussi si les classes et les fonctions sont bien documentées ça ne devrait pas être un souci. Mais la documentation est une part de temps que ne se donnent pas les développeurs à la bourre, si je peux me permettre ce quasi pléonasme.
    "Toute l'histoire de l'informatique n'a été que l'histoire des systèmes d'exploitations" (Le Manifeste du PC)

  10. #30
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Citation Envoyé par boumchalet Voir le message
    Il est possible d'aider une équipe de codeur C++ en n'utilisant que les concepts de Java, pour simplifier l'utilisation du langage C++ :
    -> pas d'écriture de template par l'équipe , ou tres limite
    -> utilisation obligatoire de
    - auto, utilisation des shared_ptr et des unique_ptr , ...
    - pas de delete ou de new dans le programmes
    - pas d'heritage multiple
    - pas de passage de pointeur, etc.
    Je trouve que c'est dommage de faire l'impasse sur l'héritage multiple, vu que ce concept (appartenant pourtant à la programmation orienté objet) n'est pris en charge que par relativement peu de langages. Toutefois, je comprends tout à fait que les éventuelles complications que cela engendre peuvent rebuter au point qu'on ne s'en sert qu'en dernier recours.

    En revanche, je ne suis en aucun cas familier avec les pointeur intelligent; je ne m'en sers, pour ainsi dire, jamais. Peut-être ai-je tort. Je me demande s'il est possible de réécrire une fonction comme int str2int(std::string str, bool * ok = nullptr) (*) avec des pointeurs intelligents. Des avis sur la question?

    Citation Envoyé par boumchalet Voir le message
    Il manque au langage :
    - Les proprietes, introspection, les packages, programmation par aspect...
    Euh... Là, je dois avouer que je n'ai rien compris à partir du deux-points, sauf la notion de propriétés, peut-être...

    (*) Je sais que c'est un exemple bateau mais je manquais d'inspiration...
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  11. #31
    Nouveau Candidat au Club

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Afghanistan

    Informations forums :
    Inscription : Juin 2003
    Messages : 452
    Points : 0
    Points
    0
    Billets dans le blog
    1
    Par défaut Certainement pas
    J'ai développer un moteur 3D a base de cube comme minecraft , exemple du rendu


    Et je pense sérieusement passé au C++ pour justement les performances et la puissance du langage pour les raisons suivante :
    1) creer des donnees sur la pile d'execution donc pas d'allocation mémoire a faire.
    2) utilisation de bibliotheque de math ultra puissante comme glm
    3) la surcharge des operateurs pour ecrire du code plus simple et lisible qui utilise des vecteurs.
    4) le niveau d'abstraction offert par les templates.
    5) pas de machine virtual a installé , un simple excutable plus facile pour diffuser des programmes.

    Donc non le C++ est pas dépassé pour l'instant le seul truc qui manque c de pouvoir avoir un garbage collector optionnel intégré au langage et de l'introspection.

  12. #32
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Citation Envoyé par VivienD Voir le message
    Je trouve que c'est dommage de faire l'impasse sur l'héritage multiple, vu que ce concept (appartenant pourtant à la programmation orienté objet) n'est pris en charge que par relativement peu de langages.
    Le probleme est surtout que beaucoup ne savent respectent pas le LSP (Liskov substitution principle) sur un héritage simple. Du coup, l’héritage multiple est encore plus souvent mal utilisé que l’héritage simple. D’où la règle implicite d’éviter l’héritage multiple. Mais l’idée est surtout de vouloir éviter les mauvaises utilisations de l’héritage (simple et multiple).

    Citation Envoyé par VivienD Voir le message
    Je me demande s'il est possible de réécrire une fonction comme int str2int(std::string str, bool * ok = nullptr) (*) avec des pointeurs intelligents. Des avis sur la question?
    La fonction n'est pas propriétaire du bool, donc pas de unique_ptr ou shared_ptr. De plus ce paramètre est optionnel, donc pas de référence non plus (ou reference_wrapper). L'utilisation de weak_ptr serait abusif (compteur atomique, besoin de lock), surtout que le bool n'est pas obligatoirement managé par un shared_ptr (ca sera souvent une variable locale).

    En termes de sémantique, ça serait une référence optionnelle. Du coup, ca peut être un std::optionnal<std::reference_wrapper<bool>>. Mais c'est un peu lourd...
    Le pointeur nul est probablement le mieux ici. Cela correspond a un usage accepté (plus ou moins...) : celui de weak pointeur sans compteur de référence (l’équivalent de weak_ptr mais sans shared_ptr). Mais il faut respecter 2 contraintes :

    - considérer qu'un pointeur nu ne transmet pas l'ownership (donc interdit de faire un delete sur un pointeur nu que l'on reçoit. Sauf si c'est explicitement indique que l'on transmet l'ownership, par exemple avec owner<T>)
    - éviter de jouer au con... on s'amuse pas par exemple a appeler cette fonction dans un thread. Ou sur un pointeur qui peut être invalide (dangling).

    Ce type de fonction ne doit être appelée que sur un bool local, pour éviter les problèmes d'ownership ou de lifetime.

    Une autre solution est une surcharge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int str2int(std::string str, bool & ok)
    int str2int(std::string str)
    C'est plus lourd a implémenter (bien que la seconde fonction peut appeler la première), mais comme le bool n'est plus optionnel, on peut utiliser une référence. C'est probablement le plus safe.

    Citation Envoyé par super_navide Voir le message
    Donc non le C++ est pas dépassé pour l'instant le seul truc qui manque c de pouvoir avoir un garbage collector optionnel intégré au langage et de l'introspection.
    J'aime beaucoup l’idée que le GC soit devenu avec le temps un but a chercher et plus un moyen de résoudre un probleme. Comme si le GC était la seule solution a la problématique qu'il essaie (plus ou moins bien...) de résoudre.

    La problématique est la gestion manuelle de la mémoire. Et le C++ a des outils pour gérer cela. En premier lieu les variables locales, qui sont automatiquement libérées a la fin de leur portée. Et surtout le RAII.
    (Et accessoirement, le C++ propose le support des GC http://en.cppreference.com/w/cpp/mem...lector_support ... mais on va éviter de trop en parler, les gens pourraient être tentés de l'utiliser).

    (@VivienD: ne pas connaitre les pointeurs intelligents n'est pas forcement problématique. Par contre, ne pas connaitre le RAII serait problématique. Et les pointeurs intelligents ne sont qu'une application du RAII. Du coup, le probleme avec les gens qui ne connaissent pas les pointeurs intelligents est surtout qu'en général ils savent pas utiliser le RAII et ne savent pas gérer correctement les ressources. Si on ne peut pas utiliser les pointeurs intelligents dans un contexte donnée, mais que l'on gère correctement les ressources, pas de probleme).

    Pour l'introspection, mouais... Le probleme est que c'est une solution de facilité utilisée dans d'autres langages. Et du coup, certains veulent l'utiliser aussi en C++, pour "faire la même chose", même lorsque c'est une mauvaise approche et/ou qu'il existe d'autres approches valides en C++.

  13. #33
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 609
    Points : 188 582
    Points
    188 582
    Par défaut
    Citation Envoyé par VivienD Voir le message
    Je me demande s'il est possible de réécrire une fonction comme int str2int(std::string str, bool * ok = nullptr) (*) avec des pointeurs intelligents. Des avis sur la question?
    Justement, le mécanisme d'exceptions est prévu pour ce genre de cas : le code appelant sera beaucoup plus léger qu'une vérification de ce pointeur… Ce genre de code me rappelle beaucoup trop le C .

    Citation Envoyé par super_navide Voir le message
    le seul truc qui manque c de pouvoir avoir un garbage collector optionnel intégré au langage
    C'est l'objectif des pointeurs intelligents : gérer la mémoire à ta place, s'assurer que les objets sont bien détruits une seule fois, avec une garantie de l'endroit où le destructeur est appelé. La différence avec les ramasse-miettes, c'est que la mémoire est libérée dès que possible, pas lorsque l'algorithme effectue une passe pour vérifier ce qui est encore utilisé ou pas (donc libérer un gros paquet de mémoire d'un coup, ce qui pourrait être plus efficace).

    Sinon, C++11 (la norme) intègre un ramasse-miettes (http://www.open-std.org/jtc1/sc22/wg...2008/n2670.htm), mais à ma connaissance aucun compilateur ne l'implémente…
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  14. #34
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Justement, le mécanisme d'exceptions est prévu pour ce genre de cas : le code appelant sera beaucoup plus léger qu'une vérification de ce pointeur… Ce genre de code me rappelle beaucoup trop le C
    Cela peut effectivement être une solution.

    Cependant, cette fonction est souvent utilisée pour tester si une chaîne est convertible en nombre. Du coup, avoir une conversion invalide n'est plus une "exception", mais une utilisation normale de cette fonction.
    Du coup, même si on propose une fonction sans pointeur (qui peut lancer une exception), je proposerais aussi une fonction qui permet de retourner un bool (sans lancer d'exception).
    Je crois que ce sont 2 use-cases différents.

    En pratique, c'est assez simple a faire, il suffit d'encapsuler l'appel a cette fonction dans 2 fonctions sans pointeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int str2int(std::string const& str) {
        bool ok {};
        const auto result = str2int(str, &ok);
        if (!ok)
            throw std::exception("pas bon...");
        return result;
    }
     
    int str2int(std::string const& str, bool & ok) {
        return str2int(str, &ok);
    }

  15. #35
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par VivienD Voir le message
    En revanche, je ne suis en aucun cas familier avec les pointeur intelligent; je ne m'en sers, pour ainsi dire, jamais. Peut-être ai-je tort. Je me demande s'il est possible de réécrire une fonction comme int str2int(std::string str, bool * ok = nullptr) (*) avec des pointeurs intelligents. Des avis sur la question?


    Euh... Là, je dois avouer que je n'ai rien compris à partir du deux-points, sauf la notion de propriétés, peut-être...

    (*) Je sais que c'est un exemple bateau mais je manquais d'inspiration...

    Citation Envoyé par mintho carmo Voir le message
    La fonction n'est pas propriétaire du bool, donc pas de unique_ptr ou shared_ptr. De plus ce paramètre est optionnel, donc pas de référence non plus (ou reference_wrapper). L'utilisation de weak_ptr serait abusif (compteur atomique, besoin de lock), surtout que le bool n'est pas obligatoirement managé par un shared_ptr (ca sera souvent une variable locale).

    En termes de sémantique, ça serait une référence optionnelle. Du coup, ca peut être un std::optionnal<std::reference_wrapper<bool>>. Mais c'est un peu lourd...
    Le pointeur nul est probablement le mieux ici. Cela correspond a un usage accepté (plus ou moins...) : celui de weak pointeur sans compteur de référence (l’équivalent de weak_ptr mais sans shared_ptr). Mais il faut respecter 2 contraintes :

    - considérer qu'un pointeur nu ne transmet pas l'ownership (donc interdit de faire un delete sur un pointeur nu que l'on reçoit. Sauf si c'est explicitement indique que l'on transmet l'ownership, par exemple avec owner<T>)
    - éviter de jouer au con... on s'amuse pas par exemple a appeler cette fonction dans un thread. Ou sur un pointeur qui peut être invalide (dangling).

    Ce type de fonction ne doit être appelée que sur un bool local, pour éviter les problèmes d'ownership ou de lifetime.

    Une autre solution est une surcharge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int str2int(std::string str, bool & ok)
    int str2int(std::string str)
    C'est plus lourd a implémenter (bien que la seconde fonction peut appeler la première), mais comme le bool n'est plus optionnel, on peut utiliser une référence. C'est probablement le plus safe.

    ici il faut peut-être revoir la façon d'on on a construis la fonction on peut implantée comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     std::optional<int> str2int(std::string & str)
    {
      code pour la transformation et si sa ne marche pas juste faire un return    
    }
    puis a l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    auto myInt = str2int(aString);
    if (myInt){
    le int est valide 
    }
    en ce qui consterne les propriétés il faudra attendre le pour le c++17 voir c++22 pour la surcharge de l’opérateur dot une construction et une utilisation généralisée.

    L'introspection peut être utile dans certains cas mais actuellement elle consomme trop de ressource pour être intégrée au langage.

    Les package avec un vrai système d'importation à la java (avec import) serait un véritable bond en avant pour le lagunage.

    et il ne faut pas oubliée la notion de Concept qui a était retirée de c++17 qui devaient être une grosse évolution pour le c++
    avec tout ça que je ne pence pas que le c++ a atteint ses limites, loin de la

  16. #36
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Moi je ne vois pas l'introspection comme un manque, mais comme une force.
    Au moins on est obligés de concevoir nos applications correctement (dur dur...)
    Non mais sérieusement, qui peut avoir besoin de cette infâmie? (mis à part les GUI, et encore...)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  17. #37
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Citation Envoyé par boero-teyssier Greg Voir le message
    ici il faut peut-être revoir la façon d'on on a construis la fonction on peut implantée comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     std::optional<int> str2int(std::string & str)
    {
      code pour la transformation et si sa ne marche pas juste faire un return    
    }
    +1024. Je suis stupide de ne pas avoir parlé de cette écriture, c'est pourtant celle qui est justement donnée dans le draft de std::optional comme exemple d'utilisation

    Citation Envoyé par dragonjoker59 Voir le message
    Moi je ne vois pas l'introspection comme un manque, mais comme une force.
    Au moins on est obligés de concevoir nos applications correctement (dur dur...)
    Non mais sérieusement, qui peut avoir besoin de cette infâmie? (mis à part les GUI, et encore...)
    Un des use-cases classiques est l’interfaçage avec des langages de script.

    Par contre, personne n'a parlé de la standardisation de l'ABI ? C'est pourtant quelque chose qui est très préjudiciable au C++ (en particulier parce que tous les autres langages qui permettent d’écrire des modules natifs pour les performances, doivent passer par le C et pas le C++, a cause de l'ABI).

  18. #38
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    Un des use-cases classiques est l’interfaçage avec des langages de script.
    En faisant les bindings Python et C# de mon moteur, je n'en ai pas eu besoin...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  19. #39
    Membre extrêmement actif Avatar de nikau6
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Février 2008
    Messages : 394
    Points : 708
    Points
    708
    Par défaut
    Pas mal la classe std::optional. Je ne connaissais pas. C'est du c++ 14 ou 17 je suppose.

    Citation Envoyé par super_navide Voir le message
    Donc non le C++ est pas dépassé pour l'instant le seul truc qui manque c de pouvoir avoir un garbage collector optionnel intégré au langage et de l'introspection.
    Un garbage collector pourrait être pratique dans certains cas, mais il ne faut pas oublier que la gestion manuelle de la mémoire est l'un des points fort du C++ en comparaison avec Java.
    Sinon, ton moteur a un rendu sympa. Beau travail :-)

  20. #40
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par nikau6 Voir le message
    Pas mal la classe std::optional. Je ne connaissais pas. C'est du c++ 14 ou 17 je suppose.
    oui optional fait partie de c++ 17 .

    Citation Envoyé par nikau6 Voir le message
    Un garbage collector pourrait être pratique dans certains cas, mais il ne faut pas oublier que la gestion manuelle de la mémoire est l'un des points fort du C++ en comparaison avec Java.
    l'utilisation d'un GC a la java en c++ n'est à mon avis pas la solution car le problème du java est la consommation en ressources de sont GC donc il fraudait que le GC c++ soit optionnel et activable que dans des cas d'utilisation spécifiques :
    - Compétence technique insuffisant pour garantir la protection contre les fuit mémoire
    - la récupération / migration d'ancien source et que cela demanderait trop jour/homme pour la correction...

Discussions similaires

  1. Réponses: 241
    Dernier message: 26/10/2015, 20h39
  2. Réponses: 50
    Dernier message: 06/04/2010, 11h55
  3. Réponses: 37
    Dernier message: 01/04/2010, 15h17
  4. les assurances c'est comme les boites
    Par yan dans le forum La taverne du Club : Humour et divers
    Réponses: 63
    Dernier message: 05/11/2008, 13h59
  5. [XML]Comment tester que mon fichier XML est comme ceci?
    Par Devil666 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/06/2005, 14h41

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