Non mais les vrais warriors codent en C et puis c'est tout.
Non mais les vrais warriors codent en C et puis c'est tout.
J'ai moi même fait la transition de C à C++ (je n'ai pas abandonné le C pour autant ) et honnêtement si c'était à refaire je ne le referais pas. C++ est syntaxiquement d'une complexité infinie par rapport aux langages modernes qui offrent les mêmes fonctionnalités et même avec un usage quasi quotidien je n'arrive pas à m'y faire. Je pense que ce fut une erreur de vouloir conserver aussi longtemps la rétrocompatibilité.
Sauf besoin impératif de compatibilité avec du code existant je ne pense pas que ça vaille la peine de se mettre maintenant au C++.
A mon avis, le principal problème maintenant, c'est qu'il y a compatiblité avec le C et que le programmeur C refait du C au bout de quelques jours plutôt que de devoir chercher comme faire plus efficacement en C++.
Il faut aussi se poser la question de ce que l'on fait avec le langage. En C++ on ne fait pas la même chose sur un micro-controlleur que pour un GUI ou un process server. C'est assez ouvert et c'est peut-être ça qui est déroutant (mais c'est le but du langage).
Si le C++ est si complexe, que dire du Java ou même du Javascript? Ca doit vous paraitre des usines à gaz incompréhensibles.
J'ai 47 ans, j'ai commencé à programmer à 14 ans en BASIC et assembleur 6502. Après PASCAL et assembleur 8085 pendant mes études d'électronique, puis assembleur 8051 pour mon stage de fin d'études. J'ai une formation d'électronicien, ce qui explique peut-être mon approche très près du matériel lorsque je programme. J'ai pratiqué VB et VBA au cours de ma carrière professionnelle, mais que c'est mauvais le VBA. Aujourd'hui, je ne me qualifie pas comme développeur. À la maison, je pratique le C (appris avec le K&R) et l'assembleur 8051 en loisir. Au boulot, c'est BASH et PYTHON quand le BASH ne suffit plus.
Regarde la documentation en ligne : (et encore je ne parle pas de toutes les ambiguïtés supprimées comme le "perfect forwarding" ou les rvalues, lvalues, xvalues, glvalues, et prvalues (universal ref???))
- Gestion de la mémoire (Dynamic memory management) que des templates
- Test de types (Type support) que des templates
- La STL c'est comme cela depuis 1998
- Les utilitaires comme std::function ou std::move ou function objects : des templates, encore des templates
Comme l'a dit nikko34 (et les vieilles habitudes qui ont la vie dure), le programmeur C qui veut faire du C++ moderne va vite abandonné
Au contraire le langage Java en lui même est très simple par rapport au C++. Il a volontairement choisi de se débarrasser des aspect compliqués de C++. Après si tu compte les bibliothèques standard ça n'est pas comparable su que celle de Java est bien plus fournie.
JavaScript c'est assez différent. C'est a la base un beau bordel qu'on a essayer de spécifier a postériori.
Pourquoi les generics en Java c'est simple et vector< string > en c++ ce serait compliqué?
Pourquoi se plonger dans la lib Java et pas dans la lib C++?
Je sais bien que c'est pas la même chose, mais je pense que c'est pas si compliqué à utiliser quand même?
Je veux dire, le duck typing, yen a dans plein de langage c'est si désobligeant de voir ses erreurs à la compilation?.
Je développe en C++ pour de l'embarqué, avec un environnement de cross compilation pour générer les binaires dans l’architecture cible.
Une fois compilé, optimisé, transformé en instruction processeur, qu'est-ce que ça change si en amont ça a été fait en C ou en C++ ?
Non, les génériques disparaissent à l'exécution.
List<String> c'est la même chose que List<Object> à l'exécution.
Sérieusement le C++ est au moins 10 fois plus compliqué que le Java.
Héritage multiple.
Alignement des champs de structures.
Possibilité de faire de l'asm inline.
Pas de garbage collector.
Pas de caractères "magiques" UTF-32 [edit : lire UTF-16].
Longtemps il a manqué des trucs de bases dans la librairie standard genre les threads. Il fallait traiter chaque OS. J'imagine qu'il en reste.
Surcharge des opérateurs.
Possibilité de faire du procédural, pas juste des fonctions statiques dans des classes.
Les pointeurs...
Les macros.
...
Alors que pouvoir implements multiple est beaucoup plus simple
Tu peux très bien t'en moquer, tu es libre de plomber tes perfs.
J'en ai jamais eu besoin, peut-être rencontré 1 seule fois.
Hé oui, il faut savoir ce que l'on fait, personne pour balayer derrière toi
J'ignore de quoi tu parles, n'en ai donc jamais utilisé ni rencontré, ça a pas l'air bien important donc.
Longtemps il a existé tout un tas de libs pour le faire (pthread, TBB, Boost, ...)
Ne les utilise pas si tu sais pas y faire, c'est juste un truc super utile sinon
C'est vrai que devoir écrire une classe mytho pour avoir une fonction main m'a toujours paru bien plus intelligent
Cf le garbage collector. J'imagine qu'il est plus simple de croire que tout est magie et laisser JAVA manipuler tout ça pour toi
Un outil très pratique hérité du C à la base
Sinon pour le troll JAVA vs C++ ça se passe ici http://www.developpez.net/forums/d18...t-cpp-vs-java/
Ce ne sont que des possibilités, dans un restaurant 3 étoiles, on ne prend pas tous les plats à la carte.Héritage multiple.
Alignement des champs de structures.
Possibilité de faire de l'asm inline.
Pas de garbage collector.
Pas de caractères "magiques" UTF-32.
Longtemps il a manqué des trucs de bases dans la librairie standard genre les threads. Il fallait traiter chaque OS. J'imagine qu'il en reste.
Surcharge des opérateurs.
Possibilité de faire du procédural, pas juste des fonctions statiques dans des classes.
Les pointeurs...
Les macros.
Et les "Pas de", c'est juste pas en standard, sinon, on trouve toujours notre bonheur avec des librairies supplémentaires.
Et avec JAVA 8 (fonctionnel, ...), tu vas péter un anévrisme.
P.S.: En plus, les trucs les plus cheloux (Les pointeurs, Les macros, ...), c'est à cause du C, donc comme argument pour interdire la migration/évaluation C vers C++, c'est assez moyen.
C'est de la provoc. Pascalien d'élection (Pascal VMS, Delphi, fpc, ...), COBOLISTE par obligation, j'ai maintenu du code C et C++. Je parle d'applications bancaires sur grands systèmes. Y a pas photo, pour comprendre ce qui se passe quand on ne l'a pas écrit soi-même C++ est infiniment meilleur que C.
Je me suis intéressé aux dernières versions, franchement, tout ça est fichtrement bien foutu. Ajoutez la portabilité, la communauté, et vous comprendrez que je regarde avec perplexité les managers réticents à ce langage. Notez, ils sont managers, pas forcément bons, donc !
J'ai une très nette préférence pour le C++ par rapport au C# / Java (pour poser le contexte).
Mais en quoi c'est un problème ?
En C# (mais je ferais la même chose en Java), j'ai toujours au moins une class static dans laquelle je mets des fonctions utilitaires (qui auraient été des fonctions libres en C++). J'imagine que c'est mal et trop collé sur la façon de penser C++, mais... c'est bien à ça que servent les classent statiques ? (Équivalent d'un namespace + fonctions libres en C++ ??)
Sinon la feature la plus intéressante, c'est quand même le destructeur appelé de manière déterministe.
Et ça ya peu de langage qui le font en fait?
Après reprocher au C++ de pouvoir faire plein de choses différentes avec, c'est fort. Mes programmes pour micro-controlleurs sans STL ni exceptions (pas dispo dans le compilateur) utilisent des features différentes du langage. Et c'est normal non? Mais on retrouve aussi des classes, des templates, des destructeurs (oui! plein!).
C'est effectivement ce qui me manque le plus dans les autres langages, et c'est sans doute l'amour de cette possibilité qui me fait détester les GC (sauf en programmation fonctionnelle <3).
Après en C, on peut facilement faire du nettoyage à base de Goto (plus fiables qu'en C++ à cause des exceptions), mais c'est moins propres. Dans les autres langages faut attendre que le GC fasse son boulot. Beeeurk
C'est totalement différent et incorrect
En généralisant à fond, on peut dire que le "duck typing" c'est un branchement à l'exécution, alors qu'avec le C++ moderne on "va programmer" le compilateur.
Je pense que c'est le seul langage et sauf cas d'optimisation poussée, où on doit s'en remettre autant au compilateur.
En Java, lorsqu'on fait un new on s'en fiche de ce que le ramasse-miettes fait. Lorsque tu vois les vidéos sur Youtube sur les déductions de types du Javascript tu te marres Mais, le Javasctipt fait tourner des millions de sites et les programmeurs s'en fichent.
C'est pour cela que nikko34 est côté de la plaque lorsqu'il dit "Après reprocher au C++ de pouvoir faire plein de choses différentes avec, c'est fort."
Ce qu'on reproche au C++ c'est 1) avoir trop d'outils 2) de connaître parfaitement le compilateur et ses subtilités
Je suis d'1 œil l'actualité Visual C++ , mais il me semble que même Microsoft a jeté l'éponge du compilateur C++: il prend CLang
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager