Mais y a-t-il des limitations techniques ou des fonctionnalités de langage qui empêchent mon script Python d'être aussi rapide qu'un programme C ++ équivalent?
Non. C'est juste une question d'argent et de ressources consacrées à faire fonctionner C ++ rapidement par rapport à l'argent et aux ressources investies pour faire fonctionner Python rapidement.
Par exemple, lorsque le Self VM est sorti, ce n'était pas seulement le langage OO dynamique le plus rapide, c'était la période de langage OO la plus rapide. Bien qu'il s'agisse d'un langage incroyablement dynamique (beaucoup plus que Python, Ruby, PHP ou JavaScript, par exemple), il était plus rapide que la plupart des implémentations C ++ disponibles.
Mais Sun a annulé le projet Self (un langage OO à usage général mature pour développer de grands systèmes) pour se concentrer sur un petit langage de script pour les menus animés dans les décodeurs TV (vous en avez peut-être entendu parler, il s'appelle Java), il n'y avait pas plus de financement. Parallèlement, Intel, IBM, Microsoft, Sun, Metrowerks, HP et al. dépensé de grandes quantités d'argent et de ressources pour accélérer le C ++. Les fabricants de CPU ont ajouté des fonctionnalités à leurs puces pour rendre C ++ rapide. Les systèmes d'exploitation ont été écrits ou modifiés pour rendre C ++ rapide. Donc, C ++ est rapide.
Je ne connais pas très bien Python, je suis plus une personne Ruby, donc je vais donner un exemple de Ruby: la Hash
classe (équivalente en fonction et en importance dict
en Python) dans l'implémentation Rubinius Ruby est écrite en Ruby 100% pur; Pourtant, il rivalise favorablement et parfois même surpasse la Hash
classe dans YARV qui est écrit en C. optimisé à la main. Et comparé à certains des systèmes commerciaux Lisp ou Smalltalk (ou à la Self VM susmentionnée), le compilateur de Rubinius n'est même pas si intelligent .
Il n'y a rien d'inhérent à Python qui le rend lent. Il y a des fonctionnalités dans les processeurs et les systèmes d'exploitation d'aujourd'hui qui nuisent à Python (par exemple, la mémoire virtuelle est connue pour être terrible pour les performances de récupération de place). Il existe des fonctionnalités qui aident C ++ mais n'aident pas Python (les processeurs modernes essaient d'éviter les échecs de cache, car ils sont si chers. Malheureusement, éviter les échecs de cache est difficile lorsque vous avez OO et le polymorphisme. Vous devriez plutôt réduire le coût du cache Le processeur Azul Vega, conçu pour Java, le fait.)
Si vous dépensez autant d'argent, de recherches et de ressources pour rendre Python rapide, comme cela a été fait pour C ++, et que vous dépensez autant d'argent, de recherches et de ressources pour créer des systèmes d'exploitation qui permettent aux programmes Python de s'exécuter rapidement comme cela a été fait pour C ++ et vous dépensez autant beaucoup d'argent, de recherche et de ressources pour faire des processeurs qui font que les programmes Python s'exécutent rapidement comme cela a été fait pour C ++, alors il ne fait aucun doute dans mon esprit que Python pourrait atteindre des performances comparables à C ++.
Nous avons vu avec ECMAScript ce qui peut arriver si un seul joueur prend au sérieux les performances. En un an, nous avons pratiquement augmenté de 10 fois les performances de tous les principaux fournisseurs.