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).