IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Actualités Discussion :

Comparaison des performances des langages Go, C++, C, AWK, Forth et Rust

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mai 2019
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2019
    Messages : 1 850
    Points : 36 366
    Points
    36 366
    Par défaut Comparaison des performances des langages Go, C++, C, AWK, Forth et Rust
    Les langages Python et AWK sont juste recommandables pour leur rapidité, Go et Rust pour leur rapidité et leur fiabilité, Go et Rust sont recommandable désirent avoir des solutions rapides et fiables,
    selon Ben Hoyt, Ingénieur logiciel chez Canonical

    Ben Hoyt, Ingénieur logiciel chez Canonical, a publié sur son blog les résultats d’une expérience qu’il a menée dans le but d’évaluer certains langages de programmation. L’ingénieur logiciel qui a précédemment occupé des postes de responsabilité dans le secteur du génie logiciel a sur un cas d’école comparer les performances des langages Python, Go, C++, C, AWK, Forth et Rust. Grâce à un programme qui compte les fréquences des mots à partir de l'entrée standard, puis les affiche avec leurs fréquences, en commençant par les plus fréquents, Ben Hoyt est arrivé à la conclusion suivante : si vous avez juste besoin d'une solution rapide (ce qui est probable), Python et AWK sont recommandables, alors que Go et Rust sont recommandables pour les développeurs qui désirent avoir des solutions rapides et fiables.

    Pour Ben Hoyt, écrire un programme ou un algorithme qui compte les fréquences des mots à partir de l'entrée standard, puis les affiche avec leur fréquence, en commençant par les plus fréquents est une bonne question pour un candidat à un poste de programmeur lors d’un entretien d’embauche. Pour lui, contrairement aux questions sur les arbres binaires par exemple, un aspirant au poste de programmeur pourrait être appelé à écrire des scripts de ce type dans la vie réelle et cela permettra d’évaluer sa compréhension des notions d’entrée/sortie de fichiers, des tables de hachage, et l’utilisation de la fonction de tri.

    Nom : dev1B.png
