IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

153PARTAGES

13  7 
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++

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Bestel74
Membre éclairé 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
20  1 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 19/05/2016 à 8:29
Ce type me fait surtout penser à un dinosaure du fortran qui n'a jamais accepté la transition vers le C.
Avec un poil de haine pour la programmation fonctionnelle au passage.
Présenter VHDL, Verilog ou fortran comme des modèles de simplicité en 2016, il faut quand même oser.

là où le bât blesse , c'est que le C++ moderne (C++14, C++17, C++19, C++22 et le brouillon C++11) en est rempli: exemple, unique_ptr, weak_ptr, auto_ptr...
Tous les experts C++ tendent à s'accorder qu'utiliser les templates de la STL n'a rien de répréhensible ni de controversé, même Google dans ses guidelines.

C'est quand on commence à abuser des patterns à la SFINAE que les problèmes apparaissent.
Il y a une grosse différence en terme de complexité entre utiliser un simple std::vector ou un std::unique_ptr...... et venir pondre quelque-chose comme Boost.Lamda.

C++ est et a toujours été une toolbox multi-paradigme géante: il t'offre tout, libre à toi d'utiliser ce que tu veux ou pas

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 »
De nos jour il n'y a aucune différence en terme de performance entre un code C++ optimisé et un code fortran optimisé. Ça a déjà été analyse mainte et mainte fois dans la littérature.

Et comme avec tous les langages de haut niveau, certaines fonctionnalités bien précises ont un coût en terme de performance si tu les utilises.

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é »
Un mauvais code est toujours difficile a maintenir, quel que soit le langage.
C'est pour ça qu'on a créer les coding guidelines et les reviews.

Syntaxiquement, C++ n'est pas plus dur à appréhender que Java ou C#. Seul la méta-programmation peut l’être.
Et c'est précisément pour ça que des boites comme Google l'interdise ou en réduise la portée.

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.
Le seul argument sur lequel je suis d'accord: les temps de compilation C++ sont long. Ceci dit, les modules C++ devrait à l'avenir améliorer ça normalement.

Petite remarque: dans les stats, C++ paye mieux que Java, au moins aux États-Unis.
Et c'est normal.
La learning curve de C++ étant beaucoup plus longue que celle de Java.
Plus le fait que, malheureusement, les personnes qui apprennent un C++ correct à l'école ne sont pas légions.
18  0 
Avatar de Aurelien.Regat-Barrel
Expert éminent sénior 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.
16  0 
Avatar de mintho carmo
Membre éclairé 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
13  0 
Avatar de pumbaOfJungle
Nouveau membre du Club https://www.developpez.com
Le 19/05/2016 à 9:21
Je ne remets pas en cause ses arguments, le gars à l'air de s'y connaître vachement plus que moi.

Toutefois, je mettrais en exergue que le dit-gars parle de domaines très pointus (trading hyper fréquence, communication à très (très haut débit)), qui ne correspondent pas à l'utilisation du C++ que doivent faire 99% des développeurs dans ce langage.

Effectivement j'imagine qu'un programme écrit dans un langage "générique" exécuté sur du matériel "générique" (CPU et GPU) ne permet pas de suivre le rythme qu'un développement "matériel" (fpga) spécifique aura.

Heu, c'est pas un peu une évidence ça ?
10  0 
Avatar de ParseCoder
Membre averti 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.
13  4 
Avatar de Orabig
Nouveau membre du Club https://www.developpez.com
Le 26/05/2016 à 7:51
(...)de plus petits octets de code peuvent être compilés, débogués et optimisés(...)
Je ne savais pas qu'il y avait des petits et des grands octets de code. Ca fait quelle taille un "petit octet" ? 7 bits ?
Plus sérieusement, cette phrase (et plusieurs autres) ne veut strictement rien dire. Messieurs de developpez.net, merci de soit soigner la traduction (on dirait une traduction Google en fait), soit laisser les phrases en anglais...

Edit : Excusez-moi, j'ai été mauvaise langue. Il ne s'agit pas d'une traduction automatique Google, puisque même Google arrive à traduire correctement "smaller bits of code" par "Petits morceaux de code"...
9  0 
Avatar de mintho carmo
Membre éclairé https://www.developpez.com
Le 18/05/2016 à 22:42
Citation Envoyé par Mingolito Voir le message
Quel est le niveau d'adoption du C++ "moderne" dans les projets actuels en entreprise ? 5% ?
Si tu recherches les offres d'emploi spécifiant "C++11" : 100%

Plus sérieusement, les boites que j'ai vu et qui font du C++ "moderne" sont également celle qui sont "moderne" pour la gestion de projet et le management en général. En particulier, elles portent une attention toute particulière sur la qualité du code (test, agile, code review, etc).
J'aurais tendance à dire, si on a le choix, de ne pas de toute façon travailler dans les boites où son travail n'est pas correctement considéré. Et la volonté de faire du C++ "moderne" est un indicateur que l'on peut prendre en compte dans ce sens. (Parce que, bon, un moment donné, se taper des bugs fix à longueur de journée parce que le code est moisi, c'est pas très passionnant).
10  2 
Avatar de Darktib
Membre confirmé https://www.developpez.com
Le 18/05/2016 à 22:56
Point 1: A la fois vrai et faux. C'est vrai qu'il y a des propriétés du langage qui empêchent des optimisations, par exemple le fait que deux variables ne désignent pas le même objet en fortran (par définition) permet de meilleures optimisations. Par contre la partie sur les templates est fausse : le code template est souvent mieux optimisé, dans 90% des cas c'est plus rapide que de passer par une interface. Après, principe de base: on mesure avant d'optimiser, donc s'il voit un problème dans une boucle qui traite des transactions, il est toujours possible de la réecrire en assembleur si c'est important...

Point 2: Pas grand chose à dire, à part que les templates font partie de ce qu'il semble appeler "C++ traditionnel"... Mais effectivement ça rallonge des temps de compilation déjà long. En C++20 il y aura probablement les modules.

Point 3:
Citation Envoyé par article
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
bah oui, 99% des machines sont programmées en série, ou part fils d'exécutions série exécutés en parallèle (genre GPU). C'est pas un problème de C++, même avec du fortran sur GPU ça serait en "série".
Citation Envoyé par article
« Aujourd’hui, le “technologue moderne” doit se fier à un nouvel ensemble de langages : Verilog, VHDL
Laissez-moi rire... sait-il vraiment de quoi il parle ? Ces deux langages sont absolument tout sauf faciles à comprendre. C'est ultra bas niveau. D'ailleurs, c'est plus de l'électronique que de l'informatique - et tout le monde n'a pas un FPGA sous la main... Quand on fait un jeu vidéo par exemple, on veut que ça tourne sur un ordi standard. Donc: exit Verilog et VHDL.

Petite remarque: dans les stats, C++ paye mieux que Java, au moins aux États-Unis.
9  1 
Avatar de Sytten
Membre régulier https://www.developpez.com
Le 19/05/2016 à 5:41
Oulala VDHL lisible
J'en fais dans mes cours d'électronique et c'est tout sauf lisible/simple quand ça commence à devenir le moindrement complexe.

D'ailleurs ce n'est pas du tout pour la même utilisation.
On ne peut pas comparer un langage généraliste pour CPU (nécessairement peu parallélisé) avec un langage de logique séquentielle/combinatoire.
Par contre, je ne dirais pas que c'est vraiment plus bas niveau que le C++ ou le C, c'est juste différent (En fait c'est un peu plus bas à cause du timing, mais c'est pas mal géré automatiquement de nos jours).
Le VHDL/verilog c'est bien pour générer des trucs qui doivent travailler en parallèle massivement comme des décodeurs ou des traiteurs d'informations, pas pour créer des UI^^

Au niveau des contraintes matérielles comme il a été mentionné plus bas il faut un FPGA, par contre dans le futur je dois avouer que cela risque de devenir plus commun (voir le récent rachat de Intel).
Ils vont probablement être embeded dans les processeurs pour des tâches dédiées, un peu comme les chips dédiées au calcul flottant.
Par contre, ils vont devoir créer de nouveaux langages. Si le mec pense pouvoir compétitionner swift avec du Verilog, il est juste pas bien dans la tête
8  0