Question

Même la plupart des gens qui aiment le C ++ admettent qu'il a des tonnes de verrues qui ne sont pas liées à son créneau en tant que langage de programmation systèmes / performance. Celles-ci incluent son système de gestion de module obsolète (fichiers d’entête), la nécessité de déclarations en aval, les anomalies de syntaxe rendant sa grammaire indécidable (comme & Lt; & Gt; crochets angulaires pour la déclaration de modèle), l’inclusion de macros fonctionnant au niveau textuel au lieu de fonctionnalités de langage réel pour traiter les objets pour lesquels les macros sont utilisées, duplication de fonctionnalités telles que les tableaux et les chaînes (versions STL et C de ces types), pratiquement pas de sucre syntaxique et manque général de fonctionnalités modernes telles que le threading , ramasse-miettes, délégués / fermetures, etc. (Remarque: oui, dans les environnements très limités en mémoire ou en temps réel, vous pouvez avoir de bonnes raisons de ne pas vouloir de ramasse-miettes, mais cette option peut facilement être désactivée et constituer le moyen par défaut de gérer la mémoire. .)

D'autre part, C ++ est le seul langage classique qui vous permet d'écrire du code de manière efficace et proche du métal, tout en fournissant au moins une certaine abstraction de haut niveau. Il est mature, normalisé et comprend des tonnes d’implémentations et de bibliothèques de compilateur et une grande base de code héritée.

Pour ceux d'entre vous qui utilisent le C ++ comme langage principal, qu'est-ce qui vous a amené personnellement à décider que ses verrues valent la peine d'être supportées? Que faudrait-il pour vous faire changer d'avis et décider d'utiliser une nouvelle langue avec moins de ce type de verrues? Utilisez-vous le C ++ parce que vous l’aimez vraiment, ou l’utilisez-vous à contrecoeur en raison de problèmes hérités du passé ou parce qu’aucun autre langage mature et traditionnel n’existe pour son créneau?

Était-ce utile?

La solution

Donnez-moi un langage de programmation qui:

  1. est normalisé et n'est pas piloté par une seule entreprise
  2. n'est pas lié à une plate-forme (pas seulement en théorie)
  3. compile en code natif
  4. me donne la même efficacité que C ++
  5. fournit une bibliothèque standard très bien pensée
  6. a au moins une implémentation mature pour diverses plates-formes importantes

... et je pourrais envisager de passer; -)

Autres conseils

Une partie de votre question repose sur une hypothèse erronée. Vous supposez que nous avons le choix de la langue. Dans tous les projets sur lesquels je travaille et qui utilisent le C ++, il n'y a pas vraiment de choix. Ce sont des projets qui existaient bien avant que je rejoigne la société et qui ont été écrits en C ++. Ils ont plusieurs années d’histoire derrière eux et une quantité correspondante de code.

Je pense que c'est la plus grande erreur que commettent les gens lorsqu'ils disent & "C ++ va mourir &"; ou & "Pourquoi les gens utilisent-ils encore le C ++? &"; Je suis tout à fait d’accord que, à l’exception des programmes de niveau système, vous ne verrez pas beaucoup / aucun nouveau projet commençant en C ++. IMHO, cela n'a pas beaucoup de sens. Pas nécessairement à cause de fautes inhérentes à la langue, mais il est de plus en plus difficile de trouver des personnes douées pour coder en C ++.

Ce que les gens oublient souvent de considérer, ce sont les millions (des milliards?) de lignes de C ++ qui gèrent notre monde aujourd'hui. Le passage à une langue différente est extrêmement coûteux et impossible à réaliser sur un coup de tête. Il faut une énorme justification pour consacrer temps et efforts à la réécriture d’applications de cette taille. C'est pourquoi C ++ ne mourra pas. Au moins de sitôt.

J'utilise le C ++ (et le fais depuis près de 25 ans) parce que c'est le meilleur langage de programmation système qui existe. Je dirais que je ne reconnais aucun des soi-disant & "Verrues &"; vous décrivez - ce sont des fonctionnalités!

Pour la programmation non-système, j'utilise d'autres langages, tels que PHP, Delphi, les scripts bash, awk, perl et Smalltalk. Une taille unique ne convient pas à tous, à moins que vous ne soyez une sorte de langue bigote bien sûr.

  

Cela inclut son système de gestion de modules obsolète (fichiers d'en-tête)

Je ne vois vraiment aucun problème avec la façon dont C ++ utilise les fichiers d'en-tête. En donnant deux façons d'inclure les en-têtes, vous pouvez spécifier au niveau de la source si les symboles doivent provenir de votre application ou des fonctions installées du système. Tous les compilateurs C ++ modernes prennent en charge les en-têtes précompilés, il n'y a donc aucune pénalité de performance. La séparation des en-têtes des implémentations permet aux développeurs d’utiliser des bibliothèques programmées dans d’autres langages.

  

bizarreries syntaxiques qui rendent sa grammaire indécidable (comme < > crochets angulaires pour la déclaration de modèle), pratiquement pas de sucre syntaxique,

Le langage est très large et peut être difficile à suivre complètement, mais il est toujours guidé par un certain nombre de règles logiques qui s’appliquent partout. Le langage offre en réalité de nombreuses façons de personnaliser votre utilisation, par le biais de surcharges de fonctions et d’opérateurs, ainsi que de modèles permettant de donner une expression concise de votre problème

  

l'inclusion de macros qui fonctionnent au niveau textuel au lieu de fonctionnalités de langage réel pour traiter les objets pour lesquels les macros sont utilisées,

Il y a beaucoup de choses à ne pas aimer sur le pré-processeur, mais il peut être très utile d'opérer sur les jetons, du point de vue de la génération de code. Certes, des choses comme les macros M4 fournissent un moyen beaucoup plus puissant de le faire, mais l'inconvénient est que ce n'est pas une partie standard du langage. Le préprocesseur standard c / c ++ est disponible PARTOUT, là où se trouve le compilateur.

  

duplication de fonctionnalités telles que tableaux et chaînes (versions STL et C de ces types)

Cette fonctionnalité n'est pas une duplication. Des primitives de bas niveau octet par octet (arithmatique pointeur excluant) sont nécessaires pour la mise en œuvre de concepts d'ordre supérieur tels que les conteneurs génériques. N'oubliez pas que C ++ sert à programmer les systèmes sur lesquels il est implémenté, mais également à fournir le pouvoir expressif nécessaire pour effectuer un travail réel.

  

et un manque général de fonctionnalités modernes telles que le threading, la récupération de place, les délégués / fermetures, etc. (Remarque: oui, dans des environnements très limités en mémoire ou en temps réel, vous pouvez avoir de bonnes raisons de ne pas vouloir de récupération de place faire opt-out et être le moyen par défaut de gérer la mémoire.)

Le threading nécessite une coopération du système d’exploitation impossible à normaliser par un langage de programmation. De nombreuses langues résument cela en une seule interface, mais cela n’est pas arrivé en c ++ (cela arrive, apparemment). Les éboueurs sont disponibles pour C ++, mais il fournit un concept plus puissant, RAII. De toute façon, l'option de retrait n'est pas la méthode C ++: si une installation de collecte des ordures est toujours standardisée dans le langage, il s'agit certainement d'une option d'adhésion, de sorte que vous n'avez pas à payer pour cela si vous ne l'utilisez pas. .

Oui, j'apprécie beaucoup plus le C ++ que Java, car je suis beaucoup plus libre de m'exprimer.

C ++ est nécessaire car c'est le seul langage réellement évolutif pour le moment. Il existe un moyen de modifier chaque aspect du programme pour qu'il ne s'essouffle jamais.

L’autre avantage est que la verbosité est insérée dans le code de la bibliothèque, et non pas & "; utilisation &"; code. Une fois que la bibliothèque fonctionne, le code d'utilisation est généralement sympa et concis (et facile à lire si vous avez bien utilisé la bibliothèque).

En Java / C #, toute la verbosité est reportée dans le code d'utilisation - try / catch / finally ... toutes ces choses doivent être tapées encore et encore. Ick ...!

Ai-je mentionné les objets basés sur des piles? Comment les gens vivent-ils sans eux ... ??

Le seul endroit où C ++ tombe vraiment est la réflexion (même si cela peut être fait en quelque sorte, par exemple COM).

Oui, un C ++ épuré avec une syntaxe plus stricte serait bien, mais nous savons que cela ne se produira jamais. Vous pouvez vous habituer à la syntaxe et dans l'ensemble, c'est un petit prix à payer pour ce que vous obtenez en retour.

  

son créneau en tant que langage de programmation systèmes / performance

C'est un assez gros créneau! Les chances sont que si un logiciel a plus de 10 millions d'utilisateurs, il est écrit en C ++:

  • Windows
  • IE
  • PhotoShop
  • Firefox
  • Bureau
  • SQL Server
  • MySQL
  • moteur de recherche Google
  • AutoDesk

Source: http://www.research.att.com/~bs /applications.html

Pour moi, je préfère le C ++ car:

  • Cela reste une représentation assez simple de ce que le matériel va faire, ou suffisamment proche pour que vous puissiez faire des déductions éclairées sur le comportement et les performances du programme
  • Il est suffisamment souple pour me permettre d'utiliser ou de mettre en œuvre la plupart des paradigmes de programmation
  • Il offre une compatibilité élevée avec d'autres bibliothèques et modules, ainsi que la plus grande base de référence de support et de code directement utilisable
  • La plupart des " verrues " sont faciles à éliminer avec de bonnes pratiques de programmation et / ou des bibliothèques d’utilitaires, contrairement à d’autres langages où " verrues " sont moins faciles à réparer (par exemple: vous pouvez facilement réparer les fuites de mémoire en utilisant des pointeurs intelligents et diagnostiquer facilement la corruption de mémoire avec l'analyse directe de mémoire, vous ne pouvez pas facilement résoudre les problèmes de corruption de mémoire dans un langage de niveau supérieur comme C #, et oui je les ai eues)
  • Les applications C ++ peuvent généralement être exécutées sur toutes les versions de système d'exploitation, la seule limite étant l'effort. les langages de niveau supérieur nécessitent généralement des temps d’exécution qui peuvent être présents ou non

Que faudrait-il pour que je préfère autre chose pour le développement principal? Eh bien, en plus de traiter les raisons ci-dessus d’une manière ou d’une autre, l’autre & «Niveau supérieur &»; le langage devrait donner l’impression que je serais toujours capable d’implémenter et de déboguer tout ce que je peux faire en C ++. C ++ / CLI est la seule chose qui se rapproche de moi, mais sa syntaxe est encore pire, plus difficile à comprendre et elle échoue avec le & "Runtime required &"; test (et n’ajoute sans doute pas grand-chose aux autres avantages souhaités).

Je suppose que dans les 30 ans et plus qui précéderont ma retraite, je serai payé pour écrire autre chose que le C ++. Il existe certes des domaines de développement dans lesquels le C ++ n'est pas préférable, et les fournisseurs de langages ont de fortes motivations pour forcer les développeurs à utiliser des langages de niveau supérieur s'exécutant sur des environnements d'exécution propriétaires et / ou contrôlés par le fournisseur (par exemple: Java, C #, etc.). Pour le moment, cependant, pour moi, le C ++ est toujours le bon outil pour le travail et j'aime bien être payé pour continuer à l'écrire. :)

Mon opinion est que les gens ont besoin de langages de plus haut niveau offrant, d’une certaine manière, la même puissance que les offres C ++. Faire quelque chose dans un langage de haut niveau (disons Java) tout en fonctionnant plus rapidement, une compilation binaire native et d’autres fonctionnalités, sans recourir à quelque chose comme JNI, serait & «Ce dont j'ai besoin pour m'éloigner de C ++ ";

Quand ils trouvent un langage qui fonctionne plus vite avec moins de mémoire et qui est plus largement pris en charge.

Franchement, ça marche bien et je suis payé pour l'écrire. Il n'est pas mêlé aux caprices marketing d'un seul fournisseur qui le contrôle. Il y a de moins en moins d'experts C ++ sur le marché, donc ma valeur augmente avec le temps. Je continuerai à l'utiliser jusqu'à ce que le marché devienne insoutenable.

Comme vous l'avez décrit, le C ++ a certainement ses verrous: cet CQA FQA fait du bon travail. travail en montrant beaucoup d'entre eux. Cependant, les personnes et les organisations qui utilisent une langue depuis un certain temps ont englobé un grand nombre de idiomes , getchas et consignes permettant de travailler plus fréquemment supportable. Le style de programmation en C ++ a également a évolué au fil des ans. Grâce à la compilation native et aux outils développés, sur de nombreuses plates-formes, le C ++ reste un concurrent difficile.

À mon avis, le seul moyen pour le C ++ de perdre rapidement sa place est pour une grande entreprise, telle qu'IBM ou Google, de proposer une alternative viable, telle que le langage D et le pousser de toutes ses forces. Mais cela est pratiquement impossible à réaliser étant donné la quantité considérable de C ++ déjà existant dans leurs propres bases de code.

La meilleure façon de comprendre pourquoi le C ++ est ce qu’il est et d’apprécier ses réalisations est de lire & "La conception et l’évolution du C ++ &";.

.

Pour toutes ses verrues, le C ++ est un très bon langage.

J'utilise principalement le C ++ pour les plates-formes intégrées, qui nécessitent généralement une interaction étroite avec le matériel. Je ne vois pas vraiment de substitut à OO ici. Si je devais substituer C ++ à quelque chose ici, ce serait quelque chose qui pourrait résoudre tous les avantages au moment de la compilation, donc je ne devrais pas m'inquiéter de ceux-ci. frais généraux (réflexion, ramassage des ordures et autres).

Pour moi, le C ++ est axé sur les performances d'exécution et le contrôle absolu. Aucun composant d'exécution fantaisie qui fonctionne & "En coulisse &";

Je fais des calculs scientifiques, où mon interface graphique est en C # et mon backend est en C ++. Ce n’est pas hors de possibilité que C # puisse au moins égaler C ++ en termes de performances, mais ce n’est pas là que l’attention du groupe C # / insérer le langage géré est ici. Ce serait difficile, mais il est tout à fait envisageable que C # fonctionne aussi bien que C ++ (ou très proche de lui) pour le calcul numérique, car l’IL est compilé en code machine. Si / quand cela se produit, je ferai volontiers le changement.

Quand un nouveau langage peut être aussi expressif que C ++. En raison du conflit d'intérêts existant entre les capacités de haut et de bas niveau, il est difficile à atteindre. C’est pourquoi nous avons en premier lieu une interopérabilité des langages et des processus.

De plus, C est probablement plus difficile à faire avec C parce qu’il est si maigre et puissant. C gagne dans l'arène de bas niveau pour cette raison. Et C crée un bon support pour C ++ et l’objectif C.

En bref, vous verrez toujours C et C ++ pendant longtemps.

Mon choix personnel d’utiliser le C ++ (même si j’en ai le choix) est qu’il s’agit de l’un des seuls langages de programmation polyvalents qui n’est pas interprété et qui dispose de suffisamment de & "; bells and whistles &"; me laisser faire les choses assez rapidement. Maintenant, il y a un tas de raisons pour lesquelles je choisis d'autres langages (par exemple, Python, Java, Perl, ksh, etc.) lorsque l'occasion se présente. J'utilise d'autres langues pour & Quot; one-off & Quot; applications et scripts dans lesquels les performances ne sont pas un problème, pas plus que & "; la possibilité de déploiement sur le terrain &"; La prise en charge du déploiement de nombreux langages de script est très centrée sur le Web et je travaille plus dans une infrastructure et & "Colle invisible &"; l'industrie en ce moment. Nous sommes à la recherche de serveurs d’application J2EE pour résoudre les problèmes de déploiement et de support technique, mais nous disposons déjà de méthodes intéressantes pour les services exécutables.

La raison principale pour laquelle je continuerai à utiliser le C ++ par choix dans de nombreux cas est qu'il prend en charge presque tout ce dont j'ai besoin après avoir ajouté quelques bibliothèques sélectionnées pour gérer des éléments de la plate-forme ne faisant pas appel à un langage de programmation (threads, sockets, etc.). ). Et ... Oui ..., je considère que les threads doivent être représentés en dehors du langage de programmation. C’est la principale raison pour laquelle j’ai tendance à ne pas utiliser d’autres langages - j’aime en fait les langages avec un cœur dépouillé où les fonctionnalités sont fournies via des bibliothèques complémentaires.

Laissez le langage de programmation se préoccuper de la syntaxe, de l'héritage, du polymorphisme, de la structure du module, de la gestion des exceptions, des constructions en boucle, etc. Une fois que vous entrez dans le domaine d’application et que vous voulez effectuer plusieurs lectures en même temps, voire utiliser plusieurs processus, vous parlez de bibliothèques. Trop de langues essaient de forcer un paradigme de programmation particulier qui ne s'applique pas à tous les problèmes. Je préfère un beau langage de programmation généraliste.

La dernière raison, c'est que j'ai choisi le C ++ plutôt que d'autres langages, c'est que je pense en réalité qu'il est plus déterministe que d'autres langages. Je sais que Java est la solution de choix pour une plate-forme neutre et Ruby & Amp; Les pythons sont les alternatives de développement rapide du'jour. Le problème est que les applications interprétées fonctionnent toujours à la guise de leur interprète. Ce n'est pas toujours une mauvaise chose et ce n'est certainement pas toujours une bonne chose non plus.

Il y a de fortes chances que le C ++ soit là pour un peu plus longtemps. Mon hypothèse est qu'un grand nombre de langages OOP plus purs vont commencer à perdre des parts de marché au profit de langages dynamiques plus généraux (probablement Ruby et Python) et que ces langages vont également capter des côtelettes OO plus sérieuses. Je vais passer à un autre langage lorsque le soleil se couche vraiment sur C ++ et qu'il existe un autre langage qui est bien accepté par & "; L'industrie &"; Je suis sûr que cela se produira un jour ... après tout, le C ++ a en réalité remplacé le C comme langage de choix il y a quelques années.

C ++ est un outil de ma boîte à outils. Ainsi java et python et quelques autres choses.

L’environnement de mon entreprise me permet facilement d’utiliser ce qui convient.

  • C ++ == perf si nécessaire.
  • Java == lorsque perf n'est pas si nécessaire (en raison du fait que les E / S réseau / externes surpassent largement les cycles de traitement), et que la vitesse de développement est nécessaire.

Outils dans votre boîte à outils. Utilisez ce qui est approprié.

Pourquoi? Êtes-vous prêt à faire des bénéfices si je commence à écrire du code dans une langue différente? :-P

Je plaisante, j'écris du code C ++ parce que c'est la raison pour laquelle mon employeur me paye. C'est vraiment aussi simple que cela. S'ils décidaient d'utiliser une langue différente, je commencerais à l'utiliser. Maintenant, pour savoir pourquoi ils ont choisi de l’utiliser, je ne peux que spéculer. Je suppose qu’ils ont deux raisons principales:

  1. Il y a une offre suffisante de collège diplômés qui sont assez bons à C ++ qu'ils peuvent accomplir leur objectifs commerciaux.
  2. C ++ offre bon     assez de performances en temps réel     systèmes distribués.

Malheureusement, vous n’avez pas découvert l’élégance fondamentale et l’intégrité conceptuelle de la langue. Il offre une vision du monde aussi confortable et cohérente que toute autre langue, comme en témoigne son utilisation continue au fil des ans. YMMV, mais accordons-nous tous la même considération.

Vous vous en tenez à l'inverse. Les personnes choisissent les domaines de problèmes / applications qui les intéressent. Le choix de la langue découle de cette décision et est relativement simple.

Personne ne choisit un langage de programmation. Les langages de programmation en eux-mêmes sont ennuyeux et en parler sans faire référence à un problème / un domaine d'application est absurde.

Personnellement, je voulais travailler en apprentissage automatique. En tant que diplômé. étudiant, j’ai travaillé sur l’analyse des représentations graphiques d’énormes jeux de données (IMDB, Netflix). J'ai utilisé le C ++ pour la plupart de mes travaux. J'aurais aimé travailler en C #, en Java ou, mieux encore, en Python, mais la nature du problème m'obligeait à utiliser le C ++. En 5 ans, je suis tombé amoureux de C ++ pour son équilibre en or, efficacité et abstraction. Je vais utiliser le C ++ chaque fois que j'en vois la nécessité. Les programmeurs C ++ sont des pragmatiques au nez dur qui ne laisseront rien s'opposer à la réalisation des objectifs. Ils n'accepteront pas le C ++ pour le plaisir de le faire.

Je suppose qu’il est admis que les parties de haut niveau et de bas niveau d’un projet n’ont pas besoin d’être écrites (et ne devraient généralement pas être) dans la même langue ces jours-ci. Donc, vous attendez que les employeurs réalisent que même s'il est plus difficile de trouver des développeurs qui travaillent dans plusieurs langues, il est en fait plus facile de trouver de bons développeurs, ou bien d'attendre le armée d'incompétents pour obtenir avec le programme polyglotte.

Consultez votre liste de " problèmes " avec C ++, les conversions de chaînes STL / C sont le seul problème pour lequel je suis presque prêt à accepter que les problèmes sont résolus.

Je pourrais vous demander pourquoi vous voulez que C ++ soit en C #?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top