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

Actualités Discussion :

Les développeurs âgés sont-ils bons pour le garage ?

  1. #81
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Ça veut dire quoi âgé ? Quelqu'un qui a la tremblote ?

  2. #82
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fcharton Voir le message
    la vitesse est souvent lié à la densité du code, dans la pratique
    Ahem...
    Les papis, si vous écrivez des trucs comme ça, comment voulez-vous qu'on vous prenne au sérieux (d'un point de vue strictement technique s'entend) aussi?

    Je ne suis plus très jeune moi non plus, mais si j'ai beaucoup à apprendre des séniors, sur certaines choses, certains jeunes m'impressionnent. Un ami ici, âgé de 26 ans, est capable d'optimiser un code c++ en partant du diagramme de classes jusqu'à l'optimisation des assembleurs (en utilisant les GPU et pleins de trucs auxquels je ne connais rien, style les chipsets de certaines cartes mères permettent tels types d'optimisations etc.), et de façon à ce que ça fonctionne sur n'importe quelle architecture physique (proc & carte graphique). En revanche, il est très mauvais dans le versionning, la vision globale des projets, les besoins utilisateurs, etc, choses que des dev plus âgés appréhendent mieux.

    Donc oui, nous sommes complémentaires, comme dans n'importe quel métier. Et si un jour les capitalistes français comprennent cela, alors ils embaucheront les deux types de profils, en laissant un peu de répit aux plus productifs pour du transfert de connaissance et un peu d'encadrement. C'est le gros problème de la France, les managers veulent tellement de productivité qu'il n'y a plus de place pour tout ce qui fait la vie d'une entreprise et assure sa pérennité.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #83
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r0d Voir le message
    Ahem...
    Les papis, si vous écrivez des trucs comme ça, comment voulez-vous qu'on vous prenne au sérieux (d'un point de vue strictement technique s'entend) aussi?
    Quel était le problème avec cette phrase?

    C'est un constat, sur les langages que je pratique (C++, donc compilé, mais aussi Delphi), il y a presque toujours une corrélation entre la densité du code et la vitesse d'exécution finale.

    Il y a bien sur des raisons techniques à cela: un code compact c'est presque toujours des boucles "profondes" courtes, moins d'indirections, autant de choses qui vont plus vite. Mais la principale raison est qu'en général, plus un code est dense, plus il est "pensé". Le code avec des bouts partouts et des tas de petits machins dans de petites cases, c'est généralement de la spec transcrite, souvent bêtement.

    'fin bon, c'est juste un constat de vieux, quoi...

    Par ailleurs, l'optimisation d'un code, ce n'est presque jamais l'optimisation des instructions, GPU et autres machines techniques, mais presque toujours celle des algos, et des structures de données. C'est là qu'on gagne les ordres de grandeurs, ce qui est la raison d'être de l'optimisation.

    Francois

  4. #84
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    OO/non OO : tout "new" fait une allocation, et une initialisation des champs.
    C'est en grande partie inexact, voire partiellement faux. D'une part un new, en C et en C++, n'initialise rien du tout. Ce n'est pas écrit dans la norme, et si certains compilateur avec certaines options le font (comme par exemple visual studio en mode debug), ce n'est jamais le cas en mode optimisé.
    D'autre part, les récentes évolutions du c++ permettent, dans certains cas, d'éviter des allocations lors de new (voir par exemple le COW de Qt ou la move semantic en c++11). Mais c'est sûr, c'est récent donc c'est mal.

    Citation Envoyé par souviron34 Voir le message
    Dans le même registre, on voit depuis longtemps apparaître des listes simplement, mais souvent doublement chaînées. Ces listes utilisent 3 fois plus de mémoire que une programmation par tableau..
    3 fois plus? D'où sort ce chiffre?


    Citation Envoyé par souviron34 Voir le message
    des exceptions et de leurs traitements (vite un spaghetti inbitable et indébugable dans une grosse appli à moins d'avoir une discipline extrêmement stricte)
    Un peu de rigueur est effectivement nécessaire si l'on choisi d'utiliser les exceptions. Mais c'est le même type de rigueur qui est nécessaire à la gestion de la mémoire en C à coup de malloc, realloc et free, ou des pointeurs, etc. Juste un outil supplémentaire, qui, s'il est bien utilisé, peut être très puissant. On peut choisir de ne pas le faire (comme google par ex.), mais il est dans la boite à outil et ce serait une erreur de l'ignorer.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #85
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Quel était le problème avec cette phrase?
    C'est peut-être plus un problème de la définition qu'on donne au mot "densité".

    Prenons un exemple concret, et du code que tout le monde en c++ connait: la STL et boost. Ce sont certainement deux exemples de code les plus "pensé" et optimisé. Si tu regardes bien comment sont implémentées ces bibliothèques:
    - il n'y a qu'une instruction par ligne. Qu'une variable définie à la fois. Chaque opération est divisée de façon à ce que chaque ligne n'effectue qu'une seule opération. Par exemple, a = b + c + d; sera écrit en 2 lignes.
    - chaque fonction n'effectue qu'une et une seule opération. Les fonctions sont donc très courtes, mais il y en a beaucoup.
    - c'est du code qui est presque totalement templatisé, or il n'y a pas plus verbeux que les templates.

    Si tu regardes ensuite le code de logiciels open source, le code est rempli de commentaires et de références. Les noms de variables et de fonctions sont longs et explicites.

    Et effectivement, comme tu le dis:
    Citation Envoyé par fcharton Voir le message
    l'optimisation d'un code, ce n'est presque jamais l'optimisation des instructions, GPU et autres machines techniques, mais presque toujours celle des algos, et des structures de données. C'est là qu'on gagne les ordres de grandeurs, ce qui est la raison d'être de l'optimisation.
    En réalité, les gros gains se font dans les algos et les structures, ensuite on va chercher les derniers pourcentages dans le bas niveau, et les dernières décimales dans le matériel. Bon à part quelques cas particuliers où tu peux gagner 60% juste en ajoutant une directive opemMP au bon endroit ou en utilisant une lib de calcul GPU. Mais je ne vois vraiment pas ce que la "densité du code" vient faire là-dedans.

    D'ailleurs, aujourd'hui la mode veut que l'on préfère un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int b = 0;
    if ( a==0 )
    {
       b = 1;
    }
    else
    {
      b = 2;
    }
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int b = ( a==0 ) ? 1 : 2;
    Ces deux codes génèrent le même asm une fois compilé, et pourtant aujourd'hui le premier est considéré comme "meilleur". Et il y a des raisons à cela. Ok c'est une mode, un tendance, appelez ça comme vous voulez, mais elle est fondée. Demain elle sera peut-être considérée comme obsolète, de la même façon que demain la théorie de la relativité sera peut-être infirmée, mais en attendant, ce sont des tendances issues de débats et de discussions. Et dans ces débats, les "vieux" développeurs ont une importance particulière et un poids important grâce à leur recul.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #86
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r0d Voir le message
    C'est peut-être plus un problème de la définition qu'on donne au mot "densité".
    Effectivement, si tu penses aux retours chariots et aux blancs, ce n'est pas ce que je voulais dire.

    Pour moi, un code dense c'est un code dans lequel on a progressivement éliminé le superflu, les appels redondants, les initialisations inutiles, les "sous fonctions" qui ne sont appelées qu'en un endroit, les sous classes que l'on avait crues utiles lors de la conception et qui se sont révélées superflues. Les paramètres de fonction 'au cas où', les fonctions membres gardées pour faire joli, les échafaudages divers qu'on a mis lors du débugage, et laissés en place.

    C'est aussi un code où l'on évite les commentaires idiots : par exemple, des choses comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // recherche la clef clef dans le MonConteneur monConteneur
    int find(MonConteneur &monConteneur, int clef)
    C'est aussi un code qui a juste la complexité suffisante pour résoudre le problème et gérer les extensions prévisibles (pas un machin qui fait des additions en grands nombres "au cas où")

    Je ne sais plus qui disait que la perfection ce n'est pas quand on ne peut plus rien ajouter, mais quand on ne peut plus rien retirer. Je crois que ça s'applique parfaitement au code (et pour cette raison j'aurais du mal à considérer la STL ou Boost comme du code exemplaire, on se traine quand même depuis des décennies le module "valarray", qui est fourni avec une étiquette disant : ne pas l'utiliser).

    Citation Envoyé par r0d Voir le message
    Prenons un exemple concret, et du code que tout le monde en c++ connait: la STL et boost. Ce sont certainement deux exemples de code les plus "pensé" et optimisé.
    Ca ne me parait pas de bons exemples. D'abord c'est de la librairie, faite pour être utilisée mais assez difficile à lire. Ensuite, c'est du code générique, fait pour passer partout, parfois aux dépens de l'efficacité, et surtout de la lisibilité.

    Je ne sais pas toi, mais si on me donnait à maintenir un programme écrit dans le style de la STL, je n'aimerais pas trop...

    Citation Envoyé par r0d Voir le message
    Si tu regardes ensuite le code de logiciels open source, le code est rempli de commentaires et de références. Les noms de variables et de fonctions sont longs et explicites.
    Ca dépend des logiciels, ça, mais ça indique davantage l'époque où ces logiciels ont été écrits (et les bonnes pratiques du moment) que la qualité du résultat (et ce n'est pas parce que c'est open source que c'est bien fait...)

    Citation Envoyé par r0d Voir le message
    Et effectivement, comme tu le dis: En réalité, les gros gains se font dans les algos et les structures, ensuite on va chercher les derniers pourcentages dans le bas niveau, et les dernières décimales dans le matériel.
    En général, le bas niveau, c'est le travail de ton compilateur. Si tu lui donnes du code assez simple, il fera les choses mieux que toi. C'est d'ailleurs la raison du style STL : le code simple (une instruction par ligne) a tendance à mieux s'optimiser).

    Citation Envoyé par r0d Voir le message
    Ces deux codes génèrent le même asm une fois compilé, et pourtant aujourd'hui le premier est considéré comme "meilleur". Et il y a des raisons à cela.
    La seule raison que je vois, c'est que le premier code fera moins peur à un développeur junior, qui aura l'impression en le lisant d'avoir compris 9 lignes de code (yesss!).

    Personnellement, je préfère la seconde, tu l'auras compris. Cette ligne n'a aucune valeur ajoutée: elle initialise b à une valeur qui dépend d'une condition, et c'est une situation tellement banale que les concepteurs du langages lui ont consacré une instruction. On est en droit d'espérer que tout développeur connait la syntaxe (a?b:c).

    C'est un truc qui m'a toujours épaté, ça. D'un côté, on s'entend répéter qu'il ne faut pas de fonctions longues, parce que c'est dur à lire et à comprendre, on insiste sur la nécessité d'utiliser, partout où l'on peut des fonctions de librairies (pas toujours explicites, eg le "remove" qui n'enlève rien dans la STL), mais il faudrait ne pas utiliser les raccourcis syntaxiques du langage lui même...

    On retrouve la même chose avec l'optimisation, d'ailleurs. Ce sont les mêmes développeurs qui, au prétexte que l'optimisation prématurée c'est mal, insistent pour ne jamais faire une recherche dichotomique, qui veulent absolument utiliser une librairie mathématique haut de gamme dès qu'on a besoin d'une fonction trigonométrique, ou d'un nombre au hasard.

    Francois

  7. #87
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par r0d Voir le message
    C'est en grande partie inexact, voire partiellement faux. D'une part un new, en C et en C++, n'initialise rien du tout.


    Tu as vu ça où, un "new" en C ???


    Citation Envoyé par r0d Voir le message
    Ce n'est pas écrit dans la norme, et si certains compilateur avec certaines options le font (comme par exemple visual studio en mode debug), ce n'est jamais le cas en mode optimisé.
    Ce n'est peut-être pas le cas - je sais pas, je connais pas - en C++, mais ça l'était en Java... Et dans la plupart des langages OO..

    Citation Envoyé par r0d Voir le message
    D'autre part, les récentes évolutions du c++ permettent, dans certains cas, d'éviter des allocations lors de new (voir par exemple le COW de Qt ou la move semantic en c++11). Mais c'est sûr, c'est récent donc c'est mal.
    Personne ne dit ça.... Simplement le C++ s'est mis à être massivemnt utilisé vers la fin des années 90... Attendre 2011 pour faire quelque chose, ça laisse entre 12 et 14 ans d'applis...


    Citation Envoyé par r0d Voir le message
    3 fois plus? D'où sort ce chiffre?
    Il te faut bien un pointeur vers next et un vers previous, non ???

    Si donc tu dois stocker un entier ou un pointeur, tu triples la taille du stockage...



    Citation Envoyé par r0d Voir le message
    D'ailleurs, aujourd'hui la mode veut que l'on préfère un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int b = 0;
    if ( a==0 )
    {
       b = 1;
    }
    else
    {
      b = 2;
    }
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int b = ( a==0 ) ? 1 : 2;
    Ces deux codes génèrent le même asm une fois compilé, et pourtant aujourd'hui le premier est considéré comme "meilleur". Et il y a des raisons à cela. Ok c'est une mode, un tendance, appelez ça comme vous voulez, mais elle est fondée. Demain elle sera peut-être considérée comme obsolète, de la même façon que demain la théorie de la relativité sera peut-être infirmée, mais en attendant, ce sont des tendances issues de débats et de discussions. Et dans ces débats, les "vieux" développeurs ont une importance particulière et un poids important grâce à leur recul.
    Citation Envoyé par fcharton Voir le message
    La seule raison que je vois, c'est que le premier code fera moins peur à un développeur junior, qui aura l'impression en le lisant d'avoir compris 9 lignes de code (yesss!).

    Personnellement, je préfère la seconde, tu l'auras compris. Cette ligne n'a aucune valeur ajoutée: elle initialise b à une valeur qui dépend d'une condition, et c'est une situation tellement banale que les concepteurs du langages lui ont consacré une instruction. On est en droit d'espérer que tout développeur connait la syntaxe (a?b:c).
    @r0d:


    Ce n'est pas une "mode", c'est un retour vers ce qui se faisait dans l'industrie..

    @François::

    non, moi j'ai toujours préféré la première vérsion. Pour une bonne raison, c'est que c'est lisible, facilement compréhensible par un mec qui a fait un autre langage (Fortran ou Pascal au hasard) .

    J'ai en général horreur des signes cabailistiques, même si ils sont autorisés..

    De même, les "i++" par exemple , je ne les met que dans les boucles.. Sinon je met "i = i +1".. Pour le compilo c'est kif-kif, et c'est plus lisible.. Quant aux "++i" ils sont tellement à déconseiller qu'ils ne devraient même pas exister...

    "ce qui se conçoit bien s'énonce clairement"...

    Si c'est un raccourci et non pas une instruction à part entière, il n'y a aucune raison de mettre le raccourci... Surtout quand c'est un signe qui fait se poser des questions (le "?" est un excellent exemple.. N'importe quel programmeur venant d'un autre langage se grattera la tête un bon moment pour savoir ce que c'est que ce truc... En particulier si il fait du dépannage ..., alors que le if..else.. est tellement évident)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #88
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par r0d Voir le message
    Prenons un exemple concret, et du code que tout le monde en c++ connait: la STL et boost. Ce sont certainement deux exemples de code les plus "pensé" et optimisé.
    Boost est un bac a sable pour experimenter des trucs [par Stroustrup], et ne devrait probablement pas etre utilise en production car elle ne respecte pas la compatibilte arriere -- c'est a dire qu'un simple update de la librairie peut rendre un programme non fonctionnel, car l'API Boost a change entre les deux versions.
    extrait de la FAQ boost :
    How can the Boost libraries be used successfully for important projects? Many of the Boost libraries are actively maintained and improved, so backward compatibility with prior version isn't always possible. Deal with this by freezing the version of the Boost libraries used by your project. Only upgrade at points in your project's life cycle where a bit of change will not cause problems. Individual bug fixes can always be obtained from the boost repository.
    Mais en dehors de ca, tu as raison.

    Si tu regardes ensuite le code de logiciels open source, le code est rempli de commentaires et de références. Les noms de variables et de fonctions sont longs et explicites.
    "Le code de logiciels open source", ca ne veut rien dire. Je peux t'en sortir des dizaines avec des fichiers qui se nomment 1.c, 2.c, etc... et dont le contenu est a la hauteur du nommage du fichier... Et ce fut le cas pendant des annees, "pour que le code ne puisse pas etre copie par n'importe qui" disait-on. Ce n'est pas parce qu'aujourd'hui certains codes open-source sont bien ecrits et clairs qu'ils le sont tous.

    Ces deux codes génèrent le même asm une fois compilé, et pourtant aujourd'hui le premier est considéré comme "meilleur".
    Pas forcement le meme code ASM non (gcc 4.1.2 sans options de compilation). Par contre, il est evident que le premier code est beaucoup plus lisible que le second.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #89
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Je ne sais pas toi, mais si on me donnait à maintenir un programme écrit dans le style de la STL, je n'aimerais pas trop...
    Moi non plus, effectivement.

    Citation Envoyé par fcharton Voir le message
    ce n'est pas parce que c'est open source que c'est bien fait...
    Non, mais c'est parce que c'est open source que l'on a accès au code. Parce que si je te parle d'un code auquel personne n'a accès, alors je peux te raconter n'importe quoi. Si je te parle du code de Firefox ou de libreoffice, tout le monde peut aller vérifier. Et de plus, en corolaire, j'ai eu l'occasion de lire beaucoup plus de code open source que de code propriétaire; donc en parlant de code open source, je limite mes affirmations à quelque chose que je connais bien.

    Citation Envoyé par fcharton Voir le message
    En général, le bas niveau, c'est le travail de ton compilateur. Si tu lui donnes du code assez simple, il fera les choses mieux que toi. C'est d'ailleurs la raison du style STL : le code simple (une instruction par ligne) a tendance à mieux s'optimiser).
    Effectivement, mais parfois quelques cycles peuvent faire la différence, et là il faut aller sous le capot. C'est extrêmement rare d'avoir à en arriver là, j'en conviens, mais ça arrive.

    Citation Envoyé par fcharton Voir le message
    La seule raison que je vois, c'est que le premier code fera moins peur à un développeur junior, qui aura l'impression en le lisant d'avoir compris 9 lignes de code (yesss!).

    Personnellement, je préfère la seconde, tu l'auras compris. Cette ligne n'a aucune valeur ajoutée: elle initialise b à une valeur qui dépend d'une condition, et c'est une situation tellement banale que les concepteurs du langages lui ont consacré une instruction. On est en droit d'espérer que tout développeur connait la syntaxe (a?b:c).

    C'est un truc qui m'a toujours épaté, ça. D'un côté, on s'entend répéter qu'il ne faut pas de fonctions longues, parce que c'est dur à lire et à comprendre, on insiste sur la nécessité d'utiliser, partout où l'on peut des fonctions de librairies (pas toujours explicites, eg le "remove" qui n'enlève rien dans la STL), mais il faudrait ne pas utiliser les raccourcis syntaxiques du langage lui même...
    Cette prose montre bien l'étendue de votre mauvaise foi. Les Sutter, Meyers et autres Alexandrescu n'ont rien compris et ne méritent pas votre attention. Tu ne cherches même pas à comprendre le pourquoi d'un résultat que tu le juges déjà, à l'aune de ta seule et donc légitime appréhension. ça ne me donne même pas envie de t'expliquer. Mais je vais le faire quand-même pour la discussion.

    Tout d'abord, il faut comprendre que les deux codes concernés sont strictement équivalents une fois le code compilé. Donc on peut écarter les arguments de rapidité d'exécution, de compilation ou la taille de l'exécutable. Les différences ne se situent qu'au niveau de l'écriture, donc de la sémantique, de l'interprétation et de l'ingénierie (ou génie logiciel comme disent certains).

    "Un programme doit être lu comme un texte", c'est une idée qui n'est pas nouvelle (cf. le langage pascal), et l'expérience a montré que c'était une bonne approche, car c'est du temps de gagné à chaque lecture de code; or le code est plus souvent lu qu'écrit. Un if/then/else est plus proche du langage humain qu'un "=(==)?:".

    Il existe un principe en développement logiciel, qui s'appelle le SoC (Separation of Concern). C'est un principe, et en tant que tel, il est sensé résoudre plusieurs problèmes. Une des applications concrètes du SoC consiste à n'effectuer qu'une opération par ligne de code. L'opérateur ternaire ne respecte pas ce principe. Concrètement, du code qui respecte le SoC est plus facile à lire, à comprendre, à débugger, donc à maintenir. Un exemple concret: si tu met un point d'arrêt sur un opérateur ternaire, tu ne sauras pas si le compilateur est en train d'effectuer la comparaison ou l'affectation, et tu ne sauras pas si les valeurs de tes variables sont dans l'état N ou l'état N+1.

    Cette discussion sur l'opérateur ternaire est récurrente, car bien qu'en soi c'est un détail ridicule, infime, dans le fond le problème que cette question pose est l'évolution des "best practices". Il est normal et sain qu'il y ait une opposition à ces évolutions, car sinon ça ne serait que des effets de modes sans fondements. Par exemple, moi je suis en opposition frontale à une tendance actuelle de classification des objets en sémantique de valeur et sémantique d'entité. En revanche, je suis un fervent partisan de S.O.L.I.D et de la programmation orientée service. D'autres sont d'avis différents, et chacun défend son point de vue, jusqu'à ce qu'un consensus apparaisse. Ou pas.

    Le message que j'essaie de faire passer ici c'est que vous (françois, jean, mais bien d'autres) vous dites que les jeunes aujourd'hui font n'importe quoi et que l'évolution du développement logiciel ne fonctionne que par des modes sans fondements. Hé bien moi je vous dit que ce n'est pas du tout la réalité. Il suffit de regarder les débats concernant l'évolution du standard c++ pour se rendre compte que chacune de ces évolutions est largement débattue, réfléchie, murie, mise à l'épreuve à tous les niveaux. Le paradigme objet n'est pas apparu comme "un concept qui a de la gueule", mais pour répondre à des besoins concrets et dans le but de combler certaines lacunes des paradigmes existants.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  10. #90
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par souviron34 Voir le message


    Tu as vu ça où, un "new" en C ???
    oops, j'ai écris un peu vite

    Citation Envoyé par souviron34 Voir le message
    Il te faut bien un pointeur vers next et un vers previous, non ???

    Si donc tu dois stocker un entier ou un pointeur, tu triples la taille du stockage...
    Et non, car l'objet stocké dans le conteneur est généralement bien plus "gros" qu'un pointeur. C'est ce qui fait que bien souvent, un pointeur de plus par élément est totalement négligeable (si ta liste stocke des objets ou structures qui font chacun 1Ko par exemple, ton pointeur qui ne fait qu'1 octet est négligeable). Et lorsque le poids du pointeur n'est pas négligeable, c'est qu'on est dans une situation très particulière, donc rare.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  11. #91
    Expert confirmé

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Il te faut bien un pointeur vers next et un vers previous, non ???

    Si donc tu dois stocker un entier ou un pointeur, tu triples la taille du stockage...
    faudra m'expliquer c'est quoi ce débat, qu'importe si la liste est simplement, doublement, triplement, etc. chainée, ce n'est qu'un détail, si on doit en arriver à optimiser à ce point c'est qu'on a déjà fait les classiques passes sur les algos et les données à traiter, donc c'est qu'on a besoin d'un très haut niveau d'optim, ce qui, désolé, ne se rencontre pas tous les 4 matins.

    de plus ça relève d'un détail de fonctionnement et certainement pas du service que devra rendre le code, en ayant un code un minimum partitionné, on pourra remplacer aisément la liste chainés par un autre conteneur, et même encore par un conteneur maison ultra optimisé, c'est pas comme si on allait inventer de nouvelles fonctions sur les conteneurs, donc même interface et implémentations différentes.

    vous arrivez à des situations ubuesques alors que la situations peut surement se résumer à un cas simple :

    est ce que le petit jeune se trouve en face d'un ancien qui est resté avec les techniques d'il y a 25 ans sans jamais se mettre à jour, ou est ce qu'il a en face de lui un ancien qui a continué à s'intéresser à la technique et qui aura donc un oeil plus ou moins éclairé sur ce que le petit jeune connait et propose.

    si la réponse de l'ancien est "c'est nouveau donc c'est nul" alors là je dirai qu'il faut mettre l'ancien au placard.

  12. #92
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Pas forcement le meme code ASM non (gcc 4.1.2 sans options de compilation). Par contre, il est evident que le premier code est beaucoup plus lisible que le second.
    Lorsqu'on parle d'asm généré, on parle forcément de compilation avec optimisation, sinon ça n'a pas plus de sens que de parler de rapidité d'exécution en mode debug.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  13. #93
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    De même, les "i++" par exemple , je ne les met que dans les boucles.. Sinon je met "i = i +1".. Pour le compilo c'est kif-kif, et c'est plus lisible.. Quant aux "++i" ils sont tellement à déconseiller qu'ils ne devraient même pas exister...
    Heu... pardon je vais être lourd, et en plus hors sujet, mais tout ceci n'est pas exact.
    -> i++ ne fait pas la même chose que i=i+1. Car quand tu fais mon_tableau[i++];, il te renvoie l'élément i et incrémente i après. Il doit donc conserver quelque part la valeur de i avant de l'incrémenter. Dans 99% des cas, c'est optimisé et au final il n'y a pas de différence, mais parfois le compilo ne peut pas optimiser ça.
    -> en revanche ++i et i=i+1; sont équivalents. Et c'est la raison pour laquelle on préfère ++i à i++.

    Tu devrais venir faire un tour sur le forum c++ de temps en temps
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  14. #94
    Membre expérimenté
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 433
    Points : 1 604
    Points
    1 604
    Par défaut
    Citation Envoyé par r0d Voir le message
    "Un programme doit être lu comme un texte", c'est une idée qui n'est pas nouvelle (cf. le langage pascal), et l'expérience a montré que c'était une bonne approche, car c'est du temps de gagné à chaque lecture de code; or le code est plus souvent lu qu'écrit. Un if/then/else est plus proche du langage humain qu'un "=(==)?:".
    Bon à un moment faut aussi arrêter de rigoler: pour ma part, je travaille avec des professionnels et si je dois à chaque fois limiter ma prose au niveau de la Bibliothèque Rose pour ne pas choquer les incompétents, on n'est pas arrivé.

    Citation Envoyé par r0d Voir le message
    Car quand tu fais mon_tableau[i++][...]
    C'est pas toi qui refuse qu'on fasse deux chose différentes sur une même ligne? Pour ma part, je trouve ceci beaucoup plus sale et piégieux qu'un opérateur ternaire.

  15. #95
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par zaventem Voir le message
    Bon à un moment faut aussi arrêter de rigoler: pour ma part, je travaille avec des professionnels et si je dois à chaque fois limiter ma prose au niveau de la Bibliothèque Rose pour ne pas choquer les incompétents, on n'est pas arrivé.
    Ce sont des principes que je présente ici. Évidemment que parfois il n'est pas nécessaire ou pas utile de les respecter.

    Citation Envoyé par zaventem Voir le message
    Citation Envoyé par r0d
    Car quand tu fais mon_tableau[i++][...]
    C'est pas toi qui refuse qu'on fasse deux chose différentes sur une même ligne? Pour ma part, je trouve ceci beaucoup plus sale et piégieux qu'un opérateur ternaire.
    Bien sûr que je considère mon_tableau[i++] comme du mauvais code. C'était juste un exemple pour expliquer ce que fait l'opérateur ++ postfixé.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  16. #96
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    non, moi j'ai toujours préféré la première version. Pour une bonne raison, c'est que c'est lisible, facilement compréhensible par un mec qui a fait un autre langage (Fortran ou Pascal au hasard) .
    Je comprends l'idée, et je suis d'accord sur le principe. Maintenant, la grande majorité des langages récents utilise une syntaxe voisine du C, avec des ++ pour l'incrémentation, et trouver l'explication de la syntaxe (a?b:c) me parait assez direct.

    Je pars aussi un peu du principe que quelqu'un qui lit du code C++ connait la syntaxe du C++. Je veux dire, si tu ne connais pas cette syntaxe, tu as peu de chance de "deviner" les détails du langage, tout ce qui tourne aux fonctions membres, voire aux templates, par exemple, ou même ce que te garantit l'emploi d'un vector, or la fonction de bibliothèque find().

    En fait je pense que je préfère la syntaxe ternaire parce qu'elle réduit l'espace écran qu'occupe le code, et que quand je lis du code, je préfère "voir" la structure que tourner les pages. Je pense aussi qu'elle est logique dans le sens ou elle "ne fait qu'une chose" (une conditionnelle si/sinon)

    Citation Envoyé par r0d Voir le message
    Cette prose montre bien l'étendue de votre mauvaise foi. Les Sutter, Meyers et autres Alexandrescu n'ont rien compris et ne méritent pas votre attention.
    Tu te moques du monde, là... La première recommandation des C++ Coding Standard de Sutter et Alexandrescu, c'est précisément de ne pas trop s'exciter sur le style, du moment que cela reste lisible. En gros, n'importe quel développeur sérieux saura lire l'un ou l'autre.

    Pour l'incrémentation sur les types de base, je ne sais pas ce qu'en dit Sutter, mais tu trouveras chez Koenig et Moo (au début) un petit commentaire expliquant que pour TOUS les types de base i++ et ++i produiront le même code dans tous les compilateurs récents (tant que tu n'affectes pas l'expression).

    Quant au style un peu dense que j'affectionne, je l'ai trouvé chez Stroustrup.

    Tu disais mauvaise foi?

    Citation Envoyé par r0d Voir le message
    "Un programme doit être lu comme un texte", c'est une idée qui n'est pas nouvelle (cf. le langage pascal), et l'expérience a montré que c'était une bonne approche, car c'est du temps de gagné à chaque lecture de code; or le code est plus souvent lu qu'écrit. Un if/then/else est plus proche du langage humain qu'un "=(==)?:".
    Euh? et je suppose que == pour désigner la comparaison, la syntaxe de for( ; ; ), ou les règles d'héritage, de précédence, d'évaluation des expressions sont proches du langage humain.

    Excuse moi, mais ce raisonnement est grotesque. Un programme est écrit dans un langage spécialisé, qui suit des règles précises, et que le lecteur DOIT connaître et bien maîtriser. Lui simplifier la tâche, c'est bien, mais partir du principe qu'il ne connait pas la syntaxe, ca me parait un peu exagéré.

    Citation Envoyé par r0d Voir le message
    Une des applications concrètes du SoC consiste à n'effectuer qu'une opération par ligne de code.
    Comme dans ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0;i<sz,i++) {}
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.erase(c.remove(c.begin(),c.end(),value),c.end());
    (Sutter & Alexandrescu, op. cit. p 157)

    ou n'importe quelle fonction ayant des effets de bord, en fait...

    En fait, comme je le disais plus haut, tu pourrais considérer que de tous ces exemples, l'opérateur ternaire est probablement un des plus SoC, au fond c'est un IF THEN ELSE comme on en a dans les langages informatiques depuis toujours.

    Citation Envoyé par r0d Voir le message
    Cette discussion sur l'opérateur ternaire est récurrente, car bien qu'en soi c'est un détail ridicule, infime, dans le fond le problème que cette question pose est l'évolution des "best practices".
    Non, je crois que le problème qu'elle pose est la tendance de beaucoup de programmeurs à regarder le doigt, au lieu de la lune.

    Et c'est ce qui explique que les "vieux" sourient quand un jeunot vient parler de bonnes pratiques, parce que la plupart du temps, ce qu'il en a retenu, c'est la règle d'indentation, le fait que "goto c'est mal" ou de jolis acronymes SFINAE et autres.

    Le problème, c'est que les bonnes pratiques sont censées apporter des vraies réponses à des vraies questions, pas réguler des détails sans importance, "don't sweat the small stuff" comme disent S&A.

    Citation Envoyé par r0d Voir le message
    Le message que j'essaie de faire passer ici c'est que vous (françois, jean, mais bien d'autres) vous dites que les jeunes aujourd'hui font n'importe quoi
    Ce n'est pas ce qu'on dit. Ce que j'essaie d'expliquer c'est qu'une bonne pratique qu'on n'a pas comprise, et surtout dont on à pas compris le problème qu'elle règle ne sert à peu près a rien.

    Je pense aussi que l'idée que toute nouvelle norme, murie, débattue, réfléchie, est forcément une amélioration, est une vaste fumisterie. Il y a eu, dans l'histoire de l'informatique tout un tas de progrès dont on s'est rendu compte après coup qu'ils n'en étaient pas.

    Enfin, l'objet, les normes, la syntaxe, les bibliothèques, les paradigmes, ne sont que des outils, on a tort d'en faire des religions ou des dogmes.

    Citation Envoyé par stardeath Voir le message
    faudra m'expliquer c'est quoi ce débat, qu'importe si la liste est simplement, doublement, triplement, etc. chainée, ce n'est qu'un détail,
    Pardon? On n'est pas dans l'optimisation là, mais dans les structures de base. Une liste ça ne fonctionne pas DU TOUT comme un tableau.

    Par ailleurs, pour des tables d'index (c'est sans doute de cela qu'on parle, ici : un tableau contenant des pointeurs vers des données), un triplement de la mémoire nécessaire n'est pas non plus un détail...

    Citation Envoyé par stardeath Voir le message
    de plus ça relève d'un détail de fonctionnement et certainement pas du service que devra rendre le code, en ayant un code un minimum partitionné, on pourra remplacer aisément la liste chainés par un autre conteneur,
    Ca va être génial, je sens... Comme ça, on va pouvoir faire des insert dans le tableau, ou trier la liste et faire des recherches dichotomiques dedans.

    C'est un principe de base de l'informatique: les conteneurs ne sont pas échangeables, parce qu'ils ont des fonctions, et surtout de performances, très différentes. Un tableau, ou une pile, est idéal pour un accès aléatoire, une liste pas. Une liste permet des insertions, un tableau pas. Trier un tableau est généralement une bonne idée si on a des recherches à faire, trier une liste, pas trop...

    La STL fournit une SYNTAXE COMMUNE, mais elle ne rend pas les conteneurs interchangeables.

    Francois
    Dernière modification par Invité ; 08/05/2013 à 16h38.

  17. #97
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par r0d Voir le message
    Le message que j'essaie de faire passer ici c'est que vous (françois, jean, mais bien d'autres) vous dites que les jeunes aujourd'hui font n'importe quoi et que l'évolution du développement logiciel ne fonctionne que par des modes sans fondements.
    Je crois que tu as mal lu

    Contrairement à ce que toi et d'autres essayez de nous faire dire, nous ne disons pas ça..

    Nous disons que :

    parmi les différentes nouveautés appariassant tous les jours, bien peu sont réellement utiles et pérennes..


    Ce qui n'est pas du tout la même chose...

    Nous ne sommes pas "contre la modernité et le progrès", fô pas charrier... Nous sommes simplement dubitatifs quand on nous annonce avec fracas que "ce machin élimine les problèmes" , "cette façon de faire est obsolète", et autres joyeusetés du style "on ne peut pas faire un soft sans xxx"...

    Or il se trouve que nos domaines sont truffés de ce genre d'annonces, et que les jeunes, par manque d'expérience et de recul, n'ont pas 'esprit critique pour comparer et évaluer..



    Citation Envoyé par r0d Voir le message
    Et non, car l'objet stocké dans le conteneur est généralement bien plus "gros" qu'un pointeur. C'est ce qui fait que bien souvent, un pointeur de plus par élément est totalement négligeable (si ta liste stocke des objets ou structures qui font chacun 1Ko par exemple, ton pointeur qui ne fait qu'1 octet est négligeable). Et lorsque le poids du pointeur n'est pas négligeable, c'est qu'on est dans une situation très particulière, donc rare.
    D'une part ton pointeur ne fait pas 1 octet, mais 4 sur une machine 32 bits... Multiplié par 2 pour les 2.

    Et lorsque le poids du pointeur n'est pas néglieable, c'est très courant.... Très souvent (en algo et maths en particulier) par exemple on fait des listes de pointeurs....


    Citation Envoyé par stardeath Voir le message
    faudra m'expliquer c'est quoi ce débat, qu'importe si la liste est simplement, doublement, triplement, etc. chainée, ce n'est qu'un détail, si on doit en arriver à optimiser à ce point c'est qu'on a déjà fait les classiques passes sur les algos et les données à traiter, donc c'est qu'on a besoin d'un très haut niveau d'optim, ce qui, désolé, ne se rencontre pas tous les 4 matins.

    de plus ça relève d'un détail de fonctionnement et certainement pas du service que devra rendre le code, en ayant un code un minimum partitionné, on pourra remplacer aisément la liste chainés par un autre conteneur, et même encore par un conteneur maison ultra optimisé, c'est pas comme si on allait inventer de nouvelles fonctions sur les conteneurs, donc même interface et implémentations différentes.
    Tu veux que je te cite un exemple ??

    Les algorithmes de sweep-line en maths. Pour traiter N points entiers, on stocke entre 6 et 10 à 12 N en mémoire...

    Alors il me semble que ce n'est pas négligeable, une mémoire multiliée par 10.. Et si tu as 10 millions d'objets, tu passes juste d'une mémoire normale à devoir avoir une mémoire dédiée....

    Et comme de plus on fait souvent tourner plusieurs softs en même temps, les problèmes de mémoire ne sont pas négligeables.

    C'est justement une des plaies du gaspillage actuel de ressources....


    Citation Envoyé par r0d Voir le message
    Heu... pardon je vais être lourd, et en plus hors sujet, mais tout ceci n'est pas exact.
    -> i++ ne fait pas la même chose que i=i+1. Car quand tu fais mon_tableau[i++];, il te renvoie l'élément i et incrémente i après. Il doit donc conserver quelque part la valeur de i avant de l'incrémenter. Dans 99% des cas, c'est optimisé et au final il n'y a pas de différence, mais parfois le compilo ne peut pas optimiser ça.
    -> en revanche ++i et i=i+1; sont équivalents. Et c'est la raison pour laquelle on préfère ++i à i++.

    Tu devrais venir faire un tour sur le forum c++ de temps en temps
    Et toi tu devrais allez faire un tour sur le forum C

    ++i incrémente avant... Si donc ce n'est pas un entier mais un pointeur, référencer ++p ou p++ n'ont strictement rien à voir...

    Or la syntaxe , si on commence à l'utiliser, on ne distinguera plus comment l'utiliser pour des entiers et pas pour des pointeurs....

    D'où gros problème

    Déjà vu de nombreuses fois dans des codes....


    tab[++i] ...

    Tu as manqué le premier élément, et tu vas au delà du dernier
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  18. #98
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    @françois: encore une fois, je parle de principes, ce ne sont pas des lois immuables ni des dogmes. Si le for ou le ERI (erase-remove idiom) ne respectent pas SoC, on ne va pas en faire une histoire. De même que la classe std::string est une horreur selon les standard du c++ moderne, mais ce n'est pas pour ça qu'on ne va pas l'utiliser. On peut d'ailleurs pinailler sur le fait que le ERI respecte SoC car il ne fait qu'une opération: supprimer un élément. Mais là n'est pas la question.

    Comme je le disais, les évolutions surviennent en réponse à des problèmes précis. Le fait que les langages de développement sont de plus en plus conçus pour ressembler à des langages humains répond aux coûts de maintenance des logiciels. C'est peut-être une erreur, l'avenir le dira, mais ce n'est pas une mode sans fondement. Mais en attendant, un professionnel doit pouvoir déchiffrer n'importe quel code de son langage préféré, nous sommes d'accord, mais c'est tout de même mieux s'il peut le faire plus rapidement, non?

    D'ailleurs, concernant l'opérateur ternaire, je ne suis pas entré dans les détails et il n'est en fait pas exactement identique au if/else, et dans certains cas il peut être utile. Mais c'est une longue histoire et les discussions à ce sujet sont légion sur le forum c++.

    Et je ne m'excite pas sur le style, je ne dit pas qu'il faut bannir l'opérateur ternaire, je prend juste cet opérateur en exemple pour essayer de montrer que les consensus évoluent, et que je pense que c'est une bonne chose de s'en tenir informé. Après évidemment, parfois les consensus a tort, et on s'en rend compte ensuite. C'est ce qui fait que l'informatique est aussi une science. Mais il ne faut pas tout rejeter en bloc.

    Par exemple, il y a environ 5 ans je crois, Microsoft a recruté de nombreux gourous du c++ pour bosser sur c#, dont H. Sutter pour s'occuper des threads. Beaucoup (dont moi) ont crié au scandale, à la trahison. Nombre des meilleurs spécialistes du c++ allaient vendre leur âme à microsoft en travaillant sur un langage "idiot proof", pâle copie du java, fermé, propriétaire. Le diable. Il s'avère que, quelques années plus tard, le C# se révèle être un langage extrêmement bien ficelé, et malgré ses nombreux désavantages, s'avère être un choix parfaitement adapté à beaucoup de situations.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  19. #99
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Nous disons que :

    parmi les différentes nouveautés appariassant tous les jours, bien peu sont réellement utiles et pérennes..


    Ce qui n'est pas du tout la même chose...

    Nous ne sommes pas "contre la modernité et le progrès", fô pas charrier... Nous sommes simplement dubitatifs quand on nous annonce avec fracas que "ce machin élimine les problèmes" , "cette façon de faire est obsolète", et autres joyeusetés du style "on ne peut pas faire un soft sans xxx"...
    Ok, dit comme ça, je ne peux qu'être d'accord. Mais c'est pas toujours facile de vous comprendre


    Citation Envoyé par souviron34 Voir le message
    Et toi tu devrais allez faire un tour sur le forum C

    ++i incrémente avant... Si donc ce n'est pas un entier mais un pointeur, référencer ++p ou p++ n'ont strictement rien à voir...

    Or la syntaxe , si on commence à l'utiliser, on ne distinguera plus comment l'utiliser pour des entiers et pas pour des pointeurs....

    D'où gros problème

    Déjà vu de nombreuses fois dans des codes....


    tab[++i] ...

    Tu as manqué le premier élément, et tu vas au delà du dernier
    Je te suis pas

    Es-tu d'accord que {tab[++i];} est équivalent à {i=i+1;tab[i];} ?
    Es-tu d'accord que c'est vrai quel que soit le type des éléments contenus dans tab?
    Es-tu d'accord que {tab[i++];} est équivalent à {tab[i];i=i+1;} ?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  20. #100
    Expert confirmé

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Pardon? On n'est pas dans l'optimisation là, mais dans les structures de base. Une liste ça ne fonctionne pas DU TOUT comme un tableau.

    Par ailleurs, pour des tables d'index (c'est sans doute de cela qu'on parle, ici : un tableau contenant des pointeurs vers des données), un triplement de la mémoire nécessaire n'est pas non plus un détail...
    et? c'est du niveau du détail de comment le service est rendu et de l'implémentation, certainement pas du service en lui même.

    Citation Envoyé par fcharton Voir le message
    Ca va être génial, je sens... Comme ça, on va pouvoir faire des insert dans le tableau, ou trier la liste et faire des recherches dichotomiques dedans.

    C'est un principe de base de l'informatique: les conteneurs ne sont pas échangeables, parce qu'ils ont des fonctions, et surtout de performances, très différentes. Un tableau, ou une pile, est idéal pour un accès aléatoire, une liste pas. Une liste permet des insertions, un tableau pas. Trier un tableau est généralement une bonne idée si on a des recherches à faire, trier une liste, pas trop...

    La STL fournit une SYNTAXE COMMUNE, mais elle ne rend pas les conteneurs interchangeables.
    et alors tu parles toi même de performance différente, certainement pas de but premier différent : stocker des données.
    quoi ça soit map, vector ou list, tu pourras associer plus ou moins facilement un index à une donnée, qu'on a besoin de performance dépendra du contexte, ça me rappelle qqun qui n'utilisait exclusivement des char* à la place des string sous prétexte que c'est plus rapide, et ça même pour les fonctions utilitaires qui ne sont appelés qu'une seule fois dans toute la vie d'un programme.

    Citation Envoyé par souviron34
    Tu veux que je te cite un exemple ??

    Les algorithmes de sweep-line en maths. Pour traiter N points entiers, on stocke entre 6 et 10 à 12 N en mémoire...

    Alors il me semble que ce n'est pas négligeable, une mémoire multiliée par 10.. Et si tu as 10 millions d'objets, tu passes juste d'une mémoire normale à devoir avoir une mémoire dédiée....

    Et comme de plus on fait souvent tourner plusieurs softs en même temps, les problèmes de mémoire ne sont pas négligeables.

    C'est justement une des plaies du gaspillage actuel de ressources....
    et encore un cas très particulier pour essayer d'en tirer un enseignement général ...

    je vais prendre un autre exemple, j'ai de 10 à 100 entiers à stocker, des fois de temps en temps je fais des insertions et des suppressions, alors vector ou list?
    bah n'importe lequel, mes contraintes en temps et en place sont tellement insignifiantes que l'un ou l'autre n'aura pas de conséquences dramatique à l'exécution.

    est ce que je peux dire que dans tous les cas ça sera vrai? bah non, par contre si j'ai suffisamment découpé mon code, je pourrai changer de conteneurs assez facilement et m'adapter à d'autres contraintes.

Discussions similaires

  1. Les frameworks de persistance (ORM) sont-ils dangereux pour les performances ?
    Par SQLpro dans le forum Débats sur le développement - Le Best Of
    Réponses: 205
    Dernier message: 04/02/2017, 16h43
  2. Les IDE sont-ils dangereux pour les développeurs ?
    Par Cedric Chevalier dans le forum Actualités
    Réponses: 85
    Dernier message: 13/05/2014, 11h41
  3. Interview : Les premiers résultats de Numergy sont-ils bons ?
    Par Gordon Fowler dans le forum Cloud Computing
    Réponses: 4
    Dernier message: 24/10/2013, 14h27
  4. Réponses: 46
    Dernier message: 12/05/2012, 09h56
  5. Réponses: 30
    Dernier message: 06/09/2009, 08h17

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