C++ aujourd'hui est-il comme Fortran ? Aurait-il atteint ses limites ?
Un ingénieur explique pourquoi il ne s'adonne plus beaucoup au C++ moderne

Le , par Stéphane le calme, Chroniqueur Actualités
C++ est l'un des langages de programmation les plus largement utilisés dans le monde d’après de nombreux baromètres, mais également notre sondage lancé en 2015 où le langage conservait une place dans le peloton de tête des langages préférés des développeurs. Grâce à la flexibilité du langage, il est possible de l’utiliser pour créer une large gamme d’applications, mais également des jeux. Depuis, C++ a évolué via plusieurs itérations.

Henrique Bucher est un ingénieur spécialisé dans la conception de logiciels scientifiques qui travaille dans le secteur des services financiers. Partageant son expérience dans un billet blog, il a expliqué les raisons pour lesquelles il ne s’adonne plus beaucoup au C++ moderne.

Une perte de performance : selon lui, le C++ moderne intègre une potentielle perte de performance à cause des structures qui deviennent de plus en plus complexes et qui sont passées au compilateur. « C’est ici que Fortran excelle », affirme-t-il en expliquant que « grâce à un langage plus simple, les compilateurs sont en mesure de l’optimiser plus efficacement que s’il s’agissait d’un code C/C++ équivalent ». Se basant sur son expérience sur les transactions à haute fréquence (qui désignent l’exécution à grande vitesse de transactions financières faites par des algorithmes), mais aussi dans l’industrie du jeu, il estime que c’est une utopie de croire que les templates vont être plus rapides parce que le code C++ va s’évanouir comme par magie durant la compilation. « C’est même l’opposé : de plus petits octets de code peuvent être compilés, débogués et optimisés en observant l’assemblage généré de façon bien plus efficace que les templates ».

Les temps de compilation : Il affirme que les templates augmentent de façon significative le temps de compilation à cause de la recompilation d’un plus grand nombre de fichiers impliqués. « Tandis qu’une simple classe traditionnelle C++ sera recompilée si les fichiers en-tête directement inclus sont modifiés, dans un paramétrage en moderne C++, un simple changement va souvent provoqué une recompilation globale. Il n’est pas rare de voir des applications développées en C++ moderne qui prennent 10 minutes pour être compilées, tandis qu’avec le C++ traditionnel cette durée se compte en secondes pour un changement simple ».

La maintenance : citant Edger Djikstra, un mathématicien et informaticien néerlandais du XXᵉ siècle, qui a déclaré que « la simplicité est une condition préalable à la fiabilité », il estime que ce mantra peut être appliqué directement aux templates : « ce n’est pas que la fonctionnalité en elle-même est mauvaise, mais sa structure inhérente conduit à un code complexe qui pourrait éventuellement faire perdre la caractéristique la plus désirée d'un code source: la facilité de compréhension ». « Lorsque vous programmez des systèmes de transactions qui peuvent envoyer 100 000 commandes par seconde depuis des plateformes avec des stratégies qui sont implémentées en production sur un cycle de production de deux jours, vous VOULEZ la simplicité, vous avez BESOIN de la simplicité. Ce qui me conduit à la règle suivante : “si vous êtes incapables de déterminer en une minute ce que fait un fichier C++, supposez que le code est incorrect” ».

Il continue en disant que la véritable raison pour laquelle il ne s’adonne plus au C++ moderne, bien qu’il reconnait qu’il est plutôt efficace dans certains cas de figure, est « qu’il y a tellement de choses développées en industrie sur lesquelles je dois porter mon attention ». « C++ aujourd’hui est comme Fortran : il a atteint ses limites. De nos jours, il y a des interfaces si rapides que la notion de “cycle fermé” cesse d’exister dans certaines parties du système. La vitesse est telle que si deux octets sont envoyés au même moment depuis deux canaux adjacents, ils vont probablement se désynchroniser après avoir parcouru moins d’un mètre. Pour gérer ce type de vitesse qui est livré en masse par les entreprises technologiques, C++ ne peut plus être utilisé parce qu’il est intrinsèquement en série, même dans des systèmes massivement multithread comme les GPU ».

« Aujourd’hui, le “technologue moderne” doit se fier à un nouvel ensemble de langages : Verilog, VHDL. Les nouveaux technologues doivent être en mesure de concevoir leurs propres CPU, créer leur propre carte mère virtuelle, autrement ils vont être emportés par l’avalanche d’avancements technologiques qui arrive dans les prochaines années ».

« Ce n'est pas pour dire qu'il est impossible de créer des plateformes basées sur le C++ moderne avec une faible latence et rapides, mais cela crée de nombreux obstacles qui peuvent paralyser une équipe ou générer des graphiques extrêmement difficiles à optimiser avec lesquels les compilateurs C++ auront des difficultés ».

Il conclut en disant que, de son point de vue, C++ est un langage comme Fortran : il montre des signes de vieillesse. Pour lui C++ est génial, mais n’est juste « plus suffisant » : un nouveau technologue ne saurait donc plus être restreint à un tel environnement sérialisé et garder son esprit ouvert pour pouvoir profiter de nouveaux outils et nouvelles techniques afin de gérer la nouvelle génération de technologies qui seront livrées durant les prochaines décennies.

Source : blog Henrique Bucher

Et vous ?

Partagez-vous son point de vue ?

Voir aussi :

Quel est votre langage de programmation préféré en 2015 ? Partagez votre expérience sur le langage de votre choix

Forum C++

Rubrique C++


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Mingolito Mingolito - Membre chevronné https://www.developpez.com
le 18/05/2016 à 17:48
Il faut reconnaitre que comparé à des langages modernes et bien foutus comme par exemple Java, C# ou Swift : C++ ca reste un énorme casse tête .
Mais bon pour faire un logiciel commercial ou un jeux qui demande des performances C++ reste le plus souvent encore incontournable, mais pour le reste en grandes entreprises Java et C# ont pris le plus gros du marché, ça se voie d'ailleurs car c'est sur ces deux langages qu'il y à le plus d'offres d'emploi, ici par exemple : http://emploi.developpez.com
Avatar de Aiekick Aiekick - Membre expérimenté https://www.developpez.com
le 18/05/2016 à 18:01
je suis fan du c++ et je suis plutôt d’accord avec lui. heureusement quand on eut faire plus simple et plus spécifique pour l'optimisation il y a le c
Avatar de ParseCoder ParseCoder - Membre habitué https://www.developpez.com
le 18/05/2016 à 18:32
Je trouve la critique un peu radicale même si c'est vrai que le C++ est un peu une usine à gaz. On comprend mieux en lisant le billet original car son argument est surtout pourquoi passer un temps fou à essayer de devenir un gourou du C++, alors qu'en terme de perf le passage à des technos à base de fpga est beaucoup plus intéressant. Mouais. C'est pas faux. Juste un peu radical quoi.
Avatar de Aurelien.Regat-Barrel Aurelien.Regat-Barrel - Expert éminent https://www.developpez.com
le 18/05/2016 à 18:38
Ouh là, ça va troller fort...

Précisons juste que C++ a beaucoup de domaines d'application très différents, chose que peu de langages peuvent prétendre. Faut bien avoir ça en tête avant de tirer des généralités à partir de ce qui peut être constaté dans un milieu particulier, d'autant plus quand il s'agit du trading haute fréquence (qui est assez... particulier quand même). Pour rappel, il ne prône pas d'utiliser swift ou Go à la place, mais VHDL : "un langage de description de matériel destiné à représenter le comportement ainsi que l'architecture d’un système électronique numérique"...

Un langage spécialisé sera toujours plus simple et efficace qu'un langage généraliste. Ca ne veut pas dire que les langages généralistes ont fait leur temps. Enfin, je ne pense pas.
Avatar de RyzenOC RyzenOC - Membre émérite https://www.developpez.com
le 18/05/2016 à 18:39
C'est l'une des raisons qui m'a poussé à abandonné complètement le c++ il y'a quelques années déjà.

Aujourd'hui je me suis reconvertie dans le python, le coté développement très rapide me plait beaucoup dans ce langage. Et pour les performances on arrive à contourner le problème avec les bibliothèques codé en C nativement, ou bien on peut aussi mettre du C dans son code python si c'est nécessaire.
Avatar de ParseCoder ParseCoder - Membre habitué https://www.developpez.com
le 18/05/2016 à 18:43
Citation Envoyé par Mingolito Voir le message
... comparé à des langages modernes et bien foutus comme par exemple Java, C# ou Swift ...
Java un langage moderne!? non non pas taper!

Mis à part les librairies et framework Java je ne vois pas trop l'intérêt de ce langage (qui a maintenant plus de 20 ans) si on se limite au design du langage.
Avatar de dalfab dalfab - Membre chevronné https://www.developpez.com
le 18/05/2016 à 18:58
Je pense que l'évolution du C++ en veut trop.
* amélioration des performances avec une meilleure maîtrise des opérations de bases (x-value, atomic, ...) pour les logiciels de bas niveaux optimums.
* simplification des notations pour le logiciel de haut niveau (lambda, concepts, ...)
Le tout en restant compatible avec le C++ d'il y a 30 ans et même avec le C !
La maîtrise du C++ oblige à en comprendre tous les rouages. L'apprentissage du C++ est de plus en plus long.
La concurrence des langages de haut niveaux d'un côté et des codes FPGA de l'autre, force le C++ a un grand-écart qui risque de lui être fatal.
Je ne le rejoint pas quant à la perte de performance. Si on en connait bien les concepts, on pourra écrire un code d'assez haut niveau qui pourra être optimisé. Et le fortran ou le C ne font pas mieux, peut-être un nouveau langage de bas niveau mieux adapté au multi-processing?
Avatar de Mingolito Mingolito - Membre chevronné https://www.developpez.com
le 18/05/2016 à 21:24
Citation Envoyé par ParseCoder Voir le message
Java un langage moderne!? non non pas taper!

Mis à part les librairies et framework Java je ne vois pas trop l'intérêt de ce langage (qui a maintenant plus de 20 ans) si on se limite au design du langage.
Bjarne Stroustrup a développé C++ au cours des années 1980. Le langage Java reprend en grande partie la syntaxe du langage C++, néanmoins, Java a été épuré des concepts les plus subtils du C++ et à la fois les plus déroutants, tels que les pointeurs et références, ou l’héritage multiple contourné par l’implémentation des interfaces. Les concepteurs ont privilégié l’approche orientée objet de sorte qu’en Java, tout est objet à l’exception des types primitifs (nombres entiers, nombres à virgule flottante, etc.). Le langage Java est issu d’un projet de Sun Microsystems datant de 1990 : l’ingénieur Patrick Naughton n’était pas satisfait par le langage C++ utilisé chez Sun.

Donc Java est plus "moderne" que C++, mais effectivement moins moderne que C# ou Swift, c'est une simple vérité historique et technique le reste c'est du troll mais ce débat est fait pour ça

A quoi sert Java ? à gagner sa vie, http://emploi.developpez.com :
- Offres C++ : 722 résultats
- Offres Java : 3811 résultats

