Quel est le rôle du C ++ aujourd'hui?

41

Actuellement, je suis un étudiant en informatique et je me demande ce qui est encore important en C ++ aujourd'hui, à quoi sert-il? J'ai suivi un cours de base sur le C ++ dans mon université, mais je ne peux pas imaginer où puis-je utiliser mes connaissances et dans quelle direction devrais-je apprendre le C ++?

En d'autres termes, que dois-je apprendre pour devenir un programmeur C ++ performant?

Actuellement, j'apprends Java simplement parce que je ne vois pas clairement dans quel domaine le C ++ pourrait être utile aujourd'hui, mais je sais clairement quel type de travail je vais faire en tant que programmeur Java. Mais j'espère toujours que le C ++ n'est pas mort.

Enfers
la source
2
C'est mon point de vue. C ++ est très utile dans les situations en temps réel (et les jeux vidéo). J'utilise également le C ++ pour les applications de bureau (n'oubliez pas de Qt) pour des raisons de performances.
Hosomaki
1
@stign IMO, il est probable qu'il mourra un jour car il est probable que toutes les langues d'aujourd'hui seront obsolètes (probablement en raison de modifications massives du matériel utilisé).
Kenneth
17
Le C ++ est loin d'être mort (j'écris de nouveaux codes tous les jours), et si COBOL en est une indication, j'aurai du travail pendant de très nombreuses années.
Michael Kohne
2
Jetez un coup d'œil à la balise pour la programmation des langages et faites votre propre conclusion: lextrait.com/vincent/implementations.html
Nemanja Trifunovic
1
Récemment, j'ai visionné des vidéos intéressantes sur la chaîne 9 de Microsoft . Microsoft a consacré des millions de dollars aux études de marché et, selon ses recherches, il parle d’une renaissance du C ++. Voir cette vidéo .
Grokus

Réponses:

57

La principale caractéristique de C ++ est la gestion des ressources liée à la portée , SBRM (plus communément appelée " RAII "). C'est le seul langage de programmation industriel construit autour de ce concept. En C ++, les durées de vie de tous les objets sont exactement connues et les programmes C ++ (bien écrits) garantissent que les ressources sont acquises et libérées de manière totalement déterministe. En comparaison, les langages collectés ou gérés d'une autre manière ne fournissent aucune de ces garanties; en fait, les objets dans ces langues peuvent persister après la fin de leur vie.

C’est la raison pour laquelle le C ++ est utilisé dans les domaines de la finance, des jeux vidéo, des systèmes embarqués et temps réel hautes performances, du transport, de la fabrication, et d’autres industries dans lesquelles le déterminisme et la précision sont importants. Il n'y a pas d'alternative.

Certes, il a été utilisé pour beaucoup plus de tâches que cela, et ces tâches sont en train d'être perdues au profit de C #, Python et d'autres langages plus appropriés, mais cela n'affecte pas son créneau principal.

Cubbi
la source
20
Quiconque utilise malloc en C ++, je voudrais leur frapper la tête avec un objet dur. En outre, il existe une fonctionnalité moins connue de l'opérateur newen C ++ appelée placement. Il permet de réutiliser un espace mémoire actuellement occupé. Donc, si quelqu'un veut éviter (ou minimiser) la fragmentation, il peut le faire, en théorie. Et prévisible n'est pas le même déterministe.
Tamás Szelei
4
@Apalala C ++ a également un comptage de références, mais il est bien pire que SBRM en termes de gestion de la durée de vie des objets. Je ne parle pas seulement de déterminisme de la RT dure, je parle du comportement déterministe du modèle objet.
Cubbi
4
Quand j'ai appris le C ++, RAII n'était pas particulièrement connu; J'ai appris de nouvelles techniques de suppression et de gestion du pointeur basées sur le cerveau. Donc, je ne pense pas que vous puissiez le qualifier de "construit autour du concept". Les bibliothèques et autres structures de support utilisées aujourd'hui peuvent avoir, mais pas le langage ou la syntaxe de base.
jprete
7
@jprete Il est vrai que de nombreuses forces du C ++ ont été découvertes plutôt que conçues. Cet article concerne la langue post-2005.
Cubbi
5
RAII a été conçu en C ++. Mais la plupart des programmeurs C ++ ont juste continué à écrire en C, remplaçant malloc par new et free avec delete.
kevin cline
40

