L'avis du newbie de base que je suis est que tant qu'on pourra dire ca d'un langage (qu'il faut bidouiller a longueur de journée), alors le langage est à éviter.
Version imprimable
Cette bidouille se fait principalement au niveau des librairies pour pouvoir offrir une interface commune quelque soit le système ou le compilo utilisé. De ce coté là, Boost fait un travail formidable. L'utilisateur lui n'a généralement pas besoins de bidouiller. L'utilisateur ne veut qu'utiliser du c++ standard et plus ça va, plus ça s'améliore.
Pour en revenir au sujet initial et à un des arguments ("C++ ne s'intéresse pas au DbC") voici quelques vieux articles sur lesquels je viens de retomber :
- http://www.state-machine.com/writings/samek0308.pdf
- http://portal.acm.org/citation.cfm?id=884714
Rajoutez les vieux messages de James Kanze au sujet du pattern NVI (même si ce terme était moins usité à l'époque), des pseuso frameworks (http://www.codeproject.com/KB/cpp/DesignByContract.aspx), les articles de Matthew Wilson et son Impecrfect C++, un papier adressé au comité pondu dans le contexte de la sortie du C++0x, et autres articles (http://www.jot.fm/issues/issue_2006_09/article3/), ...
Non, vraiment, on ne peut pas dire que la communauté C++ n'adresse pas la question de la PpC/DbC.
C'est pas le fait d'avoir quelques articles qui parle de Dbc que la communauté C++ s'intéresse beaucoup a ça.
d'ailleurs quelle sera la réaction d'un developpeur lorsqu'il lira un article du genre http://www.artima.com/cppsource/type_erasure.html ou on découvre l'avis très négatif de Alexander Stepanov sur oop et l'abstraction.
pour les articles il y en a tellement aussi varié au niveau de la manière d'appréhender la conception en c++.
On peut dire c'est bien d'avoir plusieurs points de vue mais un débutant est noyé dans toutes ces possibilités et points de vues et sincèrement je comprends très bien un débutant en C++ lorsqu'il me dit "C++ c'est très compliqué"
Parfois on ne te laisse pas le choix aussi quand ta boit se décide d'utiliser java en majorité tu es obligé de suivre (je vois un peu comment ça se passe chez moi, et j'ai l'impression que C++ tend a réduire de voilure, malgré le fait que les produits sont de bonne factures)....
C'est un peu le problème de tous les langages qui ont été très à la mode. On a pas mal de logiciels développés en C++, qui vieillissent et demandent à être maintenus ou adaptés, mais il devient de plus en plus difficile de trouver des développeurs de niveau suffisant (j'ai actuellement une recherche en cours sur ce genre de poste, et j'avoue être un rien terrifié par les profils que je vois passer...). Un peu parce que l'informatique attire moins les bons élèves qu'autrefois, un peu parce que le C++ passe de mode...
Du coup, on commence à détricoter le système : on garde le logiciel en C++, mais on refait les communications autour en Java, puis on reprend l'interface en C# ou un truc comme ca, à la fin il reste un petit moteur en C++, qu'on maintient jusqu'à ce que son créateur s'en aille, et qu'on le refasse dans le langage à la mode...
Et, forcément, comme la surface du C++ en entreprise se réduit, les écoles forment moins de développeurs C++, et les jeunes s'orientent moins vers ce langage, ce qui précipite l'effet précédent...
Maintenant, il ne faut pas non plus conclure à la mort du C++, juste le fait qu'il est actuellement en train de passer du statut de langage généraliste, à celui de langage spécialisé...
Francois
Ca commence a faire usine a gaz d'acvoir 3 technos en même temps, non?
même si c'est bien fiat ça peu vite être complexe ...
oui la théorie des cercles.Citation:
Et, forcément, comme la surface du C++ en entreprise se réduit, les écoles forment moins de développeurs C++, et les jeunes s'orientent moins vers ce langage, ce qui précipite l'effet précédent...
je ne pense pas non plus qu'il va mourrir, mais il est clair qu'il quitte certains domaines ou java/php/.... semblent plus à l'aise.Citation:
Maintenant, il ne faut pas non plus conclure à la mort du C++, juste le fait qu'il est actuellement en train de passer du statut de langage généraliste, à celui de langage spécialisé...
Bien sur... Mais on l'observe assez souvent dans des PME. En fait, faute de trouver les développeurs qu'on veut dans les technos qu'on voudrait, on choisit ses technos en fonction de ses développeurs. Ca résoud un problème (le pénurie de bons développeurs, et la difficulté à faire évoluer les gens dans un monde où les technologies changent vite) mais ca en crée un autre (la gestion du lien entre les technos, et des chicaias entre équipes quand il y a des bugs...)
Aussi, cette situation apparait assez naturellement quand les applications grossissent. Si tu as, par exemple, une grosse application qui fait des calculs, mais avec un module de gestion, et un IHM un peu moderne, tu vas parfois avoir un langage moteur+IHM (C++, Java, Delphi, C#), parfois deux, mais au delà, tu auras souvent des petits bouts écrits dans des langages spécialisés : VBA autour des exports utilisateurs, PHP si tu as un peu de Web, SQL si tu as une base de données, des bouts de scripts OS pour les mises à jour... Petit à petit, tu vas voir coexister plusieurs technologies.
Maintenant, le mélange n'est pas aussi difficile qu'on le croit, cela demande une bonne réflexion sur l'organisation des tâches (notamment sur les responsabilités de chacun en terme de maintenance), mais comme c'est devenu une situation assez courante, les OS modernes prennent cette coexistence en compte, et le rendent relativement paisible...
Francois
Ca c'est bien vrai
Avec un peu de chance, ça le fera réfléchir (non pas Stepanov, mais le développeur) :ccool:
Je comprends tout à fait ça. Je considère le c++ comme non seulement compliqué, mais même extrêmement compliqué. Bon, faut dire que j'en fais que 2 semaines par an :aie:
La marge entre débutant et expert est à mon avis très très vaste en ce qui concerne le c++. On n'y peut rien, c'est comme ça. Remédier à ça, ça serait créer un nouveau langage... et c'est ce que certains ont fait, avec tout ce que ça comporte comme réussites et échecs :mrgreen:
Bof.
C'est juste qu'en C++, il faut comprendre un minimum les trucs qu'on utilise, alors que les autres langages sont plus permissifs et permettent de coder sans vraiment comprendre comment les choses fonctionnent.
Je trouve que ça va plus loin que ça. Effectivement il faut comprendre ce qu'on utilise, mais pour comprendre à un niveau d'expertise élevé, alors ça implique de connaître une quantité de subtilités vraiment imposante. On ne peut pas se contenter de lire le standard du c++ et se dire ensuite, ok c'est bon, j'ai pigé. Là je mets de coté toute la librairie. Juste les core functionalities du langage.
a- D'accord. Mais, si par "communauté" tu entends "gens qui développent pour manger essentiellement" (on va dire), il ne faut pas se leurrer, ce sera exactement la même chose en Java et en C#. Ce problème je l'étends au LSP : le terme "est-un" est un faux ami qui fait que les gens dériveront des ListeTriee de Liste sans même comprendre pourquoi ce n'est pas bon. Après tout, "une liste triée est bien une liste..."
b- Chose qui sort d'un C++ien et qui fait des émules dans la communauté des érudits C++ (histoire de mieux cerner les sous-communautés). Voilà une communauté qui se pose d'autres questions de design.
ben si on vient en C++ et que l'on s'attend à ce que ça soit du JAVA, effectivement c'est compliqué.
Si on fait l'effort d'utiliser correctement la librairie standard, on comprend mieux
AHMA, si tu répètes ce genre de chose en face de Stepanov, il te mettra un bon coup de poing sur le nez (mérité) :mrgreen:. Le bonhomme a passé environ trente ans de sa vie à réflechir et expérimenter sur l'abstraction ! Et s'il n'est pas spécialement emballé par l'approche orienté objet c'est justement car il pense que l'OO est une philosophie douteuse pour abstraire les problèmes. ("philosophically unsound")
Citation:
Envoyé par Stepanov
Citation:
Envoyé par Stepanov
C'est la tout le malheur, si oop est a éviter , alors pourquoi on l'étudie a l'école et pire pourquoi la majorité des projets sont fait avec oop.
et si on raisonne bien ça reste un point de vue même si ça vient d'un guru, parce que si on suit ta logique on peut dire que C++ est a éviter parce que le fameux linus trovalds affirme que C++ est un langage horrible et il faut développer en C.
donc finalement beaucoup de courants se dégagent en C++ , et le développeur est noyé dans tout ça, et il entend beaucoup des phrases genre " Non tu comprends pas" dans cette communauté de C++, a force il sera traumatisé:).
Quelle logique ? Je suis d'accord avec toi, c'est un point de vue, d'autant plus intéressant qu'il vient d'un "guru" (tout comme les propos de linus sur le C++ portent à réfléchir), mais en aucun cas une vérité révélée.
Je voulais juste pointer qu'affirmer que Stepanov a "un avis très négatif sur l'abstraction", bah c'est juste complètement idiot.
C'est au contraire plutôt intéressant de constater que certaines personnes dans la communauté C++ recherchent l'abstraction sans passer forcément par l'OO (qui pour le coup ressemble dans ta bouche à une vérité révélée :mrgreen:). Le fait que de nombreux courants se dégage n'est-il pas l'indice le plus fort que la communauté C++ s'intéresse tout particulèrement à la conception, au point d'envisager des approches très différentes et d'accepter plusieurs paradigmes en son sein ?
avoir plusieurs approches au niveau conceptuel c'est très bien, d'ailleurs on peut combiner oop et generic dans un projet pour avoir une conception nikel.
le probléme réside au fait qu'on a même pas le temps de concevoir, on bataille avec les frameworks techniques encore, juste un exemple de base de données ou chaque boite a son propre framework C++ soit fait maison autour de odbc, oci ou autre, soit récupéré du web, il y en a tellement d'ailleurs :) , alors si on choisis un on passera beaucoup temps a debuger s'il ya un pb vu que forcement il nya pas une grande communauté qui utilise ce framework donc pas assez de retour.
pour un universitaire par exemple le c++ c'est très bien , il a tout son temps de bien faire les choses, mais en entreprise on veut se focaliser sur le métier et toute la complexité technique on veut l'éviter a tout prix, d'autant que le planing est généralement serré pour réaliser les projets, et finalement on fait du C# ou Java ou autre.
on peut se poser la question sur l'absence de la comité de standardisation des années pour évoluer le langage et surtout les librairies techniques pour éviter tout ce casse tête de choix et simplifier cette couche technique qui a fait beaucoup de dégâts a C++.
Le fait est qu'il a toujours fallu choisir, si tant est que le choix soit possible, la moins mauvaise solution...
La POO a longtemps été perçue comme la moins mauvaise solution, car c'est celle qui apportait un meilleur rapport complexité / problème, et de nombreux langages (y compris parmi les plus récents du point de vue historique) se sont engouffrés dans la brèche...
Les "grands penseurs" ont fini par remarquer que, dans certaines situations, la POO présente une série de lacunes, ne serait-ce que du point de vue de la granularité, de la flexibilité ou de l'obligation qui nous est faite de dupliquer encore et encore du code chaque fois que nous sommes confrontés à un problème similaire mais manipulant des données différentes...
Un simple exemple pourrait être n'importe quelle pile, file liste ou arbre binaire: En POO exclusif (comprend: sans avoir recours aux template et sans avoir une "super classe de base" object), si tu veux créer trois files contenant des données différentes (une file de A, une autre de B et une troisième de C, par exemple), tu te trouve face à l'obligation de réécrire trois fois un code strictement identique pour ta file, simplement pour l'adapter au type qu'elle manipule réellement.
Java et C# ont contourné cette restriction en décidant que tout type dérive d'un type de base "object" (quelle que soit son orthographe exacte), mais décidant de "tronquer" LSP ce qui les a obligés à prendre d'autres décisions restrictives vis à vis, par exemple, de l'héritage multiple.
La programmation générique est apparue le jour où les "grands penseurs" se sont rendus compte que si nous nous intéressons plus au comportement d'un objet qu'à l'objet manipulé, nous pouvons nous éviter bien des problèmes du à la répétition du code, le type de la donnée elle-même devenant plus ou moins secondaire.
Cette optique est-elle plus complexe :question: assurément car cela implique qu'il faille penser plus loin que le simple "j'attends tel service de tel type de donnée".
Quant à savoir si c'est "la moins mauvaise" solution, je dirais que chacun peut trouver sa propre réponse en fonction de la prépondérance qu'il donne à chacun des avantages et des inconvénients.
D'aucuns trouveront que cela rend la conception exagérément complexe par rapport au gain de flexibilité et à la capacité d'obtenir quelque chose pouvant travailler avec n'importe quel type de donnée, d'autres trouveront, au contraire, que la complexité ajoutée à la conception est largement "payée" par la souplesse obtenue.
Le premier groupe préférera sans doute rester dans une approche OO classique, le second concevra tout sur une base générique.
Et entre ces deux extrêmes, nous trouverons une quantité phénoménale de cas alternatifs plus ou moins proche de l'un ou l'autre, en fonction des capacités ou de l'habitude de chacun à manipuler la programmation générique.
Bien sur que cela reste un pur point de vue...Citation:
et si on raisonne bien ça reste un point de vue même si ça vient d'un guru, parce que si on suit ta logique on peut dire que C++ est a éviter parce que le fameux linus trovalds affirme que C++ est un langage horrible et il faut développer en C.
Et je suis persuadé que linus tovald n'est absolument pas le seul à estimer que C est meilleur que C++.
Tout comme je suis certains de trouver autant de gens qui détestent C++, que de gens qui détestent C# ou Java (ou tout autre langage d'ailleurs) et qui ne veulent pas entendre parler d'autre chose que d'un de ces langages...
C'est sans doute pour cela qu'il n'existe pas un langage unique et universel ;)
De tous temps, tout le monde a eu tendance à "tirer la couverture à soi"...Citation:
donc finalement beaucoup de courants se dégagent en C++ , et le développeur est noyé dans tout ça, et il entend beaucoup des phrases genre " Non tu comprends pas" dans cette communauté de C++, a force il sera traumatisé:).
Il suffit de voir le succès de tous les débats qui tentent de comparer deux langages, tous sites confondus.
Ceci dit, rien ne t'empêche malgré tout de n'utiliser que le paradigme POO du C++, et de n'utiliser que la S(T)L si tu le souhaite ;)
Après, tu ne peux pas reprocher à la communauté d'essayer "d'éduquer" les gens pour qu'ils évoluent vers une conception plus générique...
C'est, finalement, le but de toute communauté basée autour d'un langage de programmation ;)
Après tout, il est dommage d'avoir un langage puissant disposant de mécanismes capables de nous faciliter énormément les choses (en nous évitant entre autres de réécrire toujours la même chose adaptée), et de ne ne pas en tirer pleinement parti ;)
On peut évidemment reprocher à "ceux qui savent" d'oublier un peu facilement que ce qu'ils considèrent comme "allant de soi" est parfois très complexe pour quelqu'un qui débarque, mais c'est, malheureusement, un problème qui est présent tous langages ou technologies confondus :D