"C'était le soir, il n'y avait rien à faire" ou une petite histoire sur la comparaison des performances des langages de programmation

Le truc de "banc" c'est... Après plusieurs jours d'inactivité, le sevrage commence, j'ai envie de m'occuper de quelque chose. Parfois j'étais distrait par des projets chouchous, parfois par la lecture de littérature... Maintenant je vais vous raconter ce qui s'est passé lors du dernier "mode veille".





Pendant de nombreuses années, je me suis inquiété des performances du langage de programmation (principalement intéressé par PHP ). La liste ci-dessous contenait certaines de mes convictions, jusqu'à récemment :





  • PHP est l'un des langages de programmation les plus lents





  • Python est plus rapide que PHP





  • Ruby est plus rapide que PHP





  • C/C++ est beaucoup plus rapide que Python et PHP combinés





  • L'assembleur est un ordre de grandeur plus rapide que C/C++





La première étape consistait à décider quel test prendre comme base. Essayons d'écrire un programme pour trouver des nombres premiers (je suis conscient qu'il existe de nombreux algorithmes pour trouver des nombres premiers, un bon article sur ce sujet).





Le code suivant a été pris comme base (énumération primitive, qui ne s'arrête même pas s'il sait déjà que le nombre n'est pas premier) :






<?php

$primeNumberCount = isset($argv[1]) ? $argv[1] : 100;

$number = 0;
while ($primeNumberCount > 0) {
    $number++;
    $j = 0;

    for ($i = 1; $i <= $number; $i++) {
        if ($number % $i === 0) {
            $j++;
        }
    }

    if ($j === 2) {
        $primeNumberCount--;
    }
}

echo 'The latest prime number: ' . $number . PHP_EOL;
      
      



Et puis tout est comme un brouillard : Python, C/C++, Pascal, Go, etc. Toutes les sources peuvent être consultées ici . J'ai fait tous les tests dans docker pour ne pas encrasser l'ordinateur.





, . Assembler , - . , Assembler/NASM , .





:





, :





  • PHP Python Ruby





  • PHP





  • Python 3 Python 2





  • /C++ Assembler/NASM 15%





  • Rust





  • très surpris par le résultat du test Node.js / Javascript (les développeurs V8 sont beaux)





  • etc





Pour le moment, je prévois d'ajouter progressivement de nouveaux tests (lorsque le temps et l'humeur le permettront).





Le but de cet article n'est pas de montrer quel langage de programmation est le plus rapide, mais qu'on peut se tromper dans nos croyances, et qu'il ne faut pas croire toutes les histoires dans le fumoir (beaucoup de mes délires viennent de là, quelqu'un quelque part entendu que X est plus rapide que Y).





PS: les sources peuvent être trouvées ici





PPS. Ajout de Ruby 3 , quelque chose n'a pas beaucoup aidé ...





PPPS. Modification de la méthode de calcul du temps d'exécution, augmentation du nombre ordinal d'un nombre premier (de 5000 à 7000).








All Articles