Je me suis récemment plongé dans la programmation fonctionnelle, en particulier Haskell et F #, plus avant. Après quelques recherches sur Google, je n'ai pas pu trouver de comparaison de référence des langages fonctionnels les plus importants (Scala, F # etc.).
Je sais que ce n'est pas nécessairement juste pour certaines langues (Scala me vient à l'esprit) étant donné que ce sont des hybrides, mais je veux juste savoir qui surpasse qui sur quelles opérations et dans l'ensemble.
CPython
vsPyPy
vient rapidement à l'esprit.Réponses:
Selon le Great Benchmarks Game , ATS est plus rapide que les autres avec Haskell, Scala et l'une des variantes de Common Lisp à égalité de vitesse juste derrière. Après cela, Ocaml et F # sont à peu près dans la même catégorie de vitesse avec Racket et Clojure à la traîne ...
Cependant, presque rien de tout cela ne signifie rien du tout. Tout est une question de problème, de machine, de compilateur, de techniques de codage et, dans certains cas, de chance. D'une manière générale, les langages codés automatiquement comme Haskell surclasseront les langages compilés par VM comme F # et surclasseront largement les langages purement interprétés. De manière générale, les langages de type statique sont plus rapides que les types de type dynamique en raison d'une analyse statique permettant de calculer toutes les opérations de type à la compilation plutôt qu'à l'exécution. Encore une fois, ce sont des règles générales, il y aura toujours des exceptions. Les "paradigmes" n'ont pas grand-chose à voir avec cela.
la source
Il convient également de noter que vous ne pouvez pas mesurer / quantifier les performances d'un langage de programmation . Le mieux que vous puissiez faire est de mesurer les performances d'une implémentation spécifique du langage sur des plateformes spécifiques, en exécutant des programmes spécifiques.
Donc, lorsque vous demandez «le langage fonctionnel le plus rapide», ce que vous demandez vraiment sur le meilleur des implémentations actuelles du ou des langages.
Le commentaire de @ igouy soulève le fait qu'il existe d' autres mesures de performance pour la mise en œuvre du langage; par exemple le temps de compilation. Mais cela ne change pas le fait que le temps d'exécution du programme d'application est une mesure (indirecte) de l'implémentation d'un langage, pas une mesure du langage lui-même.
Prenons l'exemple de Java. Supposons que j'écrive un benchmark à thread unique en utilisant uniquement les fonctionnalités de langage de Java classique (Java 1.0). Si je compile et exécute en utilisant JDK 1.0, j'obtiendrai de mauvaises performances ('cos JDK 1.0 n'avait pas de compilateur de code natif). Si je passe de JDK 1.1 à ... JDK 1.7, j'obtiendrai probablement de meilleurs résultats progressivement. Mais cela n'est pas dû à des modifications du langage Java ... car mon benchmark utilise le même sous-ensemble de langage. Au contraire, l'accélération est due à des améliorations dans les compilateurs, le système d'exécution et / ou l'implémentation de bibliothèques de classes. Ce sont tous des problèmes de mise en œuvre .
L'autre point est que ces différences d'implémentation peuvent être vraiment importantes (par exemple des ordres de grandeur) pour le même langage. Ainsi, le fait que la meilleure implémentation de la langue X soit plus rapide que la meilleure (ou la seule) implémentation de la langue Y ne vous dit pas nécessairement grand-chose sur la langue elle-même.
la source
Si vous regardez les langues uniquement sur la vitesse d'exécution, vous manquez quelques points majeurs. La vitesse est une bonne chose, mais ce n'est pas la seule chose.
Haskell utilise un système de type très robuste pour créer des programmes qui seront beaucoup plus susceptibles d'être exempts de bogues et robustes.
Erlang utilise son système de surveillance intégré pour vous permettre de créer des systèmes de pannes qui peuvent vous donner un niveau de fiabilité énorme face à différents types de pannes. De plus, Erlang peut vous offrir un niveau de concurrence difficile à égaler dans d'autres langues.
En vérité, je considérerais la vitesse d'exécution dans les temps modernes comme étant assez loin sur la liste de ce que je considérerais dans la plupart des cas. (OK si je faisais un calcul numérique massif, je voudrais probablement utiliser fortran pour la vitesse mais sinon ce n'est tout simplement pas assez important pour avoir de l'importance)
la source