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

  1. #61
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    C'est une question de point de vue, mais je préfère que cette "isolation" entre low et high-level soit effectuée par le langage, et non pas seulement par la bonne conduite du programmeur. En ce sens, je préfère l'approche Java/JNI ou C#/Pinvoke : au moins, je sais quelles parties du code sont "sensibles".
    Tu oublies l'approche que fait D. Contrairement au C++ ou on est bas niveau de base, mais avec de bonnes pratiques, on peut s'élever, le D est haut niveau de base, mais si on le souhaite, on peut descendre bas niveau.

  2. #62
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Effectivement, il est toujours possible de réduire les risques par de la formations, des audits, des outils, ... Mais tout cela à un coup (financier, délai). Dans mes jeunes années () j'étais aussi convaincu que l'existence de bonnes pratiques était une garantie suffisante. Avec le temps j'ai appris que les bonnes pratiques sont plus souvent contournées que les limitations du langage.
    Je pense que par « bonne pratique », nous entendons deux choses différentes.
    Puisque l'on parle des pointeurs :
    • Par « bonne pratique », il me semble que tu entends « précautions d'usage », comme dans « en C, il est préconisé, lors d'une allocation avec malloc(), de tester si le pointeur est bien assigné, d'écrire l'utilisation dans un bloc if, et d'assigner le pointeur à NULL après l'appel de free() ». C'est effectivement le genre de choses qu'on peut oublier à cause de la fatigue, de l'inattention, d'une flemmingite, …
    • Par « bonne pratique », j'entends « style de codage et outils modernes ». Utiliser shared_ptr à la place des pointeurs bruts, c'est juste un truc à savoir, qui ne nécessite pas une attention de tous les instants.

  3. #63
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Florian Goo Voir le message
    Je pense que par « bonne pratique », nous entendons deux choses différentes.
    J'entends par "bonne pratique" des préconisations, que ce soit du style d'écriture, de l'implémentation de pattern ou de l'utilisation de structures/classes (d'ailleurs toutes ces choses me semblent indissociables).

    C'est différent d'une "obligation", qui ne laisse pas d'autre possibilité pour le développeur que de suivre la règle.

    Mais bon, on s'éloigne un peu de la question initiale. Pour moi, je ne suis pas prêt à reprogrammer en 100% C/C++ une application que j'ai fait en Java/JNI ou C#/Pinvoke.

  4. #64
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Moi non plus.

    En C++/CLI, par contre, ça reste à voir.

  5. #65
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par niarkyzator Voir le message
    @Alp Je cherchais pas l'exactitude dans mes propos, j'ai bien lu que le C++ permet de la programmation de haut niveau, simplement j'en ai pas encore fait, je me bas toujours avec mes * et mes new.
    A toi de faire le choix d'apprendre le C++ d'aujourd'hui dès que tu te sens
    Et personnellement, je cherche généralement l'exactitude dans mes propos, pas toi ?

    Citation Envoyé par niarkyzator Voir le message
    Par contre j'ai pas l'impression que C et C++ n'aient que leur syntaxe de commune, ça m'est arrivé plusieurs fois de compiler du C avec g++, sans aller jusqu'a dire que le C est completement inclus dans le C++ (j'en sais rien mais ça me parait plausible), y'a quand même un sacré tronc commun.
    Pour une grande partie du C oui. C'est un des choix qui fait que des gens font du "C/C++". Mais ils ont pu migrer des projets C vers du C++ grâce à ça, enfin y'a pleins de raisons, la majorité étant historiques.

    Citation Envoyé par pseudocode Voir le message
    La différence, c'est le nombre d'endroit ou il est possible de faire ce "passage". Dans une application de 200.000 lignes C++, on peut le faire n'importe quand. Dans une application de 200.000 lignes Java/Jni, on ne peut le faire que dans le code natif JNI. Ca fait moins de code a passer en revue, non ?
    Non. Personnellement, j'ai bossé dans le nucléaire cet été, on avait une bibliothèque C qui récupérait des infos sur un serveur concernant un tokamak. Le truc bien dégueulasse, avec 2 niveaux d'indirection pour les paramètres etc. Elle a été faite il y a des années. On a écrit une plateforme autour de ça (cf ma signature). Le seul endroit sensible de mon code, c'était les appels à ces fonctions C. Tout le reste était fait autour de Boost et Qt. Je n'ai pas 15 ans d'expérience derrière moi hein, j'ai 20 ans. Pourtant les seuls segfaults que j'ai eus étaient dûs à cette fameuse bibliothèque C. Je ne suis pas un génie non plus, donc ça doit être que c'est accessible à tout le monde. Bon la plateforme ne faisait p-ê pas 200 000 lignes, on va plutôt parler d'environ 100 000 LoC.

    Avec le C++ "moderne", toutes les bêtises que j'entends sur le "C/C++" n'ont aucun sens. On est dans le multi-paradigme, on fait que du haut niveau, sauf qu'on a par exemple à causer un peu à une lib C... Ah tiens, comme avec Java et .NET ?

    Citation Envoyé par pseudocode Voir le message
    J'entends par "bonne pratique" des préconisations, que ce soit du style d'écriture, de l'implémentation de pattern ou de l'utilisation de structures/classes (d'ailleurs toutes ces choses me semblent indissociables).

    C'est différent d'une "obligation", qui ne laisse pas d'autre possibilité pour le développeur que de suivre la règle.

    Mais bon, on s'éloigne un peu de la question initiale. Pour moi, je ne suis pas prêt à reprogrammer en 100% C/C++ une application que j'ai fait en Java/JNI ou C#/Pinvoke.
    Dommage pour toi. Et par pitié, pas toi, n'écris pas "C/C++"

  6. #66
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Alp Voir le message
    Non. Personnellement, j'ai bossé dans le nucléaire cet été, on avait une bibliothèque C qui récupérait des infos sur un serveur concernant un tokamak. Le truc bien dégueulasse, avec 2 niveaux d'indirection pour les paramètres etc. Elle a été faite il y a des années. On a écrit une plateforme autour de ça (cf ma signature). Le seul endroit sensible de mon code, c'était les appels à ces fonctions C. Tout le reste était fait autour de Boost et Qt. Je n'ai pas 15 ans d'expérience derrière moi hein, j'ai 20 ans. Pourtant les seuls segfaults que j'ai eus étaient dûs à cette fameuse bibliothèque C. Je ne suis pas un génie non plus, donc ça doit être que c'est accessible à tout le monde. Bon la plateforme ne faisait p-ê pas 200 000 lignes, on va plutôt parler d'environ 100 000 LoC.
    Comme dit précédemment, ce n'est pas le C++ (langage) qui t'assure la sécurité dans ton application. C'est l'utilisation des frameworks Boost et Qt, qui ne sont absolument pas OBLIGATOIRES en C++.

    On en revient a créer un "sur-langage" au dessus du C++ standard officiel. Un sur-langage plus sécurisé, plus propre, ... car il impose l'utilisation des frameworks Boost et Qt qui, eux, sont spécialisés (et donc restrictifs).

    Avec le C++ "moderne", toutes les bêtises que j'entends sur le "C/C++" n'ont aucun sens. On est dans le multi-paradigme, on fait que du haut niveau, sauf qu'on a par exemple à causer un peu à une lib C... Ah tiens, comme avec Java et .NET ?
    Posons la question autrement : "Souhaiteriez-vous reprogrammer en C++/STL/Xlib après des années d'utilisation de C++/Boost/Qt ?"

    Dommage pour toi. Et par pitié, pas toi, n'écris pas "C/C++"
    1. C'est pas moi qui ai écrit le Topic de ce thread.
    2. C'est pas moi qui ai ajouté la méthode "c_str()" dans std::string

    Je déplore tout autant que toi l'amalgame de ces deux langages, mais c'est une réalité. D'ailleurs j'espère toujours une version de C++ qui rompe la compatibilité avec le C... Mais je pense que c'est un voeu pieux, et que seul la création d'un nouveau langage (Vala ?) pourra le réaliser.

  7. #67
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    D'ailleurs j'espère toujours une version de C++ qui rompe la compatibilité avec le C... Mais je pense que c'est un voeu pieux, et que seul la création d'un nouveau langage (Vala ?) pourra le réaliser.
    Vala n'est pas complet à ce niveau. Il lui manque des fonctionnalités par rapport à C++.

    Mais cela existe, ça s'appelle D.

  8. #68
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    C/C++ n'existe pas, mais C∩C++ existe, par contre: Mais dans tous les cas, quand on programme en C∩C++, on suit des paradigmes C, donc question sécurité du code ce n'est pas top.

  9. #69
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Comme dit précédemment, ce n'est pas le C++ (langage) qui t'assure la sécurité dans ton application. C'est l'utilisation des frameworks Boost et Qt, qui ne sont absolument pas OBLIGATOIRES en C++.

    On en revient a créer un "sur-langage" au dessus du C++ standard officiel. Un sur-langage plus sécurisé, plus propre, ... car il impose l'utilisation des frameworks Boost et Qt qui, eux, sont spécialisés (et donc restrictifs).
    Ah non. Le langage C++ en lui-même tel que décrit dans la norme, est très bien. C'est l'utilisation que plus de 50% des gens en font qui est déplorable, à cause du côté historique qui le rapproche du C. Mais je ne me vois pas une seconde réaliser un projet en C si j'ai le choix de le faire en C++. Ce sont deux langages TOTALEMENT différents pour moi. C++ est plus proche de Java que de C, définitivement. Et il ne s'agit pas seulement de Boost et de Qt, mais de tout un écosystème qui a compris que C et C++ étaient totalement différents, à part pour le côté historique. Après, il est vrai que le comité de normalisation a voulu garder la compatibilité C dans une certaine mesure, mais bon. Comme je dis, après, c'est à un programmeur C++ de voir s'il veut faire de la m.... ou s'il veut apprendre le vrai C++. Et ça à part écrire des articles, FAQs, etc, je ne vois pas comment faire d'autre pour les aider.

    Citation Envoyé par pseudocode Voir le message
    Posons la question autrement : "Souhaiteriez-vous reprogrammer en C++/STL/Xlib après des années d'utilisation de C++/Boost/Qt ?"
    Ah non la STL est bieng hein Boost "l'étend" simplement. Beaucoup, certes
    Et Xlib c'est du C

    Mais sinon, je vois ce que tu voulais dire. Et ma réponse est non. Mais ce qui m'énerve, c'est que C++ == le premier que tu mentionnes, i.e le "C/C++" ou "C inter C++" ((c) Medinoc), pour beaucoup de gens. Alors qu'en fait C++ aujourd'hui c'est vraiment le second.

    Citation Envoyé par pseudocode Voir le message
    2. C'est pas moi qui ai ajouté la méthode "c_str()" dans std::string
    Quel coup bas, bah bravo, c'est joli ça tiens

    Citation Envoyé par pseudocode Voir le message
    Je déplore tout autant que toi l'amalgame de ces deux langages, mais c'est une réalité. D'ailleurs j'espère toujours une version de C++ qui rompe la compatibilité avec le C... Mais je pense que c'est un voeu pieux, et que seul la création d'un nouveau langage (Vala ?) pourra le réaliser.
    A qui le dis-tu... Mais bon déjà avec C++0x on aura de quoi se faire plaisir, et ça ne ressemblera vraiment plus à du C

  10. #70
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Alp Voir le message
    Ah non. Le langage C++ en lui-même tel que décrit dans la norme, est très bien. C'est l'utilisation que plus de 50% des gens en font qui est déplorable, à cause du côté historique qui le rapproche du C.
    Ok. Je modifie donc ton sur-langage en "C++/guide de bonnes pratiques de Alp/Boost/QT"


    Et Xlib c'est du C
    Bah, C ou C++, c'est pareil.


  11. #71
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    C'est pas moi qui ai ajouté la méthode "c_str()" dans std::string
    en même temps, la methode getByte existe aussi dans les String Java, et permettent tout autant de faire un accès en dehors des limites du tableau, et j'ai déjà reussi à avoir des segfault (des vrai hein, pas des exception) en utilisant java.nio, qui est tout a fait standard

  12. #72
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par bafman Voir le message
    en même temps, la methode getByte existe aussi dans les String Java, et permettent tout autant de faire un accès en dehors des limites du tableau, et j'ai déjà reussi à avoir des segfault (des vrai hein, pas des exception) en utilisant java.nio, qui est tout a fait standard
    Certes, utiliser une VM/librairie ne met pas à l'abri des bugs... surtout ceux de la VM/librairie.

    NB: la méthode String.getBytes() de java renvoie une référence sur un tableau (byte[]) et pas un pointeur sur un zone mémoire. En ce sens, cela reste cohérent avec le reste du langage Java.

  13. #73
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 390
    Points : 1 182
    Points
    1 182
    Par défaut
    « En tant que développeur, envisageriez-vous de faire un petit voyage dans le passé, disons dans les années 1980, pour retrouver les langages de programmation d'avant ? »

    La question peu ouvrir un grand débat, personnellement j'ai commencer par du c et de l'assembleur, puis du c++ (déjà haut niveau par rapport a l'assembleur a l'époque) pour finir sur du java plus par nécessité professionnelle que par gout. Récemment j'ai eu l'idée étrange de recoder un projet de solveur de sudoku (écrit en c et en java) en assembleur 16 bit.
    Ca fait un choque de remettre les mains dedans !

    Cela m’a pris un temps considérable pour un gain de perf processeur ridicule voir négatif (par contre ca tien en quelques octets - moins de 100 !)
    Je me suis rendu compte du chemin, mais je dois dire que sur le projet j’ai pris mon pied. Après pour du multithreading ou du socket, je passerai sur du C sans problèmes mais serait certainement un peu plus long qu’en java, pour moi du moins.

    Enfin pour avoir un peu de rentabilité et structurer le développement en équipes, l’objet a des bon cotés. Le Java aussi avec le JNI pour garder la forme en C. Chacun ses gouts!

  14. #74
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Points : 50
    Points
    50
    Par défaut
    J'ai passé 2 ans en studio de développement en C++ avant de partir bosser en .NET et C# depuis 5 mois. Je n'ai aucune envie de repartir dans mes problématiques C++ et j'apprécie le temps laissé par .Net pour mieux penser le fonctionement du software et prévoir à l'avance les cas à problème. Ne pas avoir à gérer un tas de choses permet de bien libérer l'esprit, le debugging est moins une torture.
    bon moi j'étais un cas extrême, environnement C++ sous Emacs avec 6 plateformes différentes dont Windows et AIX 5.3. Pas de complétion auto, pas de recherche avancée, parfois obligé de débugger en remote avec gdb, à la très ancienne.

  15. #75
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    De quel(s) compilateur(s) disposais-tu ?

  16. #76
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par Alp Voir le message
    Ah non. Le langage C++ en lui-même tel que décrit dans la norme, est très bien. C'est l'utilisation que plus de 50% des gens en font qui est déplorable, à cause du côté historique qui le rapproche du C.
    Ça, c'est faux. C++ n'a pas de vue d'ensemble, c'est un C patché et repatché tant et si bien que dans la pratique ça n'a plus rien à voir avec C.

    Il y a de très nombreuses fonction dans le C++ qui interagissent très mal entre elles. Par exemple, si l'on veux faire du calcul vectoriel grâce à la surcharge des opérateurs.

    Qu'est ce que tu vas utiliser comme retour ?

    Ou bien tu le fais par valeur, mais dans ce cas tu pourris tes perfs en faisant des copies dans tous les sens. Ou bien tu retournes un smart pointer mais c'est le même combat (et en plus, c'est pas vraiment le langage mais une surcouche). Ou bien tu retournes une référence et ta gagné la fuite de mémoire (tu n'as acun moyen de l'esquiver).

    La seule façon de t'en sortir, c'est les expressions templates. Mais la encore, les templates ne C++ sont super mal foutues et la plupart du temps interagissent mieux avec d'autres éléments du langage.

    Et alors que dire des gros gags du type Move Contructor ou autres classes de traits improbable servant retrouver les types en metaprogrammation (alors que le compilo sait parfaitement quel est le type, puisqu'il crie au scandale quand ce n'est aps le bon).

    En tant que programmeur C++ moderne, tu devrait regarder un peu ce qu'Alexandrescu dis à ce popros si les miens ne te semblent pas convaincants.

    Tout le problème du C++, c'est qu'on est par défaut bas niveau et on s'élève grâce aux outils fournis par le langage (mais surtout car on en a besoin). Cette approche est en place, non pas parce qu'elle est pertinente, mais parce qu'elle permet la compatibilité avec C.

    Une approche inverse est nettement plus pertinent : on est haut niveau, et on peut descendre bas niveau si besoin est.

    Autant je reconnais des qualité au C++ que n'ont pas ses confrère C# et Java, autant en déduire que C++ est bien foutu, c'est réellement excessif.

  17. #77
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    En tant que programmeur C++ moderne, tu devrait regarder un peu ce qu'Alexandrescu dis à ce popros si les miens ne te semblent pas convaincants.
    Alexandrescu ( que alp connait j'en suis sur), est à l'origine justement des traits dont tu parles et d'un framework sur la move semantic hein.
    Les derniers écrits d'alexandrescu critiquant quelque chose était sur les iterator je te laisse me montrer ce qu'il dit sur le Gag de la move semantic comme tu dis .

  18. #78
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    Ça, c'est faux. C++ n'a pas de vue d'ensemble, c'est un C patché et repatché tant et si bien que dans la pratique ça n'a plus rien à voir avec C.
    Ah oui, moi aussi je sais lancer des phrases qui n'ont aucun fondement, sans argument ! Genre : "toutes les poules sur la planète terre sont vertes !". Pas mal celle-là non ? Argumente et ensuite on verra

    Citation Envoyé par deadalnix Voir le message
    Il y a de très nombreuses fonction dans le C++ qui interagissent très mal entre elles. Par exemple, si l'on veux faire du calcul vectoriel grâce à la surcharge des opérateurs.
    Et ? Quel est le soucis ? Perso, j'ai déjà écrit de plusieurs façon des libs persos pour le calcul vectoriel, et plus généralement pour l'algèbre linéaire et l'analyse, j'ai pas eu de soucis. Ca m'intéresse, donc détaille !

    Citation Envoyé par deadalnix Voir le message
    Qu'est ce que tu vas utiliser comme retour ?

    Ou bien tu le fais par valeur, mais dans ce cas tu pourris tes perfs en faisant des copies dans tous les sens. Ou bien tu retournes un smart pointer mais c'est le même combat (et en plus, c'est pas vraiment le langage mais une surcouche). Ou bien tu retournes une référence et ta gagné la fuite de mémoire (tu n'as acun moyen de l'esquiver).

    La seule façon de t'en sortir, c'est les expressions templates. Mais la encore, les templates ne C++ sont super mal foutues et la plupart du temps interagissent mieux avec d'autres éléments du langage.
    Ou alors, t'utilises des trucs bien pensés, genre NT2 (nt2.sf.net), uBlas, MTL, Blitz++, et j'en passe. Je doute que tu puisse faire mieux.
    Les expression templates c'est LA façon ultime et efficace, c'est tout. Et les templates sont au pire un peu tricky desfois, mais c'est à toi de voir si tu veux utiliser leur puissance ou alors avoir une philosophie du genre "je me contente du strict minimum", le genre de philosophie qui mène loin dans la vie. Comme toute chose, l'apprentissage des templates, c'est un investissement, et celui-là il rapporte gros, donc à toi de voir.
    Et même sans ça, tu peux t'en sortir très bien, avec de la move semantic, ou par valeur avec des RVO/NRVO, etc... Y'a pas mal de billets sur cpp-next.com sur tout ça

    Citation Envoyé par deadalnix Voir le message
    Et alors que dire des gros gags du type Move Contructor ou autres classes de traits improbable servant retrouver les types en metaprogrammation (alors que le compilo sait parfaitement quel est le type, puisqu'il crie au scandale quand ce n'est aps le bon).
    Ca ne sert pas à retrouver des types, ça sert à faire des calculs sur les types. C'est le principe de la métaprogrammation. Je te conseille de regarder par exemple Haskell/OCaml/Coq/autres qui vont assez loin dans ce sens aussi. Je te rappelle que les templates sont turing-complete, via le moteur de templates des compilos. Les templates SONT EQUIVALENTS à une machine de turing ! Ou au lambda-calcul, ... C'est pas juste un truc pour écrire une fonction min générique. Ca c'est juste une quantification universelle sur le type d'une fonction.

    Citation Envoyé par deadalnix Voir le message
    En tant que programmeur C++ moderne, tu devrait regarder un peu ce qu'Alexandrescu dis à ce popros si les miens ne te semblent pas convaincants.
    Le C++ a des défauts, je le sais, je les connais, et je joue avec justement. Après, de là à balancer des choses fausses avec potentiellement des dizaines de milliers de lecteurs qui vont lire tes messages, je refuse.
    D'ailleurs, comme le dit Goten, Alexandrescu est à l'origine de quelques tricks, ou au moins a contribué à les populariser, et je doute qu'il ait dit que les classes de traits, de politiques, la métaprogrammation etc, et encore moins la move semantic, soient de la masturbation intellectuelle, etc. Il travaille justement sur des choses de ce genre dans D.

    Citation Envoyé par deadalnix Voir le message
    Tout le problème du C++, c'est qu'on est par défaut bas niveau et on s'élève grâce aux outils fournis par le langage (mais surtout car on en a besoin). Cette approche est en place, non pas parce qu'elle est pertinente, mais parce qu'elle permet la compatibilité avec C.

    Une approche inverse est nettement plus pertinent : on est haut niveau, et on peut descendre bas niveau si besoin est.
    C'est l'approche qu'on expose depuis le début de ce débat avec Florian Goo, Goten & autres. Je ne vois pas pourquoi tu dis ça du coup

    Citation Envoyé par deadalnix Voir le message
    Autant je reconnais des qualité au C++ que n'ont pas ses confrère C# et Java, autant en déduire que C++ est bien foutu, c'est réellement excessif.
    Je donne peu de valeurs aux messages absolument pas argumentés (à l'inverse de ceux de pseudocode par exemple). Argumente ! Et chaque langage est ce qu'il est, c'est difficile de dire lequel est bien foutu. Je trouve Haskell bien foutu, d'autres non par exemple.

    Si tu te mets à argumenter, on aura enfin un débat constructif et intéressant pour les visiteurs.

  19. #79
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par Goten Voir le message
    Alexandrescu ( que alp connait j'en suis sur), est à l'origine justement des traits dont tu parles et d'un framework sur la move semantic hein.
    Les derniers écrits d'alexandrescu critiquant quelque chose était sur les iterator je te laisse me montrer ce qu'il dit sur le Gag de la move semantic comme tu dis .
    C'est justement ce pourquoi son propos est intéressant. Alexandrescu est l'un des plus grands spécialistes du C++, et son avis est le même que le miens (ou alors serait-ce l'inverse ?).

    Le fait qu'on ai justement besoin de passer par ces artifices montrent que la langage est mal foutu à la base et ne fournis pas outils nécessaires à la programmation.

    Alp > Prend du recul par rapport à ce que tu racontes.

    Oui, C++, c'est du C auquel on à ajouté plein de trucs au fur et à mesure. On a ajouté tellement de truc que ça n'a plus grand chose à voir avec le C finalement, mais on a tout construit sur le C. Ce n'est pas un fait que j'avance comme ça au hazard, c'est juste des faits, facilement vérifiables qui plus est.

    Pour le reste, je pourrais répondre point par point. mais ce ne serait pas intéressant car tu n'a rien comprit au propos. Tu connais tout plein de lib en C++ pour faire les choses que tu souhaites, comme uBlast pour l'exemple que j'ai donné. C'est bien. Mais ça prouve une chose : LA façon ultime et efficace pratiquement personne n'est capable de la mettre en place, et c'est d'un complexité incroyable de le faire (je sais, je l'ai fait) car la façon dont les templates sont implémentées en C++ n'a aucune vue d'ensemble.

    Le problème majeur dans l'implémentation d'un telle solution et de retrouver les types de retour des opérateurs. C++ ne fournis aucune solution à ce problème, ce que font pourtant tous les autres langages que tu as cité (OCaml, Haskell, etc . . .). Effectivement, eux vont loin dans ce sens mais C++, quedal ! Pire, ce n'est pas simplement compliqué, c'est non standard. Alors oui, C++0x fournis des solution, mais il est ou ce C++0x ?

    Parce 0x, ça voulait bien dire 0x avec x l'année de sortie du machin. Va falloir s'activer la, parce qu'il ne reste plus qu'un mois pour sortir un compilo.

    Pour le reste, je n'ai parlé de masturbation intellectuelle nulle part (pas plus que Alexandrescu ne l'a fait) juste de complexité inutile, et de choses mal terminées dans le C++ actuel. D'ailleurs regarde un peu ce qu'il a pu proposer dans D et compare les solutions en C++.

    Tiens par exemple (mais il n'y a que ça des exemple on peut en trouver à la pelle) aucun des types standard n'est utilisable pour faire une appli portable en C++. Un int, c'est jamais la même chose. Du coup, faut encore une fois passer par des libs pour faire le typage d'une appli portable.

    Le C++ est un langage construit sur des bases moisies, mais des gens nous ont pondeus des libs pour le rendre utilisable. les bases moisies du C++, c'est le C.

    Allez deux trois exemples, l'équivalent en C++ va être amusant :
    http://www.digitalmars.com/d/2.0/lazy-evaluation.html
    http://www.digitalmars.com/d/2.0/mixin.html
    http://www.digitalmars.com/d/2.0/var...templates.html

    EDIT: Et aussi faudrait voir le temps de compilation xD . Ça prend des lustres en C++, et cela est du principalement à sa grammaire souvent ambiguë.

  20. #80
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Et c'est là que je te comprends pas... Tu te contredis toi même, d'un côté tu dis que c'est moisi parce qu'on a pas telle ou telle feature et d'un autre tu sors une bibliothèque antichambre du standard (boost) qui vient palié à ce manques, voir le standard lui même avec le prochain draft? Au final que manque-t-il au C++ puisque c'est possible hein?
    Attention je dis pas que tout est blanc hein, juste que puisque ça existe alors pourquoi chercher midi à quatorze heures?

    Quand à la médiocrité des templates : je serais intéressé que tu me montres un langages qui exprime mieux la généricité.

    C'est comme les design patterns, ils sont là pour combler les manques des langages. Si encore boost et consor n'existait pas, ça pourrait être valable de dire que oui il y'a de gros manques, mais c'est pas le cas.

Discussions similaires

  1. Un else après des if en cascade
    Par yinyann86 dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2006, 17h52
  2. Revenir en arrière après des update
    Par charles_mourot dans le forum Oracle
    Réponses: 10
    Dernier message: 02/10/2006, 10h01
  3. Réponses: 10
    Dernier message: 26/04/2006, 11h33
  4. Réponses: 7
    Dernier message: 26/01/2006, 12h19
  5. [IB6] mon serveur crash apres des insert en série...
    Par Rmotte dans le forum Débuter
    Réponses: 11
    Dernier message: 27/05/2004, 14h53

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