|
Publicité ' | ||||||||||||||||||||||||
|
|
#201 | |
|
Membre du Club
![]() |
Dans un forum C++, on me dirait surement l'inverse... Mais ce sujet traite bien de la position du C et du C++ dans le palmares des langages les plus utilisés. Ils font mordre la poussière aux autres...
Puisqu'en bon intégriste, vous cherchez les hérésies, alors vous devrez monter une croisade contre cette excellente référence du C++, qui ose inclure indisctinctement des références sur le langage C avec celles sur le C++: http://www.cplusplus.com/reference/ Quant au français, si tout latin était compris des français, alors ça serait du français de base, non? Pas fort votre exemple. Bref, je vous laisse parler religion. Moi c'est l'informatique qui m'intéresse P.S. Je me considère comme un programmeur de C/C++. Il est pas né celui qui me l'enlèvera pour me camper d'un côté ou de l'autre... Citation:
|
|
|
00
|
|
|
#202 | |
|
Membre émérite
![]() Étudiant Inscription : septembre 2006 Messages : 510 ![]() |
Citation:
Je ne saisis pas ce que tu veux dire. |
|
|
|
00
|
|
|
#203 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 448 ![]() |
'Alut
Citation:
Si tu fais une classe avec usage intensif d'héritage cela risque d'entrainer des ralentissements... mais j'en doute parce que les compilateurs sont particulièrement bien optimisés pour ce genre de code... maintenant avec les duo et quad cores tu peux optimiser ton code , utiliser le multithreading et roulez jeunesse
|
|
|
|
00
|
|
|
#204 |
|
Membre éprouvé
![]() ![]() Jonathan MERCIERInscription : mars 2009 Messages : 338 ![]() |
|
|
00
|
|
|
#205 |
|
Membre émérite
![]() Étudiant Inscription : septembre 2006 Messages : 510 ![]() |
|
|
|
00
|
|
|
#206 |
|
Membre du Club
![]() |
Vous devez comprendre que le C++ n'est pas une déviation du C, mais une extension. Il est 100% compatible, dans le sens de PC compatible ou autre compatibilité logicielle: backward compatible.
Je vais prendre un autre exemple: le broken english est une version de base de l'anglais courant. C'est pourtant bien de l'anglais. Le C++, c'est du C enrichi, avec des extensions pour lui permettre de supporter l'orienté objet. Les mots clés et opérateurs de base du C y sont tous, sans exceptions. Le C++ en ajoute quelques uns pour permette aux programmeurs C qui le désirent d'implémenter de l'OO. Mais la base en C reste intacte, aucunement déformée, car le C++ c'est du C. Si vous n'êtes toujours pas d'accord, alors vous devrez classifier le C de Kernigham & Ritchie comme n'étant pas du C non plus. Le K&R C est moins compatible avec le ANSI C que vous utilisez probablement que le AINSI C++. La seule hérésie du C++, c'est de ne pas porter la griffe de Dennis Ritchie! Mais elle porte quand même celle du ANSI/ISO, à qui le C a été transmis. A+ |
|
10
|
|
|
#207 | ||
![]() ![]() Inscription : juin 2002 Messages : 2 034 ![]() |
Citation:
Les incompatibilités entre le C et le C++. Le C++ englobe certes une grande partie du C, mais il n'est pas 100% compatible. Citation:
|
||
|
|
00
|
|
|
#208 | |||||||||||
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Malheureusement pour toi, le créateur du C++ lui-même n'est pas d'accord avec toi. Peut-être devrais-tu remettre tes certitudes en question ?
Citation:
Mais peut-être que Bjarne Stroustrup est un « intégriste » qui ne « s'intéresse pas à l'informatique » ? Quand tu prétends à une compatibilité à 100%, là encore tu te trompes : Citation:
Citation:
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|||||||||||
|
|
00
|
|
|
#209 | |
|
Membre du Club
![]() |
C'est surtout la redirection répétée pour accéder aux index qui ralentissait le programme. Il faut dire qu'on parle de cycles CPU en MHz ici
A+ Citation:
|
|
|
00
|
|
|
#210 | |||||
|
Membre du Club
![]() |
L'essentiel est dit ici:
«Thus, C++ is as much a superset of ANSI C as ANSI C is a superset of K&R C and much as ISO C++ is a superset of C++ as it existed in 1985» C'est exactement ce que je dis. Quant à M. Stroustrup, il parle pour parler. Il devrait aussi nous dire pourquoi les codeurs de C/C++, comme il dit, ont été obligé pendant longtemps d'utiliser les librairies C avec le C++, parce que les librairies C++ qu'il a proposé au départ (les iostream & cie) étaient nettement insuffisantes. Je sais ici de quoi je parle, ça m'a stressé longtemps. Nul besoin de dire que nous ne nous sommes pas privé des librairies C avant l'arrivé du STL Et il passe ça sur le dos des codeurs...On va lui pardonner, on lui doit bien ça Il me fait penser un peu à Linus Torval, que j'aime bien aussi, mais qui se tire dans le pied périodiquement. Il a passé des années à tenter d'assassiner GNOME pour louanger KDE, pour finalement changer son fusil d'épaule et inviter tout le monde à adopter GNOME pour proposer de boycotter KDE4. Les génies ne sont pas le bon Dieu. Pourtant, moi qui n'aurait jamais une fraction de son génie, il y a longtemps que j'ai compris que si IBM et Sun ont adopté GNOME, si GNOME est la base des suites Mozilla et OpenOffice, c'est que ça fait un moment que GNOME a gagné la course... Pourquoi a-t-il perdu sa salive? L'article référé ensuite dit que malloc(), c'est du C, et "new" c'est du C++. Évidemment, parce que "new", c'est de l'OO, alors que malloc c'est de la programmation fonctionnelle. C'est l'évidence que si on veut coder du OO, on doit utiliser new et autres outils "++", sinon, on se complique la vie. Par exemple (pardonnez, je suis rouillé un peu en C): Code :
Code :
Soyons logique! Ce n'est en fin de compte qu'une question de perception. Ou une question de purisme, c'est selon. ![]() P.S. autre détail genre "cassé", de Brice de Nice, les fichiers objets C peuvent être linkés et donc inclus avec les programmes C++. Quelques extern "C" et le tour est joué. Un seul et même programme. C ou C++? Citation:
|
|||||
|
11
|
|
|
#211 | ||||||
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Citation:
Mais aujourd'hui la situation a bien évolué. Le C++ n'est plus le « C with classes » de ses débuts, mais bel et bien un langage à part entière. Ce qui était justifié à l'époque ne l'est plus aujourd'hui. Tu ne peux pas te baser sur la situation telle qu'elle était il y a 20 ans pour justifier tes méthodes d'aujourd'hui. Un exemple que je trouve significatif (bien qu'il ne s'agisse que de code et non de conception) est le cast. La façon C, c'est « (type)valeur ». La façon C++, c'est static_cast<type>(valeur), dynamic_cast, const_cast et reinterpret_cast. Beaucoup de livres sur les bonnes pratiques en C++ déconseillent l'utilisation des casts à la C. Et c'est un exemple parmi tant d'autres. Citation:
C'est juste l'allocation mémoire « à la C++ » (encore un exemple). Citation:
Citation:
Quand tu dis que tu essaies de programmer objet, ça renforce ma sensation que tu résous tes problèmes d'un point de vue de programmeur C, et que tu te contentes de piocher dans le C++ un sous-ensemble de petites fonctionnalités pratiques. Citation:
Si le C était à proprement parler un sous-ensemble du C++, quelle serait l'utilité d'expliciter l'usage de code C via un bloc « extern "C" » ? L'intérêt de « extern "C" » est justement de permettre une rétrocompatibilité qui n'est pas naturelle (vu qu'elle doit être explicitée). Sinon, bien entendu que le paradigme objet se retrouverait manchot sans le paradigme impératif. Par ailleurs, le C++ se revendique comme étant multi-paradigme. En revanche, comme je l'ai expliqué avec quelques exemples (C-style cast vs C++-style casts, malloc/realloc/free vs new/delete), on ne peut pas assimiler le versant impératif du C++ au C. Citation:
Je ne vais quand même pas t'apprendre les différentes étapes de construction d'un binaire, non ?
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
||||||
|
|
21
|
|
|
#212 | |||||||
![]() ![]() Inscription : juin 2002 Messages : 2 034 ![]() |
Citation:
Étrangement, je comprends mieux ta position maintenant. Citation:
Même remarque que précédemment. Non, on essaie pas de programmer objet. On essaie plutôt d'utiliser le paradigme le plus adéquat pour le problème donné. Citation:
Sans n'en reste pas moi deux langages différents. De nombreux langages sont capables d'appeler du code C et de se lier avec des fichiers objets provenant d'un code source C. Cela veut-il dire que tout ces langages sont du C ? |
|||||||
|
|
21
|
|
|
#213 | |
|
Membre du Club
![]() |
On se calme, je ne parle pas de la programmation fonctionnelle comme le ML, je faisais plutôt référence à la programmation classique (il y a un terme spécifique qui m'échappe), que plusieurs adeptes de l'OO ont nommé «spaghetti code». Je ne me souviens plus du terme exact, désolé.
Citation:
Là, vous pouvez dire que vous comprenez ma position. La religion du C ou du C++, n'en ai rien à faire. |
|
|
10
|
|
|
#214 | ||||||||||
|
Membre du Club
![]() |
Oui????
Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
Code :
Note en passant: admettons que le MIT a fait du beau boulot avec X Window. Citation:
Pour la rétrocompatibilité, les compilateurs C/C++ peuvent souvent encore compiler du K&G C. Pourquoi donc? C'est encore et toujours du C. Et que dire du C AIX et du C Solaris? Sont-ils compatibles? Alors, si on suit votre raisonnement, aucun d'eux n'est du C. Bref, vous tiquez sur les détails ici. Citation:
On pourrait continuer longtemps comme ça. Tout est une question de perspective. Par tradition, le K&R C a précédé le C, qui a précédé le C++. Tous sont en relative continuité évolutive et backward compatibles directement ou avec des options à l'exécution du compilateur. C'est toujours du C pour moi (it's still rock'n'roll to me Cordialement. |
||||||||||
|
00
|
|
|
#215 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : août 2003 Messages : 4 521 ![]() |
Pourquoi on pinaille ?
Parce que bien utilisés, ces langages ne se manipulent pas du tout de la même façon. La faute aux exceptions. Tu parlais de l'avancée qu'est le GC en sous-entendant, qu'en C/C++ on n'a rien d'équivalent. En C/C++ (et j'assume mon sentiment péjoratif à l'égard de ce terme), c'est vrai. En C++, c'est on ne peut plus faux. On remplace un système non déterministe de libération implicite de mémoire (GC) doublé d'un système explicite déterministe de libération de ressources (finally) par un seul et même système implicite et déterministe de libération de ressources (dont mémoire) : le RAII. C'est le truc qui fait que le C++ bien employé ne peut sérieusement ressembler à du C, ou du moins intégrer impunément les méthodes de développement propres au C. (Certes les types sont un chouilla plus long à taper. Mais vu qu'on le rattrape sur tous les codes de gestion d'erreur, c'est un excellent investissement.) Bien sûr, on peut toujours le faire, ou croire qu'on le fait bien si on fait semblant de vivre dans le pays magique où new ne renverrait aucune exception. Bien sûr, on peut forcer new a avoir un comportement pré-standard (<98), est-ce qu'on y gagne ? Pas en ce qui me concerne. En quoi je programme ? En C++ et définitivement pas en C/C++, chose qui dans mon acception est dépourvu de la systématisation de l'utilisation du RAII. (je décrypte entre mes lignes : la différence profonde entre C et C++, ce n'est pas l'OO ou les templates, ce sont les exceptions et le RAII)
__________________
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. |
|
|
10
|
|
|
#216 |
|
Membre du Club
![]() |
Ça y est, je me rappelle. Le buz word pour les langages du type C, Pascal et autres c'est «programmation structurée». C'est ce que je voulais dire. J'étirerais peut-être la sauce en disant aussi «langage procédural», mais comme en C les procédures sont des fonctions, je l'ai traduis plus ou moins consciemment en programmation «fonctionnelle», sans faire attention au type récursif auquel ça fait référence.
|
|
00
|
|
|
#217 | ||||
|
Membre du Club
![]() |
Citation:
Je n'ai jamais dis que le GC était une évolution autant qu'un mal nécessaire. C'est précisément pour solutionner ce problème nouveau que le GC est utilisé en Java. Le C/C++ (appelez le simplement C++, ça m'indifère, c'est pareil pour moi) nécessite un niveau de maîtrise élevé pour être utilisé efficacement (les pointeurs), ce qui est un luxe que beaucoup ne peuvent pas se permettre. Tant mieux pour nous qu'ils n'aient pas choisi de niveller par le bas le langage C/C++ et plutôt opté d'en dériver le Java. Citation:
Pour la librairie C, comment allez-vous, par simple exemple, vous y prendre pour faire de la gestion de répertoires en C++ ou questionner la date d'un fichier ou du système (pour ne nommer que ça)? À ma connaissance, l'outil standard pour faire ce genre de travail en C++ reste ceux de la librairie C. C'est 25 ans d'héritage dont on parle, accessible à même le C++. Code :
J'ai ici le source d'un mozilla récent, qui inclut Firefox. J'ai compté vite 4656 fichiers avec une extension cpp, et 1593 avec une extention c. Selon vous, du C ou du C++? D'évidence, on a voulu et/ou éviter de recoder, et/ou profiter des forces de chacun. Tout ça compilé avec le même outil. Moi, ce qui m'intéresse, ce n'est pas le flafla du langage, c'est-ti du C, c'est-ti du C++, mais bien d'exploiter au maximum la machine sur laquelle mon logiciel roule. Je soupçonne que c'est aussi ce qui intéresse mon employeur. Or, le C++ est handicapé de bien des façons sans l'héritage du C et le C traîne de l'arrière sans son extension ++. Mon avis seulement. |
||||
|
11
|
|
|
#218 |
|
Membre confirmé
![]() Architecte technique Inscription : mai 2004 Messages : 210 ![]() |
HS : Je ne savais pas que les discussion C/C++ pouvaient autant enflammer les topics, surtout de nos jours ...
Pour revenir à l'article et surtout au classement TIOBE, je mets vraiment en doute la méthode utilisée ... Si je cherche par exemple JQuery est que ce résultat sera associé à JavaScript ? D'après, ce que j'ai compris, pas du tout puisque JavaScript regroupe les keywords JavaScript, JScript et ECMAScript... Et ruby ? Tiens il n'y a même pas rails dans le grouping. Du coup je trouve les résultats assez drôles (par exemple Delphi en 10eme position .. ) et l'étude assez peu pertinente ... |
|
|
10
|
|
|
#219 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : août 2003 Messages : 4 521 ![]() |
@ruste, de ta réponse, je perçois que tu es passé à côté de ce que je disais.
Comme toi, je ne mets pas la différence au niveau OO. Après tout, c'était bien ça les origines du C/C++ : du C avec des classes. Seulement je vois une différence très importante : la façon canonique de traiter les cas non nominaux. L'introduction des exceptions au C++ change suffisamment la donne pour que l'on renonce dans les codes "métiers" à l'approche C. Et pourtant il y a quantité de codes qui n'ont pas réalisé cette migration, quantité de codes qui sont infernaux à maintenir, quantité de code qui méritent leur appellation C/C++ ... @vosaray. Ben oui, c'est tiobe ... Je ne pensais pas que l'on mérite que l'on s'attarde dessus. Quoique j'ai lu ici des réactions qui me font dire que certains le trouvait ... intéressant, voire ... pertinent.
__________________
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. |
|
|
00
|
|
|
#220 |
|
Membre du Club
![]() |
Du moment que windev n'est pas dans les stats ! Sinon cela voudra dire que les sécretaires se sont mise à développer. (^_^)
|
|
|
12
|
Copyright © 2000-2013 - www.developpez.com