web-dev-qa-db-fra.com

Pourquoi est Python utilisé pour le calcul scientifique à hautes performances (mais Ruby ne l'est pas)?

Il y a un citation d'un discours PyCon 2011 qui va:

Au moins dans notre boutique (Argonne National Laboratory) nous avons trois langues acceptées pour le calcul scientifique. Dans cet ordre, ils sont C/C++, Fortran dans tous ses dialectes et Python. Vous remarquerez le manque absolu et total de Ruby, Perl, Java.

C'était dans le contexte plus général du calcul haute performance. Certes, la citation ne provient que d'un magasin, mais d'un autre question sur les langues pour HPC , répertorie également Python comme l'un à apprendre (et non Ruby).

Maintenant, je peux comprendre que C/C++ et Fortran sont utilisés dans cet espace de problème (et Perl/Java pas utilisé). Mais je suis surpris qu'il y ait une différence majeure dans Python et Ruby utilisation pour HPC, étant donné qu'ils sont assez similaires. (Remarque - Je ' m un fan de Python, mais n'ont rien contre Ruby).

Y a-t-il raison spécifique pour laquelle la langue a décollé? S'agit-il des bibliothèques disponibles? Quelques fonctionnalités linguistiques spécifiques? La communauté? Ou peut-être juste contigence historique , et cela aurait pu aller dans l'autre sens?

107
Cyclops

Je développerai mon commentaire.

Je pense qu'il y a quelques facteurs qui ont influencé l'utilisation de Python dans le calcul scientifique, bien que je ne pense pas qu'il y ait des points historiques définitifs où vous pourriez dire: "Oui, c'est la raison pourquoi Python est utilisé sur Ruby/toute autre chose "

Histoire ancienne

Python et Ruby sont à peu près du même âge - selon Wikipedia, Python a été officiellement publié pour la première fois en 1991 et Ruby = en 1995.

Cependant, Python est apparu plus tôt que Ruby l'a fait, car Google utilisait déjà Python et cherchait Python développeurs au tournant du millénaire. Comme ce n'est pas comme si nous avions une histoire organisée des utilisations des langages de programmation et de leurs influences sur les gens qui les utilisent, je vais théoriser que cette adoption précoce de Python par Google était un grand facteur de motivation pour les personnes cherchant à se développer au-delà de l'utilisation de Matlab, C++, Fortran, Stata, Mathematica, etc.

À savoir, je veux dire que Google utilisait Python dans un système où ils avaient des milliers de machines (pensez à la parallélisation et à l'échelle) et traitait constamment plusieurs millions de points de données (encore une fois, à l'échelle).

Confluence de l'événement

Le calcul scientifique était auparavant effectué sur des machines spécialisées comme les SGI et les Crays (vous vous en souvenez?), Et bien sûr, FORTRAN était (et est toujours) largement utilisé en raison de sa relative simplicité et parce qu'il pouvait être optimisé plus facilement.

Au cours de la dernière décennie, le matériel de base (c'est-à-dire des choses que vous ou moi pouvons nous permettre sans être millionnaires) a pris le dessus dans le domaine informatique scientifique et massif. Regardez le classement actuel des 500 premiers - de nombreux "super ordinateurs" les mieux classés au monde sont construits avec du matériel Intel/AMD normal.

Python est arrivé à un bon moment car, encore une fois, Google faisait la promotion de Python, et Google utilisait du matériel de base, et ils avaient des milliers de machines.

De plus, si vous creusez dans de vieux articles de calcul scientifique, ils ont commencé à apparaître autour de l'ère 2000.

Support plus précoce

Voici un article écrit pour les logiciels et systèmes d'analyse de données astronomiques , écrit en 2000, suggérant Python comme langage de calcul scientifique).

L'article a cette citation sur Python:

Python est un langage de programmation orienté objet interprété qui commence à recevoir une attention considérable dans les applications scientifiques (Python, 1999). En effet, Python, et les langages de script en général, représentent une prochaine étape logique pour de nombreux projets scientifiques (Dubois 1994). Tout d'abord, Python fournit un langage de programmation interprété qui peut être vu comme une extension des langages de commande simples déjà utilisés par les programmes scientifiques

Deuxièmement, Python est facilement intégré à un logiciel écrit dans d'autres langages. En conséquence, il peut servir à la fois de langage de contrôle pour piloter des programmes existants ainsi que de langage de collage pour combiner différents systèmes ensemble. Enfin, Python fournit une grande collection de modules tiers, une base d'utilisateurs établie et une variété de documentation sous forme de livres et de références en ligne. Pour cette raison, on pourrait le considérer comme un version très soignée et étendue de ce que les scientifiques essaient souvent d'accomplir lorsqu'ils écrivent leurs propres interprètes de commande.

Vous pouvez donc voir que Python avait déjà eu une traction remontant à la fin des années 90, car il était fonctionnellement similaire aux systèmes existants à l'époque, et parce qu'il était facile à intégrer Python avec des choses comme C et les programmes existants. Sur la base du contenu de l'article, Python était déjà utilisé scientifiquement depuis 1995-1996).

Différence de croissance de popularité

La popularité de Ruby a explosé parallèlement à la montée de Ruby on Rails, qui est sorti pour la première fois en 2004. J'étais au collège quand j'ai vraiment entendu parler de Ruby pour la première fois, et c'était vers 2005-2006. = Django for Python a été publié autour de la même période (juillet 2005 selon Wiki), mais le focus du Ruby La communauté semblait très fortement centrée sur la promotion de son utilisation dans les applications Web.

Python, d'autre part, avait déjà des bibliothèques adaptées à l'informatique scientifique:

  • NumPy - NumPy a officiellement commencé en 2005, mais les deux bibliothèques sur lesquelles il a été construit ont été publiées plus tôt: Numeric (1995) et Numarray (2001?)

  • BioPython - bibliothèque de calcul biologique pour python, remonte à 2001, au moins

  • SAGE - Package mathématique avec la première version publique début 2005

Et bien d'autres, bien que je ne connaisse pas beaucoup de leurs lignes de temps (en plus de simplement parcourir leurs sites de téléchargement), mais Python a également SciPy (construit sur NumPy, publié en 2006), avait les liaisons avec R (le langage des statistiques) au début des années 2000, ont obtenu MatPlotLib, ainsi qu'un environnement Shell vraiment puissant en ipython.

ipython a été publié pour la première fois au début des années 2000 et a ajouté de nombreuses fonctionnalités qui le rendent très agréable pour le calcul scientifique, comme le graphisme matplotlib intégré et être capable de gérer des clusters de calcul =.

De l'article ci-dessus:

Il convient également de noter un certain nombre d'autres projets informatiques informatiques liés à Python. L'extension numérique Python ajoute une manipulation rapide des matrices et des matrices à Python (Dubois 1996), MMTK est une boîte à outils basée sur Python pour la modélisation moléculaire (Hinsen 1999), le projet Biopython développe des outils basés sur Python pour la recherche en sciences de la vie (Biopython 1999), et le Visualization Toolkit (VTK) est un package de visualisation avancé avec Python (VTK, 1999). De plus, les projets en cours dans la communauté Python développent des extensions pour le traitement et le traçage des images. Enfin, les travaux présentés dans (Greenfield, 2000) décrivent l'utilisation de Python dans les projets du STScI.

Bon liste des packages scientifiques et numériques pour Python .


Donc, cela est probablement dû en grande partie à l'histoire ancienne et à la relative obscurité de Ruby jusqu'aux années 2000, alors que Python avait gagné du terrain grâce à l'évangélisation de Google). .

Donc, si vous évaluiez des langages de script dans la période 1995-2000, que regardiez-vous vraiment? Il y avait Perl, qui était probablement suffisamment différent syntaxiquement pour que les gens ne voulaient pas l'utiliser, et puis il y avait Python, qui avait une syntaxe plus claire et une meilleure lisibilité.

Et oui, il y a probablement beaucoup d'auto-renforcement - Python a déjà toutes ces grandes bibliothèques utiles pour le calcul scientifique, tandis que Ruby a une voix minoritaire) préconisant son utilisation dans la science, et il y a des bibliothèques qui poussent, comme SciRuby , mais les outils de Python ont mûri au cours de la dernière décennie.

La communauté de Ruby dans son ensemble semble être beaucoup plus intéressée à développer Ruby en tant que langage Web, car c'est ce qui l'a vraiment fait connaître, tandis que Python a commencé) sur un chemin différent, et plus tard est devenu largement utilisé comme langage Web.

108
wkl

J'ai largement utilisé Python pour les applications d'ingénierie et Ruby pour les applications Web).

