Le C ++ moderne est-il de plus en plus répandu? [fermé]

132

Quand j'ai appris le C ++ pour la première fois il y a 6 à 7 ans, ce que j'ai appris était essentiellement "C with Classes". std::vectorétait définitivement un sujet avancé, quelque chose que vous pouviez apprendre si vous le vouliez vraiment . Et il n'y avait certainement personne qui me disait que les destructeurs pouvaient être exploités pour aider à gérer la mémoire. Aujourd'hui, partout où je regarde, je vois RAII et SFINAE , STL et Boost et, enfin, C ++ moderne. Même les personnes qui commencent à peine avec la langue semblent apprendre ces concepts presque dès le premier jour.

Ma question est la suivante: est-ce simplement parce que je ne vois que le "meilleur", c'est-à-dire les questions ici sur SO et sur d'autres sites de programmation qui ont tendance à attirer les débutants (gamedev.net), ou est-ce réellement représentatif du Communauté C ++ dans son ensemble?

Le C ++ moderne devient-il vraiment la valeur par défaut? Plutôt que d'être quelque chose d'extraordinaire sur lequel les experts écrivent, est-ce en train de devenir "la façon dont C ++ est"? Ou suis-je tout simplement incapable de voir les milliers de personnes qui apprennent encore "C avec classes" et écrivent leurs propres tableaux dynamiques au lieu d'utiliserstd::vector , et font la gestion de la mémoire en appelant manuellement new / delete de leur code de niveau supérieur?

Autant que je veux le croire, il semble incroyable que la communauté C ++ dans son ensemble ait tellement évolué en quelques années. Quelles sont vos expériences et impressions?