Beaucoup de développeurs Java font du Java non pas parce que c'est leur langage préféré, mais parce que c'est sur Java qu'on leur à proposé le plus haut salaire .
Avatar de Bestel74 Bestel74 - Membre confirmé https://www.developpez.com
le 18/05/2016 à 21:33
Citation Envoyé par Stéphane le calme Voir le message
« Aujourd’hui, le “technologue moderne” doit se fier à un nouvel ensemble de langages : Verilog, VHDL. Les nouveaux technologues doivent être en mesure de concevoir leurs propres CPU, créer leur propre carte mère virtuelle, autrement ils vont être emportés par l’avalanche d’avancements technologiques qui arrive dans les prochaines années ».
Euuuuuuuh, c'est moi ou l'auteur compare un logiciel C++ avec un système embarqué FPGA ?

Sinon j'ai pas trop compris ou il voulait en venir, surtout pour les template : "Quand on ne les utilise plus, ça compile plus vite"...... ouiiiiiii d'accord....

si vous êtes incapables de déterminer en une minute ce que fait un fichier C++, supposez que le code est incorrect
Ca marche avec du C ça aussi ?
J'ai Linus au téléphone, on est entrain de tout revoir l’architecture du noyau, c'est le bordel

... Et puis j'aimerai bien voir si j'arrive à comprendre son code VHDL en 1 minute
Avatar de mintho carmo mintho carmo - Membre averti https://www.developpez.com
le 18/05/2016 à 22:07
Ce n'est pas comme si ces critiques étaient nouvelles, elles ont probablement été faite dès la création du C++. Et personne ne va nier ces problématiques, même le comité C++ bosse dessus (par exemple avec les modules, dont un des objectifs attendus est le temps de compilation).
Idem pour les templates, tout le monde sait très bien que cela pose des problèmes de lisibilité. Et le comité bosse aussi sur des alternatives (par exemple les concepts), en particulier via la programmation fonctionnelle (fold par exemple).

Et honnêtement, qui a déjà pensé que le C++ était "suffisant" (pour faire quoi ?) et qu'on pouvait se passer de tous les autres outil ?

Des langages plus moderne ont peut être fait le choix de simplifier certaines syntaxes, cela n'est pas sans conséquence. Le C++ a fait le choix d'être très permissif et ce n'est pas non plus sans conséquences.
La possibilité de faire du code haut niveau sans surcoût à l'exécution permet de simplifier l'écriture de code sur des problématiques très complexe à gérer avec un langage bas niveau (par exemple la programmation concurrente et/ou parallèle). Mais la liberté de faire du bas niveau permet également d'entrer dans les détails, ce que ne permet pas un langage haut niveau. Ce grand écart (parce qu'il ne faut pas se leurrer, c'en est un) est une caractéristique unique du C++. Si on en a besoin et si on a les compétences, c'est une chose qu'aucun autre langage ne permet.

Citation Envoyé par Mingolito Voir le message
A quoi sert Java ? à gagner sa vie, http://emploi.developpez.com :
- Offres C++ : 722 résultats
- Offres Java : 3811 résultats

Beaucoup de développeurs Java font du Java non pas parce que c'est leur langage préféré, mais parce que c'est sur Java qu'on leur à proposé le plus haut salaire .
Toujours le problème de l'offre et la demande. Java a beaucoup plus d'offres (et PHP encore plus je crois), mais également plus de développeurs. Plus un langage, une technologie ou une spécialité est un domaine de niche, plus les salaires sont tirés vers le haut (<troll> cf les bas salaires des "pisseurs de code" en PHP... </troll>). A ma connaissance, un dev C++ peut avoir un salaire plus élevé qu'un dev Java (bien sur, pas en sortie d'école, où tous les devs ont 50 langages sur leur CV. Je parlais d'un vrai dev C++).

Mais bon, si les gens préfèrent faire du Java (ou autre), cela me convient très bien. Cela me permet de demander un plus gros salaire
Offres d'emploi IT
Expert application Supply Chain & Achats H/F
Safran - Ile de France - Evry (91)
Responsable de lot vérification et qualification (IVVQ) H/F
Safran - Alsace - MASSY Hussenot
Chef de projet technique H/F
Safran - Ile de France - Melun (77000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil