Pour quels types d'applications Python est-il un mauvais choix? [fermé]

21

Je viens de commencer à apprendre Python et j'aimerais obtenir un peu plus de contexte sur le langage.

Je me rends compte que, dans de nombreux cas, Python est un langage lent par rapport à C ou C ++. Ainsi, Python n'est probablement pas le meilleur choix pour les applications qui doivent s'exécuter aussi rapidement que possible.

En dehors de cela, il semble que Python soit un excellent langage généraliste facile à lire et à écrire. Les bibliothèques disponibles lui donnent une énorme quantité de fonctionnalités. En dehors des applications critiques pour les performances, où est-ce un mauvais choix d'utiliser Python (et pourquoi)?

Casey Patton
la source
8
Il n'y a rien de tel qu'un grand langage à usage général. Tous les cinq ans environ, un nouveau remplace l'ancien qui ne survit que sur des marchés de niche. Lisp, Fortran, Pascal, Basic, Ada, Perl ...
mouviciel
3
@mouviciel: Pascal une langue de niche? Ok, son nom a été changé pour Delphi pour correspondre à l'IDE Borland / CodeGear / Embarcadero, mais Delphi est toujours (basé sur) Pascal et bien qu'il ait perdu des parts de marché, je ne l'appellerais pas exactement un langage de niche. Et ni Basic d'ailleurs. Visual Basic est toujours Basic. Delphi et Visual Basic sont utilisés dans de nombreuses entreprises ...
Marjan Venema
7
"Python est un langage lent par rapport à C ou C ++". Vous devez sauvegarder cela avec le benchmark spécifique que vous avez utilisé. Dans certains cas (programmes liés aux E / S qui font beaucoup d'appels système) Python est aussi rapide que C car il s'agit simplement d'un wrapper autour de la bibliothèque C.
S.Lott
@ S.Lott True, et PyPy peuvent parfois rivaliser avec la JVM ou même C / C ++
yati sagade
Pascal était la langue d'enseignement de choix lorsque j'étais à l'université. Puis quelques décennies ont passé et maintenant il lui semble que Java. Je code plusieurs langues professionnellement (une demi-douzaine environ), mais je code toujours Delphi pour le plaisir.
Mawg dit réintégrer Monica le

Réponses:

22

Logiciel destiné aux cibles intégrées avec leurs ressources limitées. La plupart des processeurs de cette planète ne peuvent pas exécuter Python en raison de ressources insuffisantes, ou personne n'a porté de version sur cette architecture. La plupart des processeurs, même maintenant, sont livrés avec moins d'un mégaoctet de mémoire.

uɐɪ
la source
… Jusqu'à ce que quelqu'un crée un port Python d'Arduino. Oh, attendez!
Spoike
5
@Spoike ce lien sert à exécuter python sur l'ordinateur et à ne communiquer en série qu'avec Arduino. Arduino
n'exécute
1
@BasaratAli: Disclaimer - J'ai écrit mon commentaire en plaisantant. ;-)
Spoike
14

Les deux endroits qui me viennent à l'esprit sont des choses qui nécessitent beaucoup de simultanéité, pour lesquelles j'utiliserais Erlang. Ou un calcul numérique robuste, que j'essaierais probablement d'utiliser Fortran.

Zachary K
la source
1
Fortran est-il toujours en avance sur C / C ++ dans le calcul numérique? ...
Sardathrion - Réinstalle Monica
1
Tu sais que je ne sais pas. Ce n'est pas un domaine que j'ai beaucoup d'expérience. Mais je sais que les gens de fortran ont passé plus de 30 ans à faire fonctionner leurs outils très rapidement.
Zachary K
@Sardathrion - C'est difficile à dire. Seulement naturel, vous comprenez. Mais, il y a quelques mois, M. Lionel d'Intel Fortran renommée a déclaré que leur ligne fortran surpassait tous les autres produits de leur ligne de développement (qui n'est pas si étroite).
Rook
@Idigas: En effet, je sais que Fortran est largement utilisé mais cela pourrait être dû au code hérité et non aux contraintes d'optimisation. Peut-être que je devrais poser ça comme une question ...
Sardathrion - Réintégrer Monica
Rappelez-vous également que beaucoup de gens qui font du calcul numérique connaissent très bien Fortran et c'est leur outil de choix. Donc, quand ils doivent faire ce genre de tâche, ils vont atteindre Fortran.
Zachary K
8

Étant donné que Python est un langage à typage dynamique, sans vérification à la compilation, la refactorisation d'un grand projet Python qui n'a pas de tests unitaires étendus sera difficile.

Donc, si vous avez un grand projet qui doit être maintenu et modifié pendant une longue période, et que votre équipe ne s'engage pas à créer des tests automatisés pour tout, alors vous feriez mieux d'utiliser Java ou C #.

Eric Wilson
la source
17
La refactorisation de tout grand projet sans tests unitaires est très difficile.
Sardathrion
9
Certes, mais beaucoup plus difficile sans sécurité de type.
Eric Wilson
3
@Eric Wilson - Même alors, une frappe forte peut vous donner un faux sentiment de sécurité ... Il compile, expédiez-le!
Mark Booth
2
Ce n'est peut-être pas à 100% sur le sujet de la question mais reste un point valable. La prise en charge des outils, en particulier la refactorisation des langages typés dynamiquement, fait défaut par rapport aux langages tels que Java ou C #. Le simple changement de nom peut être un exercice exhaustif dans les grands projets Python.
OliverS
Python nécessite-t-il un runtime ou une VM séparé, ou peut-il générer un seul exécutable autonome?
Jim In Texas
2

Si l'objectif principal est le développement de l'interface graphique de Windows, je recommanderais contre CPython car il y a une pénurie de bons concepteurs de formulaires (par rapport à l'utilisation de .Net).

Cependant, IronPython fonctionne sur .Net et vous avez le choix entre deux IDE avec des concepteurs de formulaires: Visual Studio et SharpDevelop. En fait, les outils Python pour Visual Studio peuvent être utilisés pour CPython ainsi que IronPython, ce qui est plutôt bien, même si je ne l'ai pas encore essayé ...

AndyHasIt
la source
2

Cela dépend vraiment de ce que vous entendez par «mauvais choix».

Si vous voulez dire des applications où l'utilisation de Python est très difficile, alors il y en a relativement peu: la principale qui vient à l'esprit et qui n'a pas encore été mentionnée est le code nécessitant des niveaux élevés de correction où les langages avec des systèmes de types sophistiqués (Haskell, langages typés de manière dépendante) ) sont de meilleures options.

Si vous voulez dire des applications où Python est sous-optimal (c'est-à-dire qu'il y a de meilleurs choix) alors il y en a plus mais elles sont aussi plus subjectives. Par exemple, dans mon expérience certes limitée, travailler sur des compilateurs et des interprètes est beaucoup plus facile avec des types de données algébriques, des correspondances de modèles et des fonctionnalités plus fonctionnelles que Python. Cependant, il n'est pas possible de lister de manière exhaustive des applications comme celle-ci, car elles varient par personne.

Tikhon Jelvis
la source
2

Il est idéal pour écrire rapidement quelque chose en raison de sa capacité expressive et de sa grande variété de bibliothèques de support.

La vérification de type dynamique et le manque de déclaration explicite des variables en font un mauvais choix pour les grands projets impliquant des centaines de milliers, voire des millions de lignes de code. La même chose vaut pour les systèmes critiques ou critiques pour la sécurité. Dans un système avionique, par exemple, il serait totalement inacceptable qu'un système tombe en panne en raison d'une erreur qui aurait pu être détectée au moment de la compilation.

Mike Collins
la source
0

Eh bien, tout comme vous, je commence également avec Python. Mais pour moi dans le contexte de l'apprentissage automatique et de la science des données.

Je viens également d'acquérir toutes les nouvelles connaissances de Java 8 et de ses nouvelles bibliothèques orientées flux.

J'ai vraiment adoré la fluidité des nouvelles bibliothèques de flux Java 8 et la proximité avec les bibliothèques Spark d'Apache. Quand je suis entré en Python, je m'attendais à la même chose et plus encore.

J'en ai vu plus. Mais beaucoup moins. Mauvaise documentation, bien qu'il y en ait eu beaucoup; pas de fluidité, et en fait je devais deviner si une méthode régnait sur un nouvel objet, ou opérait sur cela; rien près d'une carte / réduire etc. J'ai été surpris d'être déçu.

Mais depuis le début, je ne m'attendais pas beaucoup à la facilité avec laquelle il allait être possible d'apprendre la langue. J'ai trouvé que j'avais raison: incohérent, peu intuitif, difficile à apprendre. Mais c'était juste mon expérience d'être assez bon dans tout ce que Java aime.

Yo-yo
la source