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

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

C++ Discussion :

Le C++ serait-il vraiment victime de son passé ?


Sujet :

C++

  1. #101
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Le C with classes [c'est l'absence de RAII] Le C++ moderne [c'est la présence de RAII]
    Pas vraiment d'accord.

    Le C with classes, c'est
    - un typage beaucoup plus faible,
    - l'absence d'heritage multiple,
    - l'absence des classes abstraites,
    - ...

    Les destructeurs étaient déjà présents mais je ne sais pas si l’idée du RAII était déjà exprimée et systématisée.

    Le C++ classique, c'est le C++ "orienté objet", les exceptions, les templates de base (les collections). Le RAII est déjà systématisé quand j'ai commencé à faire du C++ au début des années 90. (Je me souviens en avoir regretté l'absence en Ada et avoir été déçu par les types contrôlés d'Ada95).

    Le C++ moderne, c'est la STL et l'abandon du tout objet avec l'adoption d'une approche consciemment multi-paradigme y compris par les templates "avancés".
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  2. #102
    Membre éclairé

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Si le RAII était systématique, ça serait bien. C'est loin d’être le cas.
    Je crois que Luc sait très bien que sa vision de ce que signifie "moderne" pour le C++ date de plus de 10 ans. Mais cela reste "moderne" dans le sens ou beaucoup pensent encore le C++ en termes de bas niveau et gestion manuelle de la mémoire.

    Dans une autre discussion, je dis :
    Citation Envoyé par mintho carmo Voir le message
    Dans une autre discussion, Luc dit que le C++ "moderne", c'est l'utilisation du RAII. Je crois que c'est plus profond que cela. Le C++ moderne, c'est une façon différente de penser la conception d'application. En particulier penser la conception d'application a long terme (et donc ne pas forcement se focaliser sur le hack qui va nous faire gagner 1% de performances, mais poser pleins de problèmes de débogage et d’évolution du code). Le conséquence est de penser différemment la gestion de la mémoire et des erreurs et donc penser en termes de RAII.
    Je suis d'accord sur le fait que "moderne" signifie aussi l'abandon du tout objet. Mais cela n'est pas incompatible avec la vision de Luc.
    Pour moi, "moderne" c'est avoir une vision plus large, gagner en abstraction et laisser les détails hardware de cote (lorsque l'on a a pas besoin). Le RAII, la meta prog en font partie

  3. #103
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    On peut aujourd'hui faire du C++11 très moderne embarqué avec avr-gcc (puces atmel, sur Arduino par exemple).

    C'est pas du C++ with classes, mais il n'y a pas de STL disponible

    (mais grâce au C++11 et aux variadics templates j'ai pu refaire un semblant de boost.MetaStateMachine très sympa! )

  4. #104
    Membre éclairé

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Sauf erreur de ma part, pas d'exception avec arduino et donc pas de RAII.
    Du coup, c'est moderne ou pas de faire de la meta prog avec gestion manuelle de la mémoire ?
    Je ne prendrais pas le risque de trancher, je préfére botter en touche en disant que l'embarque, c'est un autre monde

  5. #105
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    J'avoue avoir fait le rapprochement C with classes et C++ historique, voire C/C++, car c'est ainsi que je le ressens dans les propos tenus. Je ne cherchais en aucun cas à désigner un ancêtre officiel du C++, mais une façon de travailler en C++.

    Le RAII (/ce que l'on fait avec des destructeurs) a été exprimé il y a pas mal de temps, mais dans les mœurs, ce n'est pas compris ou pas utilisé (ce qui revient un peu au même). Le moment où l'on commence à parler de C++ moderne, c'est quand on intègre cet outil à notre vocabulaire. Généricité et templates sont un excellent outil, mais c'est limite un détail dans l'écriture de codes robustes (relativement aux ressources). Du moins, c'est ainsi que je le ressens. Et c'est le propos du billet de CoderGears, et de quelques autres que moi qui considèrent que la plus grosse différence entre le C et le C++, ce sont les destructeurs.

    Je ne range pas templates et meta-prog dans le C++ moderne (bien qu'au fond c'est une appellation qui devrait sans cesse évoluer). Il faudrait d'abord que le RAII soit universellement intégré pour que j'accepte véritablement le changement de nom. Autrement dit, que les cours de C++ RAII-less aient disparus, et que personne ne vienne à troller le C++ sous l'angle : "il n'a pas de GC, il faut tout gérer à la main".

    Ouaip. Je vais rester avec ma définition quelques décennies encore le temps que la conception du C++ dans les esprits ne se modernise

    PS: pas besoin d'exceptions pour profiter du RAII
    PPS: je considère que le C++ moderne se simplifie encore plus avec des choses comme make_unique -- enfin, c'est plus lourd côté syntaxe, mais c'est en contre partie plus robuste, et un [minicode]find | xargs grep "\<new\>"[/minicode] nous permettra de trouver facilement des maillons faibles.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #106
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Il faut dire que le nom de RAII est tellement non-indicatif... Il ne fait pas vraiment la pub du concept.
    Ma première réaction fut "Okay, le fichier est ouvert dès l'appel du constructeur. Ce qui veut dire qu'il ne peut signaler l'échec qu'en lançant une exception (désolé, j'étais en plein apprentissage de Java à l'époque) En quoi est-ce mieux qu'une méthode open()?"

    Il faudrait un nom plus indicatif du genre "Resource Release when Scope Terminates"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #107
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Entres autres, j'ai croisé RFID: Resources Finilization is Destruction.

    La question, est-ce que "finally" a correctement été introduit (dans les cours) en Java pour s'assurer qu'il y aura toujours un close() en face du open() ? Car je soupçonne que le problème est loin de nous être propre.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #108
    Membre éclairé

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 684
    Points
    684
    Par défaut
    Pas besoin de gérer les ressources en Java, il y a un garbage collector (ok, troll inside...)

  9. #109
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Et hop, comment rediriger sur la seconde de partie de la diatribe de B.Stroustrup sur les mythes attachés au C++: les GC -> http://isocpp.org/blog/2014/12/myths-2
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #110
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    Sauf erreur de ma part, pas d'exception avec arduino et donc pas de RAII.D
    de toute façon, pas de new non plus et le malloc vivement découragé.

    Mais le RAII avec destructeur est très intéressant même sans utilise d'exceptions.

  11. #111
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    Si le RAII était systématique, ça serait bien. C'est loin d’être le cas.
    Je ne voulais pas dire que son usage était systématique, mais que c'était une technique employée consciemment. J'aurais peut-être dû dire théorisé.

    Citation Envoyé par Luc Hermitte Voir le message
    J'avoue avoir fait le rapprochement C with classes et C++ historique, voire C/C++, car c'est ainsi que je le ressens dans les propos tenus. Je ne cherchais en aucun cas à désigner un ancêtre officiel du C++, mais une façon de travailler en C++.

    Le RAII (/ce que l'on fait avec des destructeurs) a été exprimé il y a pas mal de temps, mais dans les mœurs, ce n'est pas compris ou pas utilisé (ce qui revient un peu au même). Le moment où l'on commence à parler de C++ moderne, c'est quand on intègre cet outil à notre vocabulaire. Généricité et templates sont un excellent outil, mais c'est limite un détail dans l'écriture de codes robustes (relativement aux ressources). Du moins, c'est ainsi que je le ressens. Et c'est le propos du billet de CoderGears, et de quelques autres que moi qui considèrent que la plus grosse différence entre le C et le C++, ce sont les destructeurs.
    J'ai déjà dis que c'était l'aspect du C++ que j'ai le plus regretté quand j'ai fait de l'Ada au milieu des années 90. C'est pour moi une des deux caractéristiques fortes du C++ (la second c'est dans le traitement de la généricité, mais ça je ne l'ai découvert qu'après ma période Ada)

    Je ne range pas templates et meta-prog dans le C++ moderne (bien qu'au fond c'est une appellation qui devrait sans cesse évoluer). Il faudrait d'abord que le RAII soit universellement intégré pour que j'accepte véritablement le changement de nom. Autrement dit, que les cours de C++ RAII-less aient disparus, et que personne ne vienne à troller le C++ sous l'angle : "il n'a pas de GC, il faut tout gérer à la main".

    Ouaip. Je vais rester avec ma définition quelques décennies encore le temps que la conception du C++ dans les esprits ne se modernise

    PS: pas besoin d'exceptions pour profiter du RAII
    Non, mais l'exception safety a été un facteur important dans la prise de conscience de l'importance de la technique. Trop important si on arrive à penser que c'est lié. La technique et le terme date d'avant l'introduction des exceptions en C++.

    PPS: je considère que le C++ moderne se simplifie encore plus avec des choses comme make_unique -- enfin, c'est plus lourd côté syntaxe, mais c'est en contre partie plus robuste, et un [minicode]find | xargs grep "\<new\>"[/minicode] nous permettra de trouver facilement des maillons faibles.
    J'étais dans une approche historique des meilleures pratiques (en m'arrêtant au C++ 2011 d'ailleurs, il y a le C++ contemporain qui suit le moderne, comme en histoire -- on va bientôt avoir un C++ du temps présent -- et je peux mal commenter sur celui-là que je n'utilise que dans des projets perso, au boulot une des cibles reste Solaris avec un compilo figé )

    Il y a des strates. On les retrouve dans l'enseignement. Dans les projets. Dans la tête des gens qui pour certains croient pouvoir arrêter à apprendre et vivre sur leurs acquis. Et oui, il y a des gens qui ne sont toujours pas passé complètement au C++ classique et qui enseignent leur pratique.

    En passant, si le RAII est un vieux thème, son importance a été renouvelée par l'accent mis sur les valeurs dans ce que j'ai appelé le C++ moderne (continuée par le déplacement en C++ contemporain).

    Citation Envoyé par Médinoc Voir le message
    Il faut dire que le nom de RAII est tellement non-indicatif...
    Le nom a au minimum 25 ans.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #112
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour gl.

    J'ai plaisir à discuter avec vous tous, et j'apprends/consolide mes connaissances. Ces pseudo-troll que je lance me permettent de connaître plus précisément vos points de vue, et de les confronter avec mon expérience et mes déductions. Mais s'il vous plaît, pas de mauvaise foi :

    Citation Envoyé par gl Voir le message
    Juste les déviations ! Pourtant n'est ce pas toi qui a écrit :

    Citation Envoyé par moldavi
    le mot clé "auto" du C++ ne devrait pas exister...
    La phrase complète c'est :

    Citation Envoyé par moldavi
    le mot clé "auto" du C++ ne devrait pas exister... (sauf dans une boucle, à la rigueur, à cause des stl type).
    C'est déjà plus nuancé et mes messages d'après le prouvent. Je ne peux pas tout de suite faire une thèse sur le fond de ma pensée. Alors je lance une idée et on discute. Même si ma façon de dire les choses peut paraître extrême, elle reste ouverte à la discussion.

    Citation Envoyé par gl Voir le message
    Si c'est l'usage intensif de template et de métaprog, je suis d'accord.
    C'est cette idée là, évidemment. Je suis content que le C++ ait toute cette richesse de programmation. Personnellement je vois dans les templates une aide formidable pour les développeurs de la STL. Mais pour une application classique, non. Les templates demandent une certaine technicité qui complique la lecture d'un code fonctionnel. Les templates poussés dans leur dernier retranchement, ce n'est quand même pas quelque chose de facile à aborder.

    Avec les templates, cela est suffisamment complexe pour que les développeurs lâchent l'affaire. Avec auto, je sens une sorte de pollution future, parce que beaucoup plus simple à utiliser.

    Beaucoup de personnes ici, vont utiliser sciemment auto, parce qu'ils ont de l'expérience. Mais les débutants, que vont-ils en faire ? La question générale, c'est trop de possibilités, trop de "frameworks" = confusion.

    Et je sais, c'est difficile de tout concilier.

  13. #113
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour JolyLoic.

    Citation Envoyé par JolyLoic Voir le message
    Un exemple où un auto entier m'a aidé ? Passage en 64 bits d'un code contenant à la fois des collections STL et des collections maisons que l'on vire peu à peu où les indices et tailles étaient gérées en signed int. Donc en gros plein de confusions et de casts entre int, size_t, unsigned_int, long, unsigned long....
    Quand je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int elementCount = maCollection.size();
    Je n'ai aucune idée si le code en question est correct ou pas, et s'il va le rester.
    Si à la place j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto elementCount = maCollection.size();
    Je sais que mon code est forcément correct. L'équivalent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeDeMaCollection::size_type  elementCount = maCollection.size();
    Me semble moins intéressant, car il m'impose de connaitre le type exact de ma collection, alors que celui-ci peut varier au cours des refactorings.
    Ne serait-ce pas un problème de compilateur ? auto sauvera-t-il toutes les situations lors d'un passage de 32 bits à 64 bits ?

    Pour ma part, tous les programmes que j'ai passé de 32 bits à 64 bits (sans auto), n'ont posé aucun problème.

    Alors est-ce un réel argument ?

  14. #114
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par moldavi Voir le message
    Alors est-ce un réel argument ?
    Oui, le code qui utilise auto est (forcément) moins sensible aux changements.

    auto est très bien lorsque le type est :
    - peu important car le type que l'on récupère offre un service (par exemple pour les itérateurs obtenus avec begin et end).
    - inclus dans le nom de la fonction qui créé l'objet (make_pair, make_unique, async)
    - non connu (comme le type des lambdas : auto fct = []() { };)

  15. #115
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par moldavi Voir le message
    C'est cette idée là, évidemment. Je suis content que le C++ ait toute cette richesse de programmation. Personnellement je vois dans les templates une aide formidable pour les développeurs de la STL. Mais pour une application classique, non.
    Une application classique, c'est quoi ?
    Dès qu'on fait des "maths", il n'y a aucune raison pour que notre code fonctionne avec int mais pas long int ou avec float mais pas double.
    Souvent on utilise std::vector, même si l'utilisateur n'écrit pas de templates, il en besoin. Avoir une interface similaire pour les différents tableaux (de int, de double) facilite la programmation.
    Si une classe propose un service et que pour proposer ce service, elle en besoin de d'autres services, ces derniers n'ont pas besoin d'être des types précis, ils doivent juste offrir les services voulus. Le code gagne en généricité et souvent en abstraction. En effet, c'est rarement nécessaire lorsqu'on fait une tâche bien précise mais il s'agit plus d'un paradigme de programmation (en Python, tout est template (dynamique)).
    Grosso modo, ça dépend du niveau d'abstraction et de séparation qu'on veut (offrir).

  16. #116
    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
    Bonjour,

    Citation Envoyé par moldavi Voir le message
    Personnellement je vois dans les templates une aide formidable pour les développeurs de la STL. Mais pour une application classique, non. Les templates demandent une certaine technicité qui complique la lecture d'un code fonctionnel. Les templates poussés dans leur dernier retranchement, ce n'est quand même pas quelque chose de facile à aborder.
    Évidemment, comme toute bonne chose, il ne faut pas en abuser. Mais les templates peuvent résoudre certain nombre de problèmes (voir le CRTP par exemple), et peuvent permettre certaines optimisations (voir les opérations matricielles par exemple). Je ne suis pas un grand utilisateur de templates, parce que je suis plus à l'aise avec la façon de penser "orienté objet"*, mais parfois je m'y résous car c'est tout simplement la meilleure solution.

    Citation Envoyé par moldavi Voir le message
    Avec les templates, cela est suffisamment complexe pour que les développeurs lâchent l'affaire. Avec auto, je sens une sorte de pollution future, parce que beaucoup plus simple à utiliser.
    Je ne sais pas quoi répondre à ça, la complexité est une notion très subjective. Mais C++ n'est pas le seul langage qui offre différentes approches pour résoudre les problèmes. C#, par exemple, offre grosso-modo les mêmes "paradigmes" (orienté objet, générique, et on peut même faire du procédural en c# en utilisant des fonctions "statiques").

    Citation Envoyé par moldavi Voir le message
    Alors est-ce un réel argument ?
    Oui c'est un réel et excellent argument mais tu ne l'as pas compris. Le cas du passage de 32 à 64 bits n'est qu'un exemple. L'argument est: ce qui est important c'est ce que fait un code, pas les types qu'on manipule.


    * Ici, par "orienté objet", je veux parler des mécanismes de substitution, les "old good" DP du GoF, héritage et polymorphisme, etc. Je sais bien que la programmation générique n'est pas totalement séparée de la vision objet, les deux fonctionnent ensemble, mais ce n'est tout de même pas tout à fait la même façon de concevoir les problèmes, et surtout, leurs solutions.
    « 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

  17. #117
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour Ehonn.

    Citation Envoyé par Ehonn Voir le message
    Une application classique, c'est quoi ?
    Pour rester simple, je vais faire la distinction entre deux cas de figure. Les bibliothèques et les "applications classiques".

    Une bibliothèque (comme la STL) a pour vocation d'offrir de multiples services, en espérant répondre à l'ensemble des demandes. Une application classique doit répondre à une demande précise. La philosophie de développement de ces deux types d'application n'est pas du tout le même. Et les outils du langage ne seront aussi, pas les mêmes.

    Citation Envoyé par Ehonn Voir le message
    Dès qu'on fait des "maths", il n'y a aucune raison pour que notre code fonctionne avec int mais pas long int ou avec float mais pas double.
    Souvent on utilise std::vector, même si l'utilisateur n'écrit pas de templates, il en besoin. Avoir une interface similaire pour les différents tableaux (de int, de double) facilite la programmation.
    Si une classe propose un service et que pour proposer ce service, elle en besoin de d'autres services, ces derniers n'ont pas besoin d'être des types précis, ils doivent juste offrir les services voulus. Le code gagne en généricité et souvent en abstraction. En effet, c'est rarement nécessaire lorsqu'on fait une tâche bien précise mais il s'agit plus d'un paradigme de programmation (en Python, tout est template (dynamique)).
    Grosso modo, ça dépend du niveau d'abstraction et de séparation qu'on veut (offrir).
    Désolé, mais je ne vois pas où tu veux en venir.

  18. #118
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour r0d.

    Citation Envoyé par r0d Voir le message

    Oui c'est un réel et excellent argument mais tu ne l'as pas compris. Le cas du passage de 32 à 64 bits n'est qu'un exemple. L'argument est: ce qui est important c'est ce que fait un code, pas les types qu'on manipule.
    Disons que me dire que c'est un "réel et excellent" argument ne suffira pas à me convaincre. Il en faudra plus. J'ai porté des programmes en 64 bits sans souci, et sans auto...

  19. #119
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par moldavi Voir le message
    Une bibliothèque (comme la STL) a pour vocation d'offrir de multiples services, en espérant répondre à l'ensemble des demandes. Une application classique doit répondre à une demande précise.
    Je ne suis pas, mais alors pas du tout d'accord avec ces 2 définitions que tu donnes. Je peux te donner très facilement des contre exemples pour les 2. L'un comme l'autre doivent répondre à un besoin, qui peut être d'offrir un unique ou de multiples services. Ce n'est pas l'état d'application ou de bibliothèque qui change ça...
    Si vous ne trouvez plus rien, cherchez autre chose...

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

  20. #120
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par moldavi Voir le message
    Désolé, mais je ne vois pas où tu veux en venir.
    Que si tu découpes bien ton programme, tu auras plus de chances d'avoir une partie du code template (et qui a vraiment du sens à être template). Et que, avoir du code template ou pas, est plus une question de paradigme / généricité plutôt que : code bibliothèque / application.
    Bref, avoir du code template dans une application peut être bénéfique pour la généricité et l'abstraction. Gérer les points de variations par des templates dans les applications est loin d'être absurde (et est même un réflexe pour moi).

Discussions similaires

  1. Serait-ce vraiment la fin du réseau peer-to-peer ?
    Par Cedric Chevalier dans le forum Actualités
    Réponses: 16
    Dernier message: 14/07/2013, 02h04
  2. Réponses: 3
    Dernier message: 03/02/2012, 09h52
  3. Réponses: 238
    Dernier message: 10/03/2011, 22h44
  4. Réponses: 4
    Dernier message: 15/04/2010, 10h49
  5. [power AMC] Quels est vraiment son utilité?
    Par alpachico dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 08/08/2005, 09h24

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