Le problème que je vois avec Ruby comme langage scientifique est qu'il y a trop d'options de syntaxe pour une opération donnée.

Python est conçu avec la prémisse suivante "Il devrait y avoir une - et de préférence une seule - manière évidente de le faire". Cela rend BEAUCOUP plus facile de lire le code de quelqu'un et de déterminer son intention. Ceci est essentiel pour les évaluations par les pairs de l'ingénierie, etc.

J'aime Ruby et il est idéal pour certaines tâches, mais mon code Ruby pourrait être syntaxiquement entièrement différent du code d'un programmeur différent qui fait exactement la même chose. Cela provoque trop d'ambiguïté dans un environnement scientifique ou d'ingénieur.

37
Joshua Shreve

À une supposition, une grande partie de cela serait la dépendance à matlab par beaucoup de chercheurs. Python a des alternatives, telles que sage . Alors que Ruby n'en a pas, ou du moins il n'y en a pas d'évidentes).

Deuxièmement, selon le Ruby FAQ , python est à la fois procédural et orienté objet, tandis que Ruby se fait passer pour comme langage procédural. Si vous écrivez un petit script à des fins mathématiques, comme ce que vous feriez dans matlab, le paradigme OO est un mal de tête. Non seulement cela, mais il force un saut conceptuel loin des paradigmes fonctionnels/procéduraux que les chercheurs utilisent. Les mathématiques ne sont pas OO. Les mathématiques sont fonctionnelles , suivi de procédures (pensez aux preuves logiques).

Enfin, notez que le Ruby FAQ déclare que Ruby est plus complexe que python. La programmation vient en second lieu aux chercheurs, pas d'abord comme nous.

17
Spencer Rathbun

Lorsque le BDFL (Guido van Rossum) a écrit pour la première fois Python l'objectif était qu'il soit aussi compréhensible que l'anglais (proposition de financement DARPA), ce qui éliminerait les erreurs de codage courantes.

Un problème très visible est l'utilisation du retrait pour délimiter les blocs. Dans les langages qui ont des délimiteurs d'instructions complexes explicites (par exemple, accolades C, Pascal BEGIN/END), les espaces sont réduits à un seul caractère d'espace avant de fournir le code au lexeur. Cela permettrait une grande variation dans la façon dont le code est présenté.

Pour les programmeurs professionnels, ce n'est pas un problème car ils se sont formés pour y faire face à partir de 30 heures ou plus par semaine de pratique.

Pour d'autres professionnels où la programmation est un outil, ce problème devient un problème majeur. Ce groupe comprend des mathématiciens, des physiciens, des chimistes, des ingénieurs, etc.

Étant donné que Python réduit les erreurs pour les programmeurs non professionnels, cela leur permet de réfléchir au problème qu'ils essaient de résoudre et de ne pas avoir à gérer autant les mécanismes du langage.

Ceci est un exemple unique de pourquoi il est populaire en dehors de la profession de programmation. Il existe d'autres exemples qui peuvent être utilisés pour illustrer le même point tels que les piles incluses, Le Zen de Python (import this), l'utilisation de Monty Python, etc.).

14
Lance Helsten

Ceci est une grande discussion ici, je pense que les articles ici ont vraiment répondu pourquoi python est plus populaire dans la communauté scientifique. Cependant, il existe certains contre-arguments pour les sciences de [Ruby):

  • Ruby peut être codé de manière plus intuitive que python (DSL, etc.): étant donné les bons packages utilisés:

    check bioruby: http://bioruby.org/ une réserve de séquence peut être simplement: à l'inverse, etc. si vous utilisez des bases de données: Ruby l'API de liaison de base de données est sans doute meilleure que python .

  • Le rubis permet un niveau d'abstraction plus élevé en même temps qu'il est laconique.

  • meilleur système de gestion des paquets: Ruby les gemmes sont tellement plus faciles que: setuptools, pip etc

Cependant, l'adoption de Ruby a été/est/sera entravée par sa complexité. Je pense que LISP est un langage formidable/puissant, mais pourquoi il n'a pas décollé en tant que langage général? la situation similaire est ici avec Ruby - il hérite de beaucoup de pouvoir de LISP, de petites conversations et de Perl!: mais seule une sélection de personnes l'utilisera réellement pour obtenir les avantages. En fin de compte, il peut rester solide dans certains créneaux/domaines spéciaux (tels que le rail dans le Web, la marionnette en configuration), il est difficile pour les `` non '' programmeurs d'en profiter pleinement, mais il pourrait être le bon ami du programmeur (vu un ordinateur les scientifiques apprécient le langage: http://www.cleveralgorithms.com/nature-inspired/index.html )

Dernière mise à jour: il semble que python prenne déjà le dessus sur le paysage. Récemment, des livres tels que: http://www.Amazon.com/Python-Data-Analysis-Wes-McKinney/dp/144931979 et de nombreux autres livres (analyse de données, apprentissage automatique, etc.), sont tous écrit avec python comme langue utilisée. Si Ruby veut rattraper son retard, il a besoin de sérieux efforts. Compte tenu de matplotlib en python, il faut probablement plusieurs années-hommes pour l'amener à l'état où il se trouve actuellement. À moins que de sérieux efforts soient déployés dans Ruby, il ne pourra probablement pas rattraper le stade de python analyse des données/calcul scientifique dans les 2-3 prochaines années.

5
Isaac Pei

Après avoir utilisé python pour l'analyse des données pendant un certain temps (provenant d'expériences de travail avec Ruby, lua et R), le package numpy (et de nombreuses bibliothèques scientifiques connexes) permet d'exécuter rapidement calcul (vitesse similaire à C, car numpy est écrit/intégré avec les codes C) avec la facilité de programmation en python.