Il existe quelques marchés pour C et C ++ (à ma compréhension, bien que limitée)

  1. Code existant. C et C ++ ont certaines des plus grandes bases de code existantes. Un code de cette taille ne peut pas être simplement jeté parce que le "prochain nouveau langage" est arrivé. Les liaisons en C sont à peu près le standard d’interaction entre les langues sur la plupart des plates-formes. Il est donc utile de pouvoir (au moins) créer des bibliothèques de wrapper en C ou C ++.
  2. Applications hautes performances (p. Ex. Financement à haute fréquence). C et C ++ obtiennent toujours de meilleures performances que la plupart des autres langages de programmation. Plus important encore, en C ++, on construit souvent des abstractions avec des éléments réservés au compilateur, tels que des modèles, ce qui déplace le calcul de l'exécution au temps de la compilation (ce qui accélère l'ensemble de l'application).
  3. (Similaire à 2) Applications à faible temps de latence. Les langues qui fonctionnent par exemple sur le CLR ou la JVM peuvent souvent être presque aussi rapides que le C ++ en fonction de l'application, mais vous devez toujours charger le CLR ou la JVM eux-mêmes en mémoire avant que votre programme puisse s'exécuter. Si vous avez des exigences de démarrage difficiles, cela est important. ÉDITER À PARTIR DE COMMENTAIRES : à cet égard, les exigences de latence stricte de toute description sont à noter ici. Les langues qui s'exécutent sur des machines virtuelles offrent rarement des limites de temps strictes car l'exécution de la récupération de place par exemple n'est pas un processus déterministe.
  4. Systèmes embarqués. Certains systèmes embarqués ont le matériel nécessaire pour fonctionner, par exemple la JVM (Android de Google (OK, ce n’est pas vraiment la JVM, mais elle est proche), le Blackberry de RIM) ou le CLR (Windows Phone), mais la plupart des systèmes embarqués n’ont pas le pouvoir. exécutez des langages qui requièrent davantage de support d'exécution que celui requis pour C ou C ++ (ce qui correspond à peu de support d'exécution).
  5. Déploiement d'applications limitées. Parfois, l’installation de la JVM ou du CLR est excessive, si votre programme n’est que de quelques centaines de Ko. (Par exemple, la plupart des programmes sur lesquels je travaille doivent être déployés en tant que .EXEfichier unique , sans aucun programme d'installation ou quelque chose du genre; pour cela, il n'y a pas d'alternative.)
Billy Oneal
la source
2
La latence de démarrage n'est pas le seul type de latence à se préoccuper: les exigences en temps réel peuvent être un dealbreaker bien plus important.
Greyfade
1
Ajoutez quoi que ce soit où vous ne voulez pas être enfermé dans un fabricant particulier (C # ou Objective-C) ou ne voulez pas que votre langue disparaisse dans une série de poursuites (Java)
Martin Beckett Le
@ Greyfade: C'est un peu ce que je voulais dire par (2), mais je conviens que ce n'est pas clair. Édité. @Martin: Bien que je pense que c'est une bonne force pour le C ++, je ne pense pas que cela réponde à la question: quels sont les marchés sur lesquels le C ++ est couramment utilisé? De plus, je ne pense pas que je dirais que C # est verrouillé sur un fabricant en particulier lorsqu'une version sous licence <S> BSD </ S> (OOPS: C’est LGPL) du CLR existe (mono).
Billy ONeal
1
Aussi 5. Systèmes d'exploitation et infrastructure de base. Vous pouvez faire beaucoup dans une machine virtuelle, mais la machine virtuelle doit encore être implémentée en C et / ou C ++.
Jan Hudec
1
@ Jan: Oui ce serait. Des choses comme la réflexion et les amis déclencheraient des problèmes 2-4. Le seul sous-ensemble dont vous auriez réellement besoin pour écrire le ramasse-miettes serait un objet représentant la mémoire physique.
Billy ONeal