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++
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
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
Une erreur dans cette actualité ? Signalez-nous-la !