(avertissement: quelqu'un qui n'est pas familier avec C ++ pourrait mal interpréter le titre comme demandant si C ++ gagne en popularité par rapport à d'autres langages. Ce n'est pas ma question. "C ++ moderne" est un nom courant pour un dialecte ou un style de programmation dans C ++, nommé d'après le livre " Design C ++ moderne: Programmation générique et modèles de conception appliqués ", et je suis uniquement intéressé par cela par rapport à" l'ancien C ++ ". Donc, inutile de me dire que le temps de C ++ est passé, et nous devrions tous utiliser Python;))

jalf
la source
2
Malheureusement, je pense qu'il faudra un certain temps avant que la communauté C ++ dans son ensemble soit suffisamment avancée pour reconnaître comment utiliser la bibliothèque standard et booster avec les ajouts à venir C ++ 0x, et encore moins implémenter du code en utilisant des méthodologies similaires. Cependant, je pense que C ++ 0x apporte beaucoup d'espoir pour augmenter la popularité de C ++. De nombreux inconvénients syntaxiques quotidiens ont été améliorés. J'ai toujours pensé que ces choses étaient mesquines, mais pour les personnes extérieures qui regardent la langue, c'est une source courante de plaintes.
stinky472
15
Dans mon cas, chaque fois que je rencontre un professionnel qui comprend les techniques modernes du C ++ comme RAII et la sécurité des exceptions (ne faisant pas nécessairement référence au livre d'Alexandrescu) ou même les concepts les plus basiques comme les itérateurs et les algorithmes génériques, j'en trouve dix autres qui ne comprennent pas. Au moins en ce qui concerne les professionnels, beaucoup d'entre eux sont trop pris dans les délais pour apprendre quoi que ce soit de savoir, de sorte que même les professionnels du C ++ autoproclamés ont souvent beaucoup à apprendre. J'ai peur de devenir aussi l'un de ceux avec C ++ 0x: il me faudra beaucoup apprendre et m'adapter pour cela et j'ai des délais à respecter.
stinky472

Réponses:

76

Voici comment je pense que les choses ont évolué.

La première génération de programmeurs C ++ était des programmeurs C, qui utilisaient en fait C ++ comme C avec des classes. De plus, la STL n'était pas encore en place, c'est donc ce qu'était essentiellement C ++.

Lorsque la STL est sortie, cela a fait avancer les choses, mais la plupart des gens qui écrivaient des livres, élaboraient des programmes et enseignaient les classes avaient d'abord appris le C, puis ces trucs supplémentaires en C ++, donc la deuxième génération a appris de cette perspective. Comme l'a noté une autre réponse, si vous êtes à l'aise pour écrire des boucles for régulières, changer pour utiliser std::for_eachne vous achète pas grand-chose sauf le sentiment chaleureux et flou que vous faites les choses de manière «moderne».

Maintenant, nous avons des instructeurs et des rédacteurs de livres qui ont utilisé tout le C ++ et qui ont obtenu leurs instructions dans cette perspective, comme le C ++ accéléré de Koenig & Moo et le nouveau manuel de Stroustrup. Donc on n'apprend pas char*alorsstd::strings .

C'est une leçon intéressante sur le temps qu'il faut pour remplacer les méthodes «héritées», en particulier lorsqu'elles ont des antécédents d'efficacité.

JohnMcG
la source
13
Oui. Il était très intelligent de rendre C ++ hautement rétrocompatible avec C en raison de l'énorme base installée de codeurs C. Très similaire à la stratégie réussie de MS consistant à toujours maintenir la rétrocompatibilité avec DOS. (Voir l'excellent blog de Raymond Chen pour les longueurs souvent douloureuses auxquelles ils sont allés ...)
j_random_hacker
2
Oups, est allé un peu sur une tangente là-bas ... Je voulais dire que je pense que vous avez raison sur le "fossé générationnel" entre ceux qui ont changé de C (mais ont gardé la pensée de style C) et ceux dont "le premier goût "était post-STL C ++.
j_random_hacker
57

Absolument oui. Pour moi, si vous ne programmez pas C ++ dans ce style "C ++ moderne" comme vous le dites, alors il est inutile d'utiliser C ++! Vous pourriez tout aussi bien utiliser C. "C ++ moderne" devrait être la seule façon dont le C ++ est programmé à mon avis, et je m'attendrais à ce que tous ceux qui utilisent C ++ et ont programmé de cette manière "moderne" soient d'accord avec moi. En fait, je suis toujours complètement choqué quand j'entends parler d'un programmeur C ++ qui n'est pas au courant de choses comme un auto_ptr ou un ptr_vector. En ce qui me concerne, ces idées sont fondamentales et fondamentales pour C ++, et je ne pourrais donc pas l'imaginer autrement.

Ray Hidayat
la source
4
+1; J'ai choisi très tôt le style "c ++ moderne" parce que c'est la manière naturelle de le faire (si vous ne pensez pas au C avec des classes).
Adam Hawes le
21
«Utilisez simplement C? C est sacrément puissant.
Clark Gaebel
4
Les robots ne programmeront certainement pas en C ++, ils ne sont pas assez stupides, et se figeraient en essayant de le compiler.
Matt Joiner
6
@ClarkGaebel Eh bien, si C est puissant, C ++ l'est aussi par son héritage de C sans ses problèmes :)
legends2k
4
@rxantos, vous dites que nous n'avons pas beaucoup d'options pour évaluer les performances, par exemple la visualisation de la sortie de l'assemblage, des minuteries, des moniteurs de RAM, et bien d'autres. C ++ n'est pas différent de C à cet égard. En cas de doute, profil. Tout le reste n'est que du ouï-dire.
underscore_d
25

À l'époque de Windows 3.1, C était la norme. Lorsque C ++ a frappé le marché des développeurs et est devenu plus tard la norme ANSI, c'était la nouvelle tendance. Il a popularisé l'acronyme OOP et certains des modèles de conception de base en utilisant le polymorphisme.

Maintenant, avec la plus grande acceptation des plates-formes gérées à faible barrière à l'entrée, comme C # / .NET, il y a moins de raisons d'utiliser C ++. Une grande partie de la base de développeurs aura le choix et soyons honnêtes: C ++ est un ours à apprendre pour un novice. Avec C #, vous pouvez simplement l'exécuter.

Cela ne laisse vraiment que les plates-formes qui ont besoin de C ++ et les évangélistes inconditionnels du C ++ pour continuer à pratiquer cet art. C'est la communauté qui a besoin et qui veut toutes les couches d'abstraction considérées comme du "C ++ moderne".

Alors oui, je crois que le "C ++ moderne", comme vous le dites, est de plus en plus répandu. Bien qu'il soit courant avec un public différent de celui qui l'a utilisé dans le passé.

Spoulson
la source
Allez les gars, cette réponse fait quelques bons points. Le C ++ n'est pas parfait, nous le savons tous, Bjarne lui-même se plaint qu'il est trop gros et trop difficile à apprendre. Bien que je ne sois pas d'accord sur la raison pour laquelle le C ++ moderne est apparu si progressivement - à mon humble avis, il faut juste autant de temps pour qu'un si grand langage «gronde».
j_random_hacker
4
Donc, vous dites que les développeurs les plus moyens se sont dirigés vers C # et autres, tandis que les plus hard-core sont davantage restés avec C ++? (Non pas qu'il n'y ait pas de personnes vraiment intelligentes en C # / .NET, mais il y en a beaucoup de moins intelligentes.) Cela a un certain sens.
David Thornley le
3
Je pense que c'est un point valable. Bien sûr, ce n'est pas vrai pour tout le monde, mais dans une large mesure, je suis d'accord, la plupart des gens qui ont le choix ont déjà opté pour C # ou Java ou d'autres langages similaires.
jalf le
3
Cas d'utilisation: je veux qu'un client Windows fasse CRUD sur ma base de données. Utilisez C # /. NET ou C ++ / MFC? Je veux une application Web ... Utiliser C # / ASP.NET ou C ++ / ISAPI? Je veux un simple clone "Nybbles" utilisant DirectX C # /. NET ou C ++ / MFC / WTL? Je veux une démo gagnante à Assembly09 ... définitivement C ++ (vs C #).
spoulson le
8
Je ne sais pas s'il s'agit de plus de couches d'abstraction ou de plus de dureté. Je soupçonne que c'est juste que les types d'abstractions disponibles via les modèles n'étaient tout simplement pas disponibles en Java ou C #, donc les personnes qui les aimaient ou en avaient besoin sont restées avec C ++.
Kragen Javier Sitaker
16

Je fais partie de ces types qui ont appris à travailler avec la STL et qui ont beaucoup entendu parler de RAII et des bonnes pratiques de programmation C ++ dès le premier jour. ) concentrez-vous sur l'utilisation des outils STL au lieu de regrouper vos propres trucs, et donnez également beaucoup de «règles» pour une programmation efficace (ou «moderne»).

Mais en parlant avec des amis, j'ai également remarqué que certaines entreprises travaillent toujours avec "C with Classes", pas avec "C ++ moderne". Peut-être que la culture proposée par les auteurs et utilisateurs du "C ++ moderne" prévaudra un jour :)

jfsantos
la source
Là où je travaille, nous utilisons toujours C avec des classes, probablement parce qu'il y a beaucoup d'anciens qui sont là depuis un moment. Ils semblent très méfiants même envers la STL, sans parler de BOOST.
aneccodeal
12

Je pense que vous venez de vivre une mauvaise expérience au départ.

Vous devez vous procurer des livres Scott Meyers Effective C ++. J'ai commencé le C ++ dans la colère en 1999, mon chef d'équipe m'a fait m'asseoir et lire le C ++ efficace et le C ++ plus efficace avant d'être autorisé à enregistrer N'IMPORTE QUEL code.

La plupart de ses conseils sont du type "N'utilisez pas cette fonctionnalité , mais si vous le devez, gardez cela à l'esprit"

Si vous suivez ses conseils, vous écrirez du bon C ++ ou "moderne".

Il a aussi un livre sur STL maintenant, mais que je n'ai pas lu.

Binaire Worrier
la source
Je dois mentionner que ce n'était que mon point de départ. Aujourd'hui, je suis très à l'aise avec le STL, le boost, le RAII et tout le reste. Je me suis simplement demandé à quel point mon expérience initiale était commune.
jalf
9

Dans mes emplois C ++, j'ai trouvé que les fonctionnalités modernes étaient de plus en plus utilisées, et de plus en plus de gens m'ont posé des questions à leur sujet lors de projections téléphoniques et d'entretiens. Autant que je sache, ils sont en train de se répandre.

J'ai appris le C ++ à l'origine comme quelque chose comme C avec des classes; bien que le langage ait avancé bien au-delà de cela, les livres que j'ai lus et les personnes avec lesquelles j'ai travaillé étaient fermement attachés à «l'ancien C ++». RAII quelque chose que les gens penseraient, plutôt que de faire automatiquement, et je me souviens avoir lu certains des premiers articles sur les problèmes de sécurité des exceptions.

Comme indiqué, il y a de nouveaux livres maintenant. Bon nombre des anciennes sont toujours pertinentes, mais elles semblent de plus en plus explicites pourquoi les mauvaises idées sont manifestement mauvaises. (De même, il est difficile pour les lecteurs modernes de comprendre à quel point les idées révolutionnaires de Freud sur l'inconscient étaient, puisque c'est maintenant la sagesse conventionnelle.)

Stroustrup vient de sortir un manuel, Programming: Principles and Practice Using C ++ . Je l'ai acheté parce que je n'ai pas encore manqué d'apprendre de bonnes choses d'un livre de Stroustrup, mais je n'ai pas dépassé les premiers chapitres. Jusqu'à présent, tout ce que je peux dire, c'est que j'approuve la façon dont il a débuté, et c'est au moins une bonne introduction à la façon dont C ++ devrait être utilisé.

David Thornley
la source
Même les premières versions de la STL n'étaient pas protégées contre les exceptions.
Kragen Javier Sitaker
2
A cette époque, personne ne savait vraiment comment écrire du code sans exception. Cela a été élaboré dans les années qui ont suivi la publication de la norme. Je me souviens de certains articles de C ++ Report.
David Thornley
7

Tout en travaillant sur le projet dans lequel je suis actuellement impliqué, il y a beaucoup de code C ++ qui a évolué sur une période de temps significative (plus de 10 ans maintenant). L'évolution dont vous parlez y est clairement visible: l'ancien code est souvent «C avec classes» - pointeurs bruts, char*chaînes de caractères et utilisation des fonctions C associées, des tableaux, etc. le code plus récent utilise des pointeurs intelligents ATL et autres pour gérer les ressources, mais s'en tient toujours aux boucles codées à la main la plupart du temps, et l'itérateur est un spectacle rare; et le plus récent regorge de conteneurs STL, d'algorithmes,shared_ptr (y compris des suppressions personnalisées pour gérer les poignées, etc.), des modèles de fonctions et de classes fortement génériques, etc. La plupart des techniques de codage traditionnelles "C avec classes", telles que les pointeurs bruts non encapsulés avec gestion manuelle de la durée de vie, sont très mal vues dans les revues de code de nos jours. À en juger par cela, il semble que votre observation soit exacte.

Le développement le plus récent semble être une mode pour les lambdas C ++ 0x - qui a un côté positif en ce sens qu'il fait également pencher la balance en faveur de l'utilisation d'algorithmes standard sur des boucles codées à la main, puisque maintenant vous pouvez avoir tout votre code en ligne avec algorithmes aussi.

Pavel Minaev
la source
6

Je ne dirais pas que std :: vector est qualifié de "moderne" de nos jours. C'est vraiment basique.

En général, j'ai l'impression que les gens ont acquis une certaine expérience avec le style C ++ moderne et se sont un peu dégrisés. Juste pour prendre un exemple simple, STL for_each était intéressant mais en pratique, il n'ajoute pas beaucoup de valeur sur une boucle C simple. Il est plus difficile à déboguer et ne fournit parfois pas les meilleures performances. De plus, les constructions pour la programmation fonctionnelle dans la STL actuelle sont généralement très lourdes, surtout si vous avez une expérience d'un vrai langage fonctionnel comme ML.

Johan Kotlinski
la source
1
pourquoi dites-vous que le vecteur n'est pas considéré comme moderne? c'est toujours l'état de l'art pour de nombreux cas d'utilisation, même si c'est basique. mais je pense que quelque chose de basique ne signifie pas que ce n'est pas moderne. plutôt le contraire, si quelque chose. mais je pense que je suis d'accord avec votre deuxième paragraphe :)
Johannes Schaub - litb
4
mais je pense que c'est parce que certains utilisateurs essaient d'utiliser for_each et amis essentiellement pour tout, même pour des choses comme où une simple boucle for serait beaucoup plus concise - gonfler une boucle de 2 lignes jusqu'à 10 lignes. Je m'attends à ce que plus de gens utilisent for_each et amis lorsque lambda sera disponible en C ++ 1x
Johannes Schaub - litb
7
le vecteur étant basique est exactement le point. Cela n'a pas toujours été basique. Une fois, c'était généralement considéré comme une chose super compliquée (elle utilisait des TEMPLATES) et inefficace (ce n'est pas un tableau brut). Quelque chose sur lequel les experts pourraient prêcher, mais beaucoup de gens ne faisaient tout simplement pas confiance.
jalf
2
Peut-être parce que std :: for_each est rarement ce dont vous avez besoin par rapport à dire ... std :: transform? L'utilisation de l'algorithme vous aide à vous débarrasser d'un bug très courant: une condition de boucle incorrecte.
Edouard A.
vector <bool> n'est certainement pas basique ...
Kugel
6

D'après mon expérience (Université espagnole), malheureusement, la norme est de ne pas considérer les langues en soi. Ils utilisent les langages les plus simples pour enseigner la programmation (c'est-à-dire Java), parce que c'est censé être facile pour les enseignants et les étudiants, puis ils utilisent C pour les classes OS et autres.

Le C ++ est introduit très légèrement (en tout cas en tout cas), juste pour fournir à un C des classes. Ils n'entrent pas dans le boost ou même le STL. Je pense que suivre toutes les caractéristiques et la façon de penser du C ++ est coûteux pour les enseignants et les étudiants. Combien de programmeurs C ++ ici connaissent suffisamment toutes les bibliothèques Boost pour les utiliser pour donner une meilleure solution ou pour la concevoir? Il faut avoir intérêt à se tenir au courant de toutes les nouvelles bibliothèques et idiomes.

Cependant, comme je l'ai dit, il semble que la programmation en général (et les langages de programmation en particulier) ne soient pas pris trop au sérieux, car cela semble être une affectation temporelle lorsqu'ils commencent un travail, puis oublient comment programmer au fur et à mesure qu'ils montent dans le arbre d'entreprise. De nombreuses entreprises ici, et l'Université elle-même, ont le sentiment que la programmation peut être faite par n'importe qui.

Si vous suivez cette philosophie, alors pour la plupart des gens que je connais, C ++ sera toujours "C avec classes".

Cordialement,

Diego Séville
la source
La plupart de cela est très courant en informatique, et dans l'ensemble, je ne pense pas que ce soit une mauvaise chose. (Ne pas se concentrer sur la langue, c'est-à-dire. Les langues enseignées doivent évidemment être enseignées correctement).
jalf le
+1: "(Ne pas se concentrer sur la langue, c'est-à-dire. Les langues enseignées par aRE devraient évidemment être enseignées correctement)"
Jared Updike
6

D'après mon expérience, cela dépend largement de l'âge du produit / projet logiciel. La plupart des nouveaux projets que je connais utilisent du C ++ moderne (RAII, STL, Boost). Cependant, il existe de nombreux projets C ++ qui ont plus de 10 ans et vous n'y voyez pas de C ++ moderne.

De plus, gardez à l'esprit que certaines des implémentations STL les plus populaires étaient à peu près cassées jusqu'à il y a peut-être 5 ans (MSVC <7.0 et GNU <3.00)

Nemanja Trifunovic
la source
4

Je pense que le plus gros obstacle que j'ai rencontré est le support de la chaîne d'outils, en particulier sur les projets multiplateformes. Jusqu'à il y a quelques années, il était courant de voir des notes de construction disant que «la plate-forme x a besoin de STLport pour fonctionner parce que son compilateur est en panne». Même maintenant, je vois des problèmes avec des personnes essayant d'utiliser plusieurs dépendances tierces liées à différentes versions de BOOST. Cela rend la liaison impossible, ce qui signifie que vous devez revenir en arrière et reconstruire vos deps à partir de zéro.

Maintenant que presque tout le monde a cessé d'utiliser MSVC ++ 6, le désordre de STLport est derrière nous. Mais dès que TR1 est sorti, nous revenons à «quelles versions de quels environnements le supportent et le font correctement» et encore une fois, cela ralentira l'adoption.

Je travaille sur un projet commencé en C (et non en C ++) en 1992. Déployer des pratiques modernes à travers la base de code héritée serait impossible. De même, je travaille sur un autre projet qui est beaucoup plus proche de la pointe du langage C ++.

XénonofArcticus
la source
3

De nombreuses équipes dont j'ai fait partie et dont j'ai entendu parler considèrent le grand "Utilisons-nous des exceptions?" question. Ceci est du code pour "utilisons-nous le C ++ moderne?"

Une fois que vous n'utilisez pas d'exceptions, vous n'êtes pas autorisé à utiliser toute la puissance du langage et de ses bibliothèques.

Mais de nombreuses bases de code plus anciennes sont sans exception, et il est perçu comme difficile de trouver des exceptions dans une base de code qui ne les attend pas, ou dans une équipe qui ne sait pas comment les utiliser, donc la réponse dans de tels cas est souvent «non».

D'après mon expérience, le C ++ moderne a besoin de quelqu'un de passionné dans l'équipe, qui ne supporte rien de moins, pour le pousser. Il doit également surmonter les objections de ceux qui veulent qu'il ressemble davantage au code hérité.

Bien que je ne pense pas que les anciennes bases de code C ++ disparaissent très rapidement, je pense qu'il y a plus de ces passionnés dans le monde qu'il y a cinq ans. Ils font face à la même bataille difficile à laquelle ils ont été confrontés il y a cinq ans, mais ils sont plus susceptibles de trouver des esprits apparentés.

Drew Hoskins
la source
3

Avant de répondre à une telle question, vous devez vous mettre d'accord sur ce qu'est «moderne». Cela ne se produira probablement pas, car «moderne» est un mot mal défini et signifie différentes choses pour différentes personnes. Le titre du livre d'Alexandrescu (Modern C ++ Design) n'aide pas vraiment non plus, puisqu'il s'agit en grande partie d'un livre sur la métaprogrammation des modèles, qui est un domaine spécifique du C ++ mais en aucun cas le seul.

Pour moi, "Modern C ++"! = "Template Metaprogramming". Je dirais que les fonctionnalités de C ++ au-dessus de C relèveraient de ces catégories:

  • Classes (Constructeurs, Destructeurs, RAII, Dynamic Casting et RTTI)
  • Des exceptions
  • Références
  • Structures de données et algorithmes dans la bibliothèque standard (STL)
  • iostreams
  • Modèles simples de classes et de fonctions
  • Métaprogrammation de modèle

Aucun de ceux-ci n'est particulièrement moderne, car ils existent tous depuis près de 10 ans ou plus. La plupart de ces fonctionnalités sont utiles et vous permettront d'être plus productif que le simple C pour de nombreux cas d'utilisation. Un bon programmeur devrait tous les utiliser et les utilisera tous dans un projet de taille décente, mais l'une de ces choses ne ressemble pas à l'autre:

Métaprogrammation de modèle.

La réponse courte à la métaprogrammation de modèles est simplement de dire non. Malheureusement pour certaines personnes, c'est aussi une "programmation C ++ moderne", à cause du livre, mais en fin de compte, cela crée plus de problèmes qu'il n'en résout. À moins que C ++ ne développe de meilleurs mécanismes de programmation génériques tels que la réflexion, il sera mal adapté à la programmation générique, et les langages de niveau supérieur comme Python conviendront mieux à ces cas d'utilisation. Pour cela et bien d'autres raisons, consultez le C ++ FQA

Anton I. Sipos
la source
6
La métaprogrammation de modèles IMHO n'est presque jamais nécessaire pour la programmation d' applications , où elle ne sert qu'à fournir des niveaux de généralité probablement inutiles au détriment de la lisibilité et des bogues difficiles à comprendre. Mais OTOH est extrêmement utile pour les experts lors de la construction de bibliothèques (à la Boost), où la généralité ajoutée est utile et les mécanismes (laids, délicats, déroutants) peuvent être cachés.
j_random_hacker
3
Vous avez raison de dire que la métaprogrammation de modèle peut être utilisée avec goût, si elle est effectuée avec modération, en particulier dans les bibliothèques. Mais trop souvent, j'ai vu des gens aller trop loin dans la voie de la métaprogrammation des modèles, et leurs programmes en souffrent. Je ne suis pas contre la métaprogrammation, en fait j'en suis un fervent défenseur, c'est juste que les fonctionnalités de C ++ sont assez grossières.
Anton I. Sipos
2

Le meilleur livre pour apprendre le C ++. "Accelerated C ++" de Koenig & Moo, enseigne ce que vous décrivez comme le C ++ moderne, donc je suppose que la plupart des gens l'utilisent de nos jours. Pour ceux d'entre nous qui utilisent le C ++ depuis un certain temps (depuis le milieu des années 80 dans mon cas), le C ++ moderne est un grand soulagement des tâches fastidieuses d'écrire nos propres tableaux, chaînes, tables de hachage (répéter ad nauseam).

anon
la source
1
Je ne veux pas nécroser, mais je viens d'acheter le livre sur la base de cette recommandation. Il va falloir voir!
Andrew Weir
2

J'ai regardé les Jobs C ++ sur en effet et les bibliothèques "modernes" sont de plus en plus utilisées dans les descriptions de travail, MFC qui est une bibliothèque C ++ "à l'ancienne" est moins utilisée.

Rexxar
la source
1

La standardisation du langage à la fin des années 1990 a été la première étape, elle a permis aux fabricants de compilateurs de se concentrer sur l'ensemble "standard" de fonctionnalités, a également permis au langage de corriger certaines des aspérités apparues au cours du processus de standardisation.

Cela a à son tour permis le développement de frameworks basés sur les fonctionnalités standard du langage, et non sur les fonctionnalités fournies par une implémentation de compilateur particulière. La bibliothèque Boost est notamment à cet égard. Cela a également permis que le nouveau développement soit basé sur des travaux antérieurs, rendant ainsi possible des solutions à des problèmes plus complexes.