Affichages : 14812
Taille : 127,9 Ko

    « Une fois que le candidat a une solution de base, vous pouvez l’orienter dans toutes sortes de directions : qu'en est-il des majuscules ? De la ponctuation ? Comment ordonne-t-il deux mots ayant la même fréquence ? Quel est le goulot d'étranglement en termes de performances ? Comment se comporte-t-il en termes de big-O ? Quelle est l'utilisation de la mémoire ? En gros, combien de temps votre programme prendrait-il pour traiter un fichier de 1 Go ? Votre solution fonctionnerait-elle encore pour 1 To ? etc. Vous pouvez aussi vous orienter vers le "génie logiciel" et parler de la gestion des erreurs, de la testabilité, de la transformation en un utilitaire de ligne de commande renforcé », a déclaré Ben Hoyt.

    Une solution de base lit le fichier ligne par ligne, le convertit en minuscules, divise chaque ligne en mots et compte les fréquences dans une table de hachage. Une fois cette opération terminée, elle convertit la table de hachage en une liste de paires mot/compte, effectue un tri par compte (le plus grand en premier) et affiche. Pour la petite histoire, raconté par Ben, en 1986, Jon Bentley a demandé à Donald Knuth d'apporter une solution à ce problème, et il a produit un chef-d'œuvre Knuthien exquis de dix pages. Doug McIlroy (l'inventeur des pipelines Unix) lui a répondu par une version en une ligne du shell Unix utilisant tr, sort et uniq.

    « Je décris un problème d'interview simple (compter les fréquences de mots uniques), je le résous dans différents langages, et je compare les performances entre elles. Pour chaque langage, j'ai inclus une solution simple et idiomatique ainsi qu'une approche plus optimisée via le profilage », a indiqué Ben Hoyt sur son blog.

    Énoncé du problème et contraintes

    Écrire en langage Python, Go, C++, C, AWK, Forth et Rust un programme qui compte les fréquences des mots. Chaque programme doit lire l'entrée standard et imprimer les fréquences de mots uniques, séparés par des espaces, dans l'ordre des plus fréquents au moins fréquent. Par exemple, avec cette entrée :

    The foo the foo the
    defenestration the


    Le programme doit afficher ce qui suit :

    the 4
    foo 2
    defenestration 1


    Pour avoir des solutions simples et cohérentes, voici, ci-dessous, la liste de contraintes à prendre en compte :

    • threading : il doit s'exécuter dans un seul thread sur une seule machine ;
    • mots : tout ce qui est séparé par un espace, la ponctuation étant ignorée ;
    • Stdlib : utiliser uniquement les fonctions de la bibliothèque standard du langage ;
    • hachage : ne pas rouler notre propre table de hachage (à l'exception de la version C optimisée) ;
    • ordre : si la fréquence de deux mots est la même, leur ordre dans le résultat n'a pas d'importance ;
    • ASCII : il n'y a pas de problème à ne supporter que l'ASCII pour la gestion des espaces et des minuscules ;
    • fiable : même pour les variantes optimisées, ne pas utiliser des fonctionnalités de langage non fiables, et ne pas descendre en assembleur ;
    • la casse : le programme doit normaliser les mots en minuscules, donc "The the THE" doit apparaître comme "the 3" dans la sortie ;
    • texte : suppose que le fichier d'entrée est du texte dans une langue réelle et non un texte plein de mots uniques et aléatoires, avec des lignes de longueur "raisonnable". Plus courtes que la taille du tampon ;
    • mémoire : la mise en mémoire tampon ligne par ligne est acceptable, ou par morceaux avec une taille maximale de 64 KB. Ceci dit, il n'y a pas de problème à garder l'ensemble de la carte du nombre de mots en mémoire.

    Le fichier d'entrée utilisé par Ben est un extrait de texte de King James Bible, concaténé dix fois. Les guillemets intelligents ont été remplacés par le caractère guillemet ASCII et l’utilitaire cat a été utilisé pour le multiplier par dix afin d'obtenir le fichier d'entrée de référence de 43 Mo.

    Résultats des performances et enseignements

    Ben a indiqué avoir exécuté chaque test cinq fois et a pris à chaque fois le temps minimum comme résultat. Les résultats présentés sur l’image ci-dessous prennent en compte la contribution apportée par les lecteurs. Les temps d’exécution sont en secondes, donc plus ils sont bas, mieux c'est, et la liste est ordonnée par le temps d'exécution de la version simple, la plus rapide en premier.

    Nom : Result.PNG
Affichages : 4505
Taille : 35,4 Ko

    Au terme de l’expérience, Ben Hoyt est arrivé à la conclusion selon laquelle, les langages Python et AWK sont juste recommandables pour leur rapidité, Go et Rust sont recommandable pour les développeurs qui désirent avoir des solutions rapides et fiables. Cependant, en mars de l’année dernière, une étude réalisée par des chercheurs portugais a révélé que le langage 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).

    Source : BEN HOYT

    Et vous ?

    Que pensez-vous des conclusions de Ben Hoyt ? Pertinentes ou pas ?

    Quel langage de programmation appréciez-vous ? Pourquoi ?

    Si vous deviez changer pour un autre langage, lequel utiliseriez-vous ? Pourquoi ?

    Que pensez-vous de l'exercice proposé par Ben Hoyt pour un entretien d'embauche ?

    Quel est votre avis sur les performances des différents langages de programmation évalués ?

    Voir aussi :

    Recrutement IT : il crée un faux langage de programmation afin d'éliminer les candidats qui mentent sur leur CV, et cela a bien fonctionné

    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 populaires

    Quels sont les meilleurs langages de programmation pour développer une application mobile ? Petit tour d'horizon sur les plus populaires

    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 populaires
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ce que je vois surtout c'est que Python et AWK sont plutôt en bas de la liste en mode "normal". Combien de développeur prennent le temps de passer leur code au profiler quand il n'ya pas de réel problème ?

    Comparer les performance sur un cas particulier (gestion de chaine) et déclarer que X ou Y est le meilleur me semble bien réducteur.
    Et puis classer des langages avec des contraintes particulières qui pourraient potentiellement en pénaliser certains , c'est pas forcément très juste.

    Bref encore un expert/fanboy qui veux vendre son langage de prédilection à toutes les sauces quand le meilleur langage est en fait celui qui répond le mieux aux problématique du projet.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2007
    Messages : 884
    Points : 2 018
    Points
    2 018
    Par défaut
    Il y a 2 choses qui m'étonnent :
    1) La performance de Rust assez loin derrière C. Est-il aussi optimisé?
    2) La performance de Zig, je ne connaissais pas ce langages et il semble le plus performant sans optimisation. Il vaut le coup de s'y intéressé.
    Tout ce que j'écris est libre de droits (Licence CC0) et je vous incite à faire de même.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2007
    Messages : 884
    Points : 2 018
    Points
    2 018
    Par défaut
    Citation Envoyé par grunk Voir le message
    Bref encore un expert/fanboy qui veux vendre son langage de prédilection à toutes les sauces quand le meilleur langage est en fait celui qui répond le mieux aux problématique du projet.
    Non, non et non. Tu n'a pas lu l'article original en entier. C'est juste quelqu'un qui juge ce test intéressant. Il ne dit clairement pas que c'est l'alpha et l’oméga. En plus de ça, non, un langage n'est pas bon pour répondre a une problématique. Dans ce cas il te faudrait apprendre 200 langages. Tous ne se valent pas. Il est évident qu'ils n'ont pas tous les même but et un seul langage ne suffit pas. Il en faut un pour le dev rapide de prototype et un pour l'optimisation. On en rajoute quelques un pour des besoins spécifique (Bash, SQL ou VHDL) mais dans ce cas, ils n'ont pas vraiment de concurrents et puis c'est tout. Ce qui est vrai c'est que parfois certains sont plus utilisés dans un cadre spécifique, mais c'est réducteur. PHP peut faire des scripts, et Python du web de manière aussi efficace.
    Tout ce que j'écris est libre de droits (Licence CC0) et je vous incite à faire de même.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2021
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2021
    Messages : 54
    Points : 0
    Points
    0
    Par défaut
    Python a un énorme avantage sur tous les autres langages: Il n'a pas besoin de profiler. Peut importe l'implémentation, ça sera toujours lent !

  6. #6
    Membre émérite
    Profil pro
    retraité
    Inscrit en
    Décembre 2010
    Messages
    806
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 806
    Points : 2 310
    Points
    2 310
    Par défaut
    Ce qui vaut le coup est de regarder l’algorithme, car Grep est fait en C et explose le programme fait en C. Étonnant :-)

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 92
    Points : 441
    Points
    441
    Par défaut
    Pourquoi interdire l'utilisation du multithreading si le support est dans la librairie standard du langage?
    C'est pourtant ce qu'il va y avoir de plus important dans l'avenir sachant que l'évolution des processeurs est aujourd'hui tourné vers l'augmentation du nombre de coeur et non plus de la fréquence.

  8. #8
    Membre expert
    Profil pro
    programmeur du dimanche
    Inscrit en
    Novembre 2003
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 783
    Points : 3 372
    Points
    3 372
    Par défaut
    Citation Envoyé par MetalFlower Voir le message
    Python a un énorme avantage sur tous les autres langages: Il n'a pas besoin de profiler. Peut importe l'implémentation, ça sera toujours lent !
    C'est assez vrai, mais il y a plusieurs remarques :

    • le code python est assez lisible et assez concis (contrairement à d'autres), donc moins d'erreurs et plus rapide à rédiger.
    • la version optimisée de python ne demande pas un niveau de compétence fou (ajout d'un buffer de lecture) alors que dans d'autres langages ils passent par une table de hash optimisée
    • Si on veut que ça aille encore plus vite en python, on peut utiliser une compilation en cython juste en ajoutant le typage.
    • l'exercice de style ne correspond pas forcément à la vraie vie où l'on voudrait le support natif unicode, ce qui est offert d'emblée en python alors que la version c utilise des pointeurs de char ce qui rendrait son portage assez pénible. Une meilleure approche serait d'autoriser l'approche multi-thread : un langage où ce serait nativement simple aurait un gros avantage.


    Je trouve que nim, malgré son code très simple et sûr ( https://github.com/benhoyt/countwords/pull/20 ) est aussi une bonne surprise car l'implémentation naïve est plutôt rapide.

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par Fagus Voir le message
    le code python est assez lisible et assez concis (contrairement à d'autres), donc moins d'erreurs et plus rapide à rédiger.
    Ca c'est très subjectif. Au contraire je trouve que l'utilisation des tabulations comme scope est un enfer à debugger et on à vite fait de faire une boulette difficile à trouver; là ou de simples accolades ne créer pas de problème. Après la syntaxe générale me plait pas, mais c'est surement parce que je suis plus habitué aux langages avec une syntaxe C
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre expert
    Profil pro
    programmeur du dimanche
    Inscrit en
    Novembre 2003
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 783
    Points : 3 372
    Points
    3 372
    Par défaut
    Citation Envoyé par grunk Voir le message
    Ca c'est très subjectif. Au contraire je trouve que l'utilisation des tabulations comme scope est un enfer à debugger et on à vite fait de faire une boulette difficile à trouver; là ou de simples accolades ne créer pas de problème. Après la syntaxe générale me plait pas, mais c'est surement parce que je suis plus habitué aux langages avec une syntaxe C
    Salut,
    Je voulais dire que j'ai survolé les sources en compétition sur https://benhoyt.com/writings/count-words/ et mon commentaire s'appliquait à ces sources en particulier.
    Le code python fait 10 lignes avec les importations. Les autres langages en l’occurrence sont pour beaucoup assez verbeux.

    Pour le goût de la syntaxe, ayant débuté à la mauvaise époque du c/c++, j'ai aussi eu du mal à passer aux 4 espaces, mais j'ai tellement réinventé l'eau tiède et débogué des pointeurs fous, que pour l'amateur que je suis, un langage de très haut niveau vaut le coup pour mon usage. Même si le c est mon langage de coeur pour sa beauté (vénéneuse), je ne vois plus trop l'utiliser en pratique sauf pour de l'embarqué (j'aimais bien les programmes en GUI sous palm en c pur pesant quelques Ko seulement versus les monstres qu'on télécharge sous android) ou si j'avais un problème calculatoire.
    Je suis d'accord pour les problèmes de scope de python qui ne sont pas intuitifs quand on vient du c, mais on s'y fait et avec un analyseur de syntaxe en temps réel on évite une bonne partie des boulettes.


  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur backend python
    Inscrit en
    Mars 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur backend python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2021
    Messages : 1
    Points : 9
    Points
    9
    Par défaut
    Selon l'article :

    Au terme de l’expérience, Ben Hoyt est arrivé à la conclusion selon laquelle, les langages Python et AWK sont à recommander pour leur rapidité, Go et Rust sont recommandable pour les développeurs qui désirent avoir des solutions rapides et fiables.
    Cette traduction est un peu ambigüe, cette phrase laisse penser que le python est à préconiser parce qu'il serait performant, ce qui à mon avis n'est pas le cas.
    Dans l'article original il est plus exactement dit :

    If you want a fast version in a safe language, I’d recommend Go or Rust.

    If you just need a quick solution (which is likely), Python and AWK are amazing for this kind of text processing.
    A mon avis quand l'auteur parle de "quick solution", c'est plus en terme de rapidité de développement que de performance du langage.

Discussions similaires

  1. Critères de comparaison des langages de programmation
    Par vadorequest dans le forum Création de jeux vidéo
    Réponses: 10
    Dernier message: 02/05/2015, 21h16
  2. Etude sur la comparaison des langages
    Par Jackernel dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 11/06/2014, 09h00
  3. Comparaison des performances des algorithmes de tri
    Par biba13 dans le forum Pascal
    Réponses: 2
    Dernier message: 09/05/2007, 20h28
  4. Performances des langages
    Par Lunixinclar dans le forum Langages de programmation
    Réponses: 35
    Dernier message: 29/09/2006, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo