Ce sont des défauts qui me gênent énormément !
Version imprimable
C'est marrant car je suis hyper d'accord avec les réserves sur l'unicode mais quand j'ai commencé ce job, l'unicode n'existait pas et l'évenementiel n'était q'un futur caprice d'éditeur d'os acharné sur sa concurrence. Du coup ces réserves me seraient jamais venues à l'idée même si C# évolue dans une autre galaxie, je reste un "vieux" qui lançait sa makefile en ligne de commande sur cross-compilateurs ..
Reste que la lignée des compilos C et descendants C++ a gardé une authenticité d'un autre age que vous percevez comme des défauts mais je ne peux pas m'empêcher de penser que faire une telle infidélité à Kernigahn et Ritchie serait dénaturé C++ et son papa unix
Ce ne serait plus du C et donc il faudrait presque changer son nom, déjà que C++ était implémenté sous forme de préprocesseur à l'origine...
En me mettant à votre place,
Est-ce que le pire défaut du C++ ne serait pas cette parentée avec K&R justement ?
Ça semble complètement dépassé alors que la syntaxe du C a été adoptée par une bonne douzaine de languages de premier plan...
A mon avis , C++ est arrivé un peu trop tôt dans la généalogie des langages objets. La volonté de préserver à tout crin la logique du C est son péché originel. (bibliothèque arborescente, éditeur de liens statique, ...)
Seulement voilà : ces deux languages sont restés monopolistiques dans les systèmes d'exploitation ... Changer C ou C++ comme vous le dites, c'est renoncer à compiler Windows avec !!!!!!
Big problem !
C'est comme scier sa branche ...
Changer C++ dans ce sens me semble simplement impossible avant des décennies.......................... à supposer qu'un fou décide d'écrire un nouvel OS dans un autre language ... Y-A-T-IL DES CANDIDATS ?
Autant je suis on ne peut plus d'accord sur le premier, autant sur le second, ce n'est pas un véritable problème.Citation:
* Les gens qui enseignent/pratiquent le C++ comme du C
* Les différentes implémentations des compilateurs ...
Les problèmes de compatibilité des compilos surgissent surtout quand on commence à faire de la voltige à coup de templates. Et du coup ... on se retrouve à écrire à la place le même genre de code que celui que l'on aurait écrit avec les autres langages de la même famille. (non parce que ... les extérieurs qui nous regardent râler, ne percuteront jamais que c'est relativement à des fonctionnalités dont ils ne peuvent même pas rêver avec leur langage mainstream)
Un problème connexe, mais plus ennuyeux à mon gout : l'inertie relative aux montées de versions. Dans nos processus industriels, on ne peut pas monter de version quand cela nous chante et comme cela nous chante. Du coup on se retrouve vite bloqué avec des outils (compilos, libs, OS, cartes graphiques) désuets et limités quand on les compare à l'état de l'art. Mais cela n'est pas propre au C++. C'est valable avec les autres langages qui évoluent (et avec les autres fameworks également).
Peut-être un des défauts les plus rebutants pour les débutants:
les messages d'erreurs incompréhensibles dès lors que l'on utilise la STL ou de la méta-programmation...
Plus je tourne cette question plus son caractère absurde me semble impossible
Tous les kernels systèmes sont en C, tous les runtimes évenementiels sont en C, tous les langages de haut niveau (PHP, Java, ..) sont écrits en C !
Implémenter les fonctions de ces langages dans le C(++) me semble un court-circuit dans l'espace-temps, une porte des étoiles, un truc qui changerait l'eau en rayon cosmique ou plus sérieusement, remet en cause le principe de causalité ce qui rendrait l'univers improbable et risquerait de plonger l'humanité dans une boucle infinie
Il faut quand même bien écrire tous ces trucs avec quelque chose !
L'assembleur, oui mais on a dit depuis 45ans que le C était mieux... l'écrire dans un language écrit en C serait limite impossible (quoique...)et tous les systèmes écrits en Pascal ont été entièrement réécrits en C (++ ou non)
Au bout du compte : C++ restera une extension de C basée sur les mêmes principes et tant qu'on n'aura pas inventé de processeur quantique qui se programme en völapuk , ça ne changera pas
SAUF SI
Les éditeurs de compilateurs décident de créer un "C for Applications", différent du C for System, qui lui vient avec l'OS et permet de le recompiler (sous unix) ou vient de µsoft qui n'autorise pas la recompilation de windows mais la création de drivers, services...
Au final , on se retrouve avec 2 C différents dont l'un possède son C++ dérivé et l'autre, un C++ entièrement réécrit. Dans ce cas , il devient possible de gérer l'Unicode, les ressources, supprimer les wizards et autres générateurs de code au profit de références sur des bibliothèques. Un peu comme C# mais sans framework ni garbage collection...
Mais un tel langage mériterait-il de s'appeler C++ ?
Microsoft ne le fera jamais, Gcc non plus.... Ceux d'entre vous qui ne comprennent pas où je veux en venir auront plus de succès en étudiant Java ou C# , langages très voisins, très performants, dix fois plus faciles à apprendre et ouvrant sur d'excellentes carrières!
Enfin , on peut faire comme Sarah Palin, affirmer que l'homme et le dinosaure ont vécu en harmonie sur terre il y a 12000 ans, ne pas penser, juste coder...
Comme certaines personnes ici, je suis un grand adepte du C, et j'ai aussi pas mal touché au C++.
Je suis tout à fait d'accord avec pas mal des "faiblesses" du C++, comme les messages d'erreur quand on utilise la méta-programmation ...
Mais il y a un point qui est cité qui pour moi et un énorme avantage : séparation entre la déclaration et l'implémentation (.h / .cpp).
Cette organisation permet de savoir rapidement comme utiliser du code sans forcement avoir à tout lire. Je développe une bibliothèque, et quand je veux l'utiliser, j'en ai rien à faire de comment elle fonctionne, je veux juste savoir ce qu'elle fait et comme lui "parler". C'est dans le même esprit que le paterne MVC.
Après, c'est vrai que ça crée de la redondance d'information.
C'est très personnel, mais pour moi, le plus grand défaut du C++, c'est sa proximité avec le Java. Je n'ai pas voulu mélanger les deux.
Un peu comme ne pas apprendre l'Italien quand on sait l'Espagnol.
C++ est arrivé au moins 5 ans avant java. Ces deux languages n'ont pas la même façon de compiler ni de fonctionner. La plupart les outils java (notamment la VM) sont écrits en C++
C++ est une bible, java un prêtre.
Java est le language à connaitre si vous ne voulez pas "entrer dans les ordres" et y consacrer votre vie.
Concrètement, la maîtrise de C++ réclame beaucoup plus d'efforts et eu égard à ce qui est écrit plus haut, ça devrait empirer !
La meilleure façon de savoir comment utiliser un code est de lire la documentation associé.
Quand tu utilises une fonctionnalité de Qt par exemple, tu ne vas pas t'amuser à chercher le .h correspondant à la classe. Un rapide coup d'œil sur la doc et tu as tout ce dont tu as besoin. En Java pareil avec la Javadoc.
Et donc je réitère que la séparation du .h et du .c est une complexité en plus pour rien (ou si vous voulez pour une chose que l'on peut faire autrement et proprement).
En repensant à ce topic , j'ai été saisi d'une question : est-ce que ceux qui enseignent le C++ expliquent sa particularité de langage système. Je suis allé sur Wikipaedia france et english http://en.wikipedia.org/wiki/C%2B%2B
Et je lis à peu près la même chose qu'ici à savoir que C/C++ est juste un langage comme les autres en plus compliqué. Il n'en est rien messieurs-dames!
Même si wiki n'aborde pas ce point (c'est donc un scoop) il faut savoir que l'immense majorité du logiciel grand public mondial est écrit en C/C++ , en fait un mélange de C et de C++. C'est le cas de Windows, IE, MSN, Office (tous les logiciels) VisualStudio, Notepad, Firefox, Chrome, Photoshop, The Gimp, .....etc....
Bien sûr tout Linux est en C/C++, tout ce qui tourne sur iPhone, Ipad (y compris applications) MacOSX est une version modifiée de Linux..
Mais aussi :
Tous les compilateurs C/C++, Les languages comme VBA, Javascript, la machine virtuelle Java. Egalement tous les jeux video (ceux qui s'installent via setup)
Tout ça et 99.99% du reste est écrit en C/C++ , généralement aux états unis !
Voilà pour le scoop
Maintenant le sujet du topic "que reprocher à c++" prendra peut-être une autre dimension...
Oulla faut pas forcer :D.
L'immense majorité du logiciel mondial ??? Les statistiques tu les sors d'où?
Un noyau système est forcément écrit dans un langage système (C/C++). Mais les logiciels qui tournent dessus pas forcément. Beaucoup de .NET, pour coder office, msn, visualstudio et windows même. Beaucoup de Java pour coder les jeux vidéos pour plateformes portables. Les jeux de la Xbox peuvent être codé en C# (avec XNA).
MacOSX n'est pas une version modifié de Linux, mais d'Unix. Même pas une version modifiée, mais un descendant qui aujourd'hui n'a plus grand chose à voir avec.
Tout Linux n'est pas en C/C++. Le noyau est en C. Mais il y a beaucoup de Java, de Python, et même de .NET maintenant.
Je ne pense pas que l'évolution vienne des éditeurs de compilo qui, après tout, sont là pour répondre à la demande des développeurs. S'il y a évolution, elle viendra surement de la communauté, ou plutôt DES communautéS de développeurs.
Comme tu les dis, le C++ est utilisé par beaucoup de monde, pour beaucoup de choses et sur beaucoup de config différentes. Déjà, on peut voir ici et là des gens prechant pour leur paroisse du C++ : la métaprog pour certains, la gestion mémoire pour d'autres, la localisation, le fonctionnel, etc.
Si le langage (et les compilos) acceptent joyeusement le mélange des styles de programmations, il n'en va pas de même de ces communautés (et de l'esprit humain en général). Aussi il me paraitrait logique que les principaux domaines d'utilisation du C++ soient régulées par des "bonnes pratiques", qui conduiraient finalement à des règles strictes de codage... règles qui seraient vérifiées par le compilateur, donnant ainsi naissance a des sous-dialectes du C++.
Oui, je me doute que beaucoup vont s'écrier que ça bafoue leur droit fondamental à faire du code C++. Pourtant j'aimerai bien un monde où les browser web seraient codés en C++/nobufferoverflow, variante du C++ bannissant le char* et le strcpy. :D
Héritage multiple
Au risque de montrer que je suis un vieil ours (alors que je le cache en général) Il me semble que C++ est l'évolution "la moins ratée possible" du C vers l'objet que l'industrie ait réussi à produire.
L'imbrication du C et de l'industrie du logiciel est trop étroite pour permettre à la fois une évolution et une "compatibilité ascendante".Or sans cette dernière, le nom "C++" n'est pas légitime.
Pour ce qui est du "droit des communautés C++" , je réalise que c'est le volume de logiciel en C produit par un petit nombre de compilateurs qui rend cette question bizarre. Plusieurs millions d'années/homme de travail constituent le génie logiciel en C++ alors que .net n'existe que depuis 2001 à peu près.
On a vu beaucoup de nouveaux langages arriver et Google continue à nous en pondre de nouveaux, mais là je suis du coté de Steve Jobs : le vrai logiciel payant en C sur l'app store, le reste est gratuit sur internet ! fin de la récré !
Si vous saviez le nombre de vies humaines qui se sont appuyées sur C/C++ pour produire de l'intelligence numérique... C'est vrai qu'un jour les choses changeront, mais pour l'instant , l'organe vital du logiciel depuis les années 50 est le C/C++ , le Basic a plus ou moins inspiré les langages à garbage collection.
Au final , cette discussion m'a fait prendre 20 ans, je me sens affreusement vieux
Tu peux nous citer tes sources s'il te plait ? ça me parait assez abérant ce que tu affirmes.
Même si la programmation système est souvent associée au C/C++, je ne pense pas que le terme "immense majorité" soit approprié ici. Comme l'a souligné ilys05, d'autres langages sont utilisés en plus d'un langage système dans le "logiciel grand public mondial".
Hum... Pour moi ca aurait été "le moins mal possible" si le C++ avait proscrit l'écriture de code "façon C". Aujourd'hui le terme C++ est systématiquement accolé au terme C, ce qui entretient le flou entre les deux langages. D'ailleurs comme ca a été dit ici c'est un problème lors de l'apprentissage du langage : en pratique, on est obligé d'apprendre le C si on veut coder en C++. Non pas que c'est "obligatoire", mais dans les faits (tutos, sources, librairies) les deux langages sont mêlés.
Je ne suis pas un grand expert de c++ mais je suis d'accord avec ce qui a été dit avant.
Personnellement, ce que je reprocherais à C++ n'est pas tant le langage en lui même que la documentation qui l'accompagne.
Faisant beaucoup de Java, je trouve que l'apport de la Javadoc a été énorme et peut être le fait que le langage soit sous la responsabilité d'un principal acteur (Sun) a permis de centraliser les ressources. Si je cherche une info, je vais chez Su... Oracle et voila (j'exagère un peu). De plus, la version du langage est clairement établie. Si je consulte une doc, je sais que c'est pour la 1.4 ou la 1.5.
En fait peut être que le problème de C++ c'est le trop grand nombre d'acteur (ce qui a déjà été dit) qui ont participé à son évolution.
Sa syntaxe.