Un changement notable ici est la façon dont les frameworks étaient auparavant basés sur la notion de classes de base et de classes dérivées (une fonctionnalité d'exécution). Mais maintenant, les fonctionnalités les plus avancées sont souvent fortement basées sur des modèles "récursifs" (une fonctionnalité de compilation).

La STL a ses avantages et ses inconvénients, mais elle a survécu à l'épreuve du temps, si vous voulez quelque chose qui fonctionne et qui est simple, la STL a sûrement quelque chose pour vous aider à démarrer. Inutile de réinventer la roue (sauf pour des raisons didactiques).

Le matériel informatique a également fait de grands sauts à partir des années 1990, alors la mémoire et le processeur ne sont plus une contrainte pour le compilateur. Ainsi, la plupart des optimisations théoriques des livres sont désormais possibles.

Les prochaines étapes du langage sont la prise en charge de la programmation multicœur, qui fait partie de l'effort standard 0x.

Ismael
la source
1

Oui et non. Certes, pour les nouveaux projets, il est de plus en plus populaire. Cependant, il existe encore des obstacles à l'adoption qui sont pratiques et non politiques, que d'autres n'ont pas mentionnés. Il existe de nombreuses bibliothèques C ++ commerciales qui utilisent des ABI d'anciens compilateurs qui ne prennent pas correctement en charge les fonctionnalités du C ++ moderne, et de nombreuses entreprises s'appuient sur ces bibliothèques. Sun Studio sur Solaris, par exemple, ne peut pas fonctionner avec Boost sans l'utilisation de STLport, mais toute bibliothèque commerciale tierce que vous souhaitez utiliser nécessitera la version Sun de la STL. Même histoire avec GCC 2.95 et Redhat Enterprise Linux.

Joseph Garvin
la source
-3

C'est incroyable le peu d'efforts nécessaires pour rendre le C ++ plus stable. Le système d'alerte est en place, mais il évolue peu. C'est encore plus facile de se tirer une balle dans un pied qu'il y a 10 ans. Je ne sais pas pourquoi, mais c ++ est toujours mon langage préféré. :)

AareP
la source
Je suggérerais de lire plusieurs des livres de ce fil avant de faire des déclarations sur le "petit effort" qui est mis dans la stabilisation C ++ et que "c'est encore plus facile de se tirer une balle dans un pied qu'il y a 10 ans."
Patrick Niedzielski
Bien sûr, std-library offre une certaine stabilité sur l'allocation de mémoire et la manipulation de chaînes. Malheureusement, en interne, il utilise des conventions de codage si étranges que vous pourriez penser qu'il a été écrit par des extraterrestres ou quelque chose du genre. :)
AareP
2
Puisque la bibliothèque standard est une spécification, blâmez le fournisseur de votre compilateur pour avoir utilisé d'étranges conventions de codage internes. Et d'ailleurs, étranges conventions de codage = / = instable ou plus facile à se tirer une balle dans le pied. La plupart de ces conventions de codage (en parlant au moins de la bibliothèque MSVC, et probablement d'autres aussi) sont conçues pour ne pas interférer du tout avec vous, vous pouvez donc faire des choses stupides et la bibliothèque n'a pas besoin de s'en soucier. Si vous codez en dehors de la spécification C ++, c'est une chose différente.
Patrick Niedzielski
Notez qu'une implémentation STL typique (surtout si elle est fournie avec un compilateur spécifique) n'a pas besoin d'utiliser le C ++ standard pour s'implémenter. Il peut très bien utiliser en lui-même des connaissances spécifiques à l'implémentation, afin de fournir à votre code les garanties promises par le Standard. Votre propre code, cependant, ne doit s'en tenir qu'à ce que la norme garantit. Vous ne pouvez pas apprendre les garanties Standard en examinant une implémentation C ++ ou STL particulière.
Tanz87
Cette réponse a été écrite il y a dix ans. À ce moment-là, il était étonnant de voir combien d'efforts étaient déployés pour rendre le C ++ plus stable. C'était l'une des principales raisons pour lesquelles c ++ 0x a mis si longtemps à être publié en tant que c ++ 11.
David Hammen