Pourquoi Python n'en a-t-il pas?
Je ne sais pas pourquoi vous pensez qu'il n'y a pas d'implémentations Python qui se soucient des performances. PyPy , IronPython et Jython sont tous des implémentations Python de qualité industrielle, prêtes pour la production et soucieuses des performances. Pyston est une implémentation en cours de développement qui a été spécialement créée pour les performances. Unladen Swallow et Psyco étaient également des projets pour améliorer les performances de Python.
Cependant, le fait que les utilisateurs de CPython soient beaucoup plus nombreux que la base d'utilisateurs combinée totale de toutes les autres implémentations, que Unladen Swallow a été rejetée par la communauté, que la plupart de ces projets sont morts ou ont du mal à attirer les développeurs devrait vous dire quelque chose sur la façon dont Python la communauté valorise la performance.
Cette réponse est un bon exemple de la mentalité typique de la communauté Python: au lieu de résoudre les problèmes de performances, ils préfèrent simplement écrire leur code pas en Python.
J'ai regardé PyPy et IronPython, qui revendiquent tous deux des gains de vitesse. PyPy Je ne comprends pas comment une implémentation Python écrite en Python, un langage interprété, sera plus rapide que l'implémentation de référence en C.
Tout d'abord: peu importe la langue dans laquelle le compilateur est écrit. Après tout, le compilateur n'est exécuté qu'une seule fois , donc même s'il était lent, cela n'a pas d'importance: les performances du compilateur ne sont pas pertinentes, ce qui est pertinent est la performance de la sortie du compilateur.
En second lieu , car il importe que la rapidité de la sortie du compilateur est, et le compilateur est écrit en Python, à savoir la langue qu'il compile, il peut réellement faire lui - même rapidement par lui - même la compilation.
Troisièmement, il n’existe pas de «langage interprété». Une langue est un ensemble de règles et de restrictions mathématiques. C'est une spécification. Une feuille de papier. Une langue n'est ni compilée ni interprétée. Une langue est juste . La compilation et l'interprétation sont des traits d'une implémentation d'un langage , plus précisément, un compilateur ou un interprète (duh!), Pas le langage. Chaque langue peut être implémentée par un compilateur. Chaque langue peut être implémentée par un interprète. Vous pouvez générer mécaniquement un compilateur à partir d'un interpréteur et un interprète à partir d'un compilateur.
Mais tout cela n'a pas vraiment d'importance, car PyPy n'est pas écrit en Python. Il est écrit en RPython . RPython se compose de deux parties, le langage de programmation RPython et le cadre RPython.
Le langage de programmation RPython n'est pas Python. Il s'agit d'un langage de programmation différent. RPython est un langage de programmation de type statique, à peu près au même niveau sur l'abstraction que Java, avec à peu près les mêmes performances que C. RPython est un sous-ensemble syntaxique et sémantique de Python, ce qui signifie que chaque programme RPython est un programme Python valide et peut être exécuté par une implémentation Python (bien que généralement plusieurs ordres de grandeur plus lents, mais cela est toujours utile pour le débogage car vous avez accès à tous les outils de Python, et l'interprétation commence immédiatement, tandis que la compilation de l'implémentation du langage prend généralement environ 5 à 10 minutes ), mais l'inverse n'est pas vrai.
Le framework RPython est un framework pour écrire des implémentations de langage dynamique hautes performances dans le langage de programmation RPython. Il comprend un garbage collector, un espace objet, un protocole de méta-objet, des objets prédéfinis, des types et des opérations, etc. Mais le joyau de la couronne est sa capacité à générer automatiquement un compilateur JIT à partir d'un interpréteur: si vous implémentez un langage dans le framework RPython, vous n'avez qu'à écrire un interpréteur, le framework RPython s'occupe du JIT.
Il existe de nombreuses implémentations de langage sur la plate-forme RPython , pas seulement PyPy.
IronPython, même idée mais je ne vois pas comment le .NET Framework augmentera la vitesse.
La plupart des implémentations de l'ISO CLI, telles que les différentes variantes .NET de Microsoft ou Mono, contiennent des récupérateurs de place, des optimiseurs et des compilateurs sophistiqués. Il en va de même pour les implémentations Jython et Java.
IronPython est un compilateur, il compile le code source Python en arborescences DLR (DLR est le Dynamic Language Runtime), qui sont ensuite compilés en code octet CIL, qui est ensuite à nouveau généralement compilé en code machine natif.