Numpy existe depuis un certain temps, sa disponibilité a aidé à la création de nombreux autres packages scientifiques connexes, tels que scipy, pandas ... etc. De formidables outils font python un excellent écosystème pour le calcul scientifique, alors que dans Ruby, une bibliothèque de calcul de matrice plus rapide similaire vient d'être développée (NMtrix: https://github.com/SciRuby/nmatrix ). faire de la différence python le choix évident pour le calcul scientifique.

3
Ipstone

Je me demandais la même chose. Je pense que c'est, comme l'a dit Spencer Rathbun, à cause de l'aspect procédural de Python. Étant moi-même un "non-programmeur", je trouve ça très beau la façon dont vous pouvez coder en Ruby et le cadre Rails est excellent pour la facilité d'utilisation. Cependant , lorsque vous codez à des fins scientifiques (mathématiques, biologie, etc.), vous pensez normalement dans un langage "mathématique", c'est-à-dire que vous ne vous souciez pas de déclarations comme

Person.find_by_name 'Juanito'

mais vous vous souciez plus de

A = B*C + D

Donc je pense que Ruby est puissant que beaucoup de ses fonctionnalités ne seraient pas utilisées dans un programme scientifique. Il est plus facile de penser aux procédures.

2
juandiego

Je pense que l'une des principales raisons Python est devenu si populaire pour la science des données était en raison de la quantité de temps/d'efforts (c'est-à-dire, de l'argent) que nous pouvions économiser afin d'étendre nos scripts pour une solution réelle (par exemple , système logiciel). Avec Python, nous pourrions plus facilement construire une solution système basée sur le code que nous avons écrit pour la science des données.

J'ai des expériences avec la recherche d'une langue d'interprète avec cette fonctionnalité il y a environ 15 ans. À l'époque, Python a été choisi pour être celui-ci, non pas parce que c'est le langage parfait pour la science des données, mais parce que c'était un langage rare OOP avec rapide/interpréteur portable qui était également extensible pour s'interfacer avec d'autres langages tels que C/C++/Java. Contrairement à nos jours, ces fonctionnalités étaient excellentes mais rares pour construire directement des solutions à partir du code de base déjà implémenté pour la science des données.

Le temps pourrait être un autre facteur critique pour créer un langage de science des données. Il y a 15 ans, nous avons constaté qu'il existait déjà des packages de base tels que numeric et scipy pour le calcul numérique en Python, mais nous ne savions même pas l'existence de Ruby comme langage de programmation. À la fin de 2018 , Je pourrais trouver plusieurs projets en utilisant Ruby pour la science des données. Peut-être 10 ans plus tard, on pourrait se demander pourquoi Ruby est si populaire pour l'IA.

0
Tae-Sung Shin

Une des raisons est que Python a un bon support pour utiliser/intégrer/appeler du code C/C++, alors qu'à ma connaissance Ruby n'offre pas le même degré de ( Cela signifie que vous pouvez écrire les composants de code hautement performants en C/C++, puis utiliser Python (c'est-à-dire un langage de haut niveau/plus facile à lire) ) pour coller le tout ensemble. J'imagine que c'est aussi une des raisons de son adoption institutionnelle précoce par Google.

0

Python prend mieux en charge les tableaux à N dimensions avec le package Numpy. Je n'ai rien vu de semblable pour Ruby.

Python semble être plus rapide dans le calcul numérique/calcul scientifique que j'ai fait. Je n'ai aucune preuve autre que lorsque j'ai écrit des algorithmes similaires en Python et Ruby, les algorithmes Python ont fonctionné plus rapidement (YMMV).

0
Josh Petitt