Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débats sur le développement - Le Best Of Discussion :

Programmation : une étude révèle les langages les plus voraces en énergie


Sujet :

Débats sur le développement - Le Best Of

  1. #81
    Membre chevronné
    Le langage C ne sera-t-il jamais battu en termes de rapidité d’exécution et de faible consommation d’énergie ?
    Le langage C ne sera-t-il jamais battu en termes de rapidité d’exécution et de faible consommation d’énergie ?
    voici les résultats d'une étude sur 27 langages de programmation les plus connus

    L’étude réalisée par des chercheurs portugais révèle que C se positionne comme le langage de programmation le plus performant en termes de temps d’exécution et de faible consommation d’énergie (du CPU et de la RAM). C’est le résultat issu du benchmark ainsi effectué se basant sur le Computer Language Benchmarks Game (CLBG) pour comparer les 27 langages les plus populaires auprès des développeurs. Le papier relatant cette étude a été publié pour la première fois en 2017 dans International Conference on Software Language Engineering (SLE) ; une mise à jour de cette analyse comparative a été effectuée pour l’année 2020, mais concernant uniquement les langages fonctionnels.

    Pour revenir aux résultats de l’étude initialement réalisée (2017), C affiche les valeurs les plus faibles par rapport à celles des 26 autres langages considérés en ce qui concerne le temps d’exécution (2019.26 ms) et la consommation d’énergie (57.86 J) dans l’exécution des solutions relatives aux dix problèmes retenus dans l’initiative CLBG. En revanche, c’est Pascal qui affiche la consommation de mémoire la moins élevée (65.96 Mb). La normalisation des valeurs de ces trois variables (en divisant les valeurs associées à chaque langage par ces valeurs minimales) a permis de dresser le tableau ci-après, les valeurs étant rangées de manière croissante :


    Tableau des valeurs normalisées de l’énergie consommée, du temps d’exécution, et de la mémoire occupée pour chaque langage

    L’on constate que C figure tout de même en troisième place en matière de consommation de mémoire, derrière Pascal et Go. Sur ce point, la différence entre C et Pascal est de l’ordre de 11.21 Mb, c’est-à-dire que le premier est 1.17 fois plus consommateur de mémoire que le second.

    La mise à jour 2020 (voir tableau suivant), quant à elle, considère uniquement dix langages fonctionnels, dont le nouveau venu : Julia, un langage de programmation de haut niveau créé en 2009 et publié au grand public en 2012. Dorénavant, Julia aurait gagné un certain succès auprès de la communauté scientifique en 2018, justifiant alors son intégration dans l’échantillon du benchmark. En fait, Julia vient se placer juste derrière Rust.


    Tableau des valeurs normalisées pour les langages fonctionnels

    Il faut tout de même dire que les rangs présentés dans ce tableau de la mise à jour 2020 n’ont pas beaucoup changé par rapport à ceux de l’étude de 2017. Ainsi, Rust tient toujours la première place du classement dans cette catégorie de langages (fonctionnels). L’on remarque tout simplement la remontée de Lisp en termes de performance énergétique et la descente de Haskell en ce qui concerne la rapidité d’exécution.

    Certes, dans l’étude de 2017, Rust suit de près le langage C avec des différences de l’ordre de 80.77 ms en temps d’exécution et de 1.74 J en énergie consommée (ce qui peut être considéré comme faible comparé aux valeurs associées aux autres langages de programmation en bas de classement). L’on constate ensuite que la nouvelle version de Rust consomme moins d’énergie et s’exécute plus rapidement par rapport à celle qui est prise en compte dans l’étude de 2017.

    Toutefois, les différences ne sont pas encore suffisantes pour dépasser C dans le classement, car le ratio entre l’énergie consommée et le temps d’exécution (l’équivalent de la puissance exprimée en kW) pour Rust reste inchangé (0.039). De plus, ce dernier devient plus vorace dans la consommation de mémoire. En tout cas, la performance de la nouvelle version de Rust ne dépasse pas encore celle de C en valeur absolue (pour les trois variables étudiées).

    En somme, le langage C reste indétrônable, et l’on se demande jusqu’à quand il préservera cette position. Il convient toutefois de noter que cela ne permet pas de conclure qu’il y a une relation fonctionnelle entre les trois variables de l’étude (énergie consommée, temps d’exécution, mémoire consommée).

    Sources : Software Language Engineering (SLE), GitHub (Energy Languages)


    Et vous ?

    Quelle signification ont ces chiffres pour vous ?

    Quelle place accordez-vous à C dans vos pratiques ?


    Voir aussi :

    Programmation : une étude révèle les langages les plus voraces en énergie : Perl, Python et Ruby en tête, C, Rust et C++, les langages les plus verts

    Le langage de programmation Julia gagne de plus en plus en popularité au sein de la communauté scientifique depuis janvier 2018

    Pourquoi le langage C++ demeure incontournable 35 ans après sa sortie ?

    C redevient le langage le plus utilisé devant Java et C++ ?

    Quel avenir pour le langage C ? Un développeur expérimenté fait ses adieux au langage et livre ses inquiétudes quant à son avenir
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #82
    Membre éclairé
    Je suis surpris de la position du JS.

  3. #83
    Membre confirmé
    Quelle signification ont ces chiffres pour vous ?
    J'ai une question bête (vrai question hein, pas juste un sarcasme ou autre), mais les autres langages du tableau, ils sont inspiré de quoi ? Reprennent t-il la logique du C ? Et quid de leurs compilateur / interpréteur ? C'est autre chose que quelque chose qui se réfère au C ?

  4. #84
    Futur Membre du Club
    Le moteur V8 de google compile le Javascript à la volée.
    D'où les perfs pas trop mauvaises.

  5. #85
    Expert éminent sénior
    en tout cas, je suis sacrément impressionné par Rust.
    Sur la programmation système et autres logiciels bas niveau, c'est carrément bluffant.

    Je vais sortir ma boule de cristal et comme plusieurs personnes autour de moi, je prédis un avenir de dingue à ce langage.

    À titre perso, je suis en train de le découvrir. Comme disent les jeunes : c'est d'la balle

  6. #86
    Expert éminent sénior
    Je suis surpris des performances du LISP et d'autres langages fonctionnels. Manifestement, ils sont moins gourmands que je ne croyais. Il faudrait que j'ai le temps de les regarder plus(ça n'est pas près d'arriver )

    Je serais intéressé par la position du vieux COBOL, Quand on se tirait la bourre avec le C++ (pas le C) on gagnait assez souvent. Ca dépendanit surtout du type de CPU et du type de données utilisées, en fait(certains processeurs IBM mainframe sont spécialement optimisés pour le binaire codé décimal, utilisé partout en COBOL).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  7. #87
    Modérateur

    Si C n'évolue pas , Rust va surement prendre plus de place. Il a des performances très proche et l'avantage des langages modernes (gestionnaire de dépendance entre autre). C à en revanche un avantage que les autres n'arriveront probablement jamais a rattraper c'est la quantité astronomique de lib de renom disponible.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #88
    Membre extrêmement actif
    j'entends parler de rust depuis quelques année et je vois que ce langage mérite qu'on s'y intéresse.

    rassuré néanmoins que mon langage préféré (c++) soit dans le top 3

    surpris par la place de python ceci dit.

  9. #89
    Membre confirmé
    Citation Envoyé par Victor Alisson Voir le message
    Quelle signification ont ces chiffres pour vous ?
    #pragma omp parallel for ...
    Quand j'ai vu qu'ils ont utilisé le "Computer Language Benchmarks Game", je me suis demandé s'ils avait bien choisi des exemples qui n'utilisaient pas des extensions externes aux langages ; visiblement non (omp en C / C++ / Fortran).

    Cela n'enlève pas la qualité des optimisations possibles en C (et dans les autres langages), mais ce n'est pas une comparaison purement entre "langages", mais entre [langages + extensions apportées + et forcément qualité de la chaîne de compilation].

  10. #90
    Membre à l'essai
    Il fraudait ajouter le langage V => Lang V

  11. #91
    Membre éprouvé
    Bon je fais du C++ mais avec le framework flutter, Dart mérite qu'on s'y intéresse sauf que Dart est à la fois interprété et compilé. Lequel ils ont pris ?

  12. #92
    Membre éprouvé
    Gains marginaux
    Je laisse de côté les langages interprétés type Perl et Python, et les langages s'exécutant dans une moteur d'exécution type Java. Les langages compilés finissent tous à la fin par du langage machine, exécuté par le processeur. Alors C plus rapide ou moins rapide que Rust ou C++, ça dépend surtout du compilateur et de comment le développeur qui fait les tests optimise son code. Moi qui fait du microcontrôleur, j'ai des piles d'optimisations pour le langage C, par exemple toujours faire des boucles décrémentes qui se terminent à 0 pour gagner 1 instruction à chaque itération : pas besoin de faire de comparaison.
    Après si tu veux convertir un entier 16 bits en une chaîne de 5 chiffres décimaux, tu peux le faire avec du code et des divisions, ou alors en logique cablée et optimisée à la quine mac cluskey, ce qui est beaucoup beaucoup plus rapide en exécution mais demande beaucoup beaucoup plus d'investissement et d'assembleur.

  13. #93
    Expert éminent sénior
    Citation Envoyé par Victor Alisson Voir le message
    Quelle signification ont ces chiffres pour vous?
    Je pense que ces chiffres sont à prendre avec, au mieux, de très grosses pincettes vu qu'ils se basent sur le Benchmark Game : un ensemble de micro-benchmark qui correspondent a des problèmes très précis, soumis par des volontaires. Donc:
    • Les résultats ne sont pas forcément représentatif des performances sur des applications lourdes et/ou avec un longue durée de vie.
    • Même si la plupart des langages commencent a avoir des implémentation plutôt bonnes, rien ne garantit que les soumission aient toutes eu droit à une qualité d'optimisation optimale
    • Le code soumis n'est pas forcément représentatif d'un vrai code, étant donné que dans certains langages, certaines optimisations peuvent être tellement complexes et inconstantes qu'elle ne seraient pas utilisées dans du code idiomatique.


    Par exemple, Rust était bien en dessous du C quand il a été introduit dans le jeu, avant que la communauté ne soumette des programmes plus optimisés.

    Citation Envoyé par Victor Alisson Voir le message
    Quelle place accordez-vous à C dans vos pratiques
    C est un langage incontournable de part son historique dans le domaine du bas niveau, et cela devrait durer encore pour un moment. Cependant, si aujourd'hui je peux avoir le choix, je lui préfèrerai Rust.

    Citation Envoyé par L33tige Voir le message
    Je suis surpris de la position du JS.
    Moi pas vraiment. Il est clairement en dessous de la plupart des langages bas niveau (C/C++/Rust) et statiquement typé (Java/C#/Go), mais bien au dessus des langages sans grosses prétention de performance comme (Perl, Python, Lua, Php,...)
    Tu le voyais plus haut ou plus bas?

    Citation Envoyé par strato35 Voir le message
    J'ai une question bête (vrai question hein, pas juste un sarcasme ou autre), mais les autres langages du tableau, ils sont inspiré de quoi ? Reprennent t-il la logique du C ? Et quid de leurs compilateur / interpréteur ? C'est autre chose que quelque chose qui se réfère au C ?
    C'est difficile a répondre pour tous, le classement contient quand même un certain nombre de langage assez variés. On peut toujours trouver des points communs avec pour la plupart des langages, et des langages peuvent se ressembler sur certains points et s’opposer sur d'autres.

    Globalement on peut dire que les langages du haut du tableau (C,Rust,C++,Ada) sont plutôt des langage a typage statique, un runtime léger (pas de GC) et des capacités bas niveau.

    Citation Envoyé par grunk Voir le message
    C à en revanche un avantage que les autres n'arriveront probablement jamais a rattraper c'est la quantité astronomique de lib de renom disponible.
    Les bibliothèque C sont utilisable assez facilement en Rust.

  14. #94
    Membre du Club
    Cela dit, l'étude ne prend pas en compte la dépense énergétique du développeur.
    Sinon, je trouve cette étude assez pertinente à condition de bien segmenter la comparaison comme l'a suggéré uther.

  15. #95
    Futur Membre du Club
    J'ai été voir la tête des tests, et par exemple, C++ se fait descendre par rapport à C à cause des choix de librairies, majoritairement a cause d'un test sur des RegExp sur lequel C++ produit des résultats terribles (ils produisent des résultats assez similaires sur le reste, normal vu que tout ce que C fait, C++ en est a peu près capable). Sur le tests des RegExp, la librairie boost est utilisé pour C++ et PRCE pour le C, alors même que PRCE est compatible avec C++ !

    Au final, ça ressemble plus a un test des librairies communes qu'un test sur les langages...

  16. #96
    Membre chevronné
    Les gens qui nous vantent de python qui enregistre une forte croissance, doivent vraiment nous trouver les arguments devant cette position de python. Si python continue à devenir le langage de programme le plus utilisé donc prochainement il faut s'assurer que la majorité des programmes vont contribuer à l'échauffement climatique.

  17. #97
    Membre éprouvé
    Citation Envoyé par The Melcx Voir le message
    J'ai été voir la tête des tests, et par exemple, C++ se fait descendre par rapport à C à cause des choix de librairies, majoritairement a cause d'un test sur des RegExp sur lequel C++ produit des résultats terribles (ils produisent des résultats assez similaires sur le reste, normal vu que tout ce que C fait, C++ en est a peu près capable). Sur le tests des RegExp, la librairie boost est utilisé pour C++ et PRCE pour le C, alors même que PRCE est compatible avec C++ !

    Au final, ça ressemble plus a un test des librairies communes qu'un test sur les langages...
    Oui je suis d'accord il y a une vidéo entre la vitesse C vs C++ qui montrait que le C++ était légèrement plus rapide, notamment sur du tri car grâce aux templates le code compilé l'était pour un tableau d'entier et non pas sur un algo QuickSort général qui existe en C (et qui fonctionne en C++ aussi). Globalement on montrait que, ben non le C++ n'est pas plus lent que le C. Donc la valeur donnée ici est très étonnante. Et je suis d'accord qu'ils ont dû comparer des bibliothèques plutôt et non pas le langage.

  18. #98
    Membre extrêmement actif
    Quelle signification ont ces chiffres pour vous ?

    Ces chiffres signifie pour moi, que des personnes ont méchamment fumées la moquettes .

    Ces chiffres comparent la rapidité d’exécution et la consommation d’énergie, chosent qui n'ont absolument rien à voir avec un quelconque langage, mais uniquement leurs implémentations.
    Dire que C est le plus rapide ne veut rien dire, puisque c'est une implémentation donné qui sera plus rapide qu'une autre, pareille pour la conso mémoire, le langage n'as rien à y voir.
    Pour un même langage, il peut y avoir une infinité de choix de conception/optimisation, qui ne donneront forcement pas les mêmes résultats.

    Quelle place accordez-vous à C dans vos pratiques ?

    Personnellement je suis pas trop S&M dans mes pratiques .
    Le C c'est le JS du développement système / applicatif, on ne l'utilise en générale qu'avec parcimonie et bien souvent contraint et forcé.
    Ce langage est un héritage du passé et fait partie de la dette technique de tous développeurs.

    Le C c'est :
    - une norme international mais payante
    - une ABI fixe (sur un même système, c'est bien souvent le seule chainons commun pour ce parler)
    - un Runtime léger et simple
    - un Assembleur universelle

    Le C ce n'est pas :
    - un langage sûr (bien trop de comportements non définit)
    - un langage pratique
    - un tooling agréable (hérité des années 70)
    - un "bon langage" applicatif

    Malheureusement, il n'y a pas encore et pour le moment d'alternatives viables.
    Rust dépend encore de la glibc en standard, même si la team RedoxOS a réimplémenter une libc en pure Rust, ça craint un "remplaçant" qui dépend du "remplacé" .
    Les vrai remplaçants seraient plutôt à chercher du côté de C2, Zig, Jai (?), ...etc qui se veulent de vrais substitues modernisés à tous points de vue.

  19. #99
    Membre éprouvé
    Les développeurs python doivent apprendre à coder avec un langage plus écologique, si ils ne veulent pas s’attirer les foudres de Greta Thunberg !!
    Ne pas savoir n’est pas une faute si l’on cherche à combler ses lacunes.

    "Il n'y a pas d'obstacles infranchissables , il y a des volontés plus ou moins énergiques voilà tous" Jules Vernes

  20. #100
    Membre éprouvé
    Utilisation des Regex
    Il me revient un exemple en tête. Je devais faire une recherche dans des logs. Je le fais en python + regex, c'est le plus facile pour moi. Mébon, 100 lignes à la seconde, ce n'était pas jouable. Je ré-écris le truc en C avec une lib regex, bah pas mieux.
    Finalement, j'ai utilisé strstr et strncpy et j'ai multiplié la performance par 100. Comme quoi, ce n'est pas tellement le langage, mais plutôt le bon usage de la bonne librairie...

###raw>template_hook.ano_emploi###