7
votes

Quel langage de script fonctionne mieux dans VS Perl vs Python VS Ruby?

Jusqu'à présent, j'ai écrit des programmes à Perl. J'ai décidé de donner à Python un essai et j'ai remarqué quelques différences. Pendant que Perl a SARV, regex, etc. intégré, ceux-ci doivent être importés dans Python. Je pensais que cela donne à Python un avantage de la performance puisque vous ne chargez que de ce que vous avez vraiment besoin.

Donc, j'ai écrit un programme de démonstration dans chaque langue pour tester ses performances.

Perl xxx

python xxx

rubis xxx

c xxx

Les résultats sont:


perl

réel 0m0.006s
Utilisateur 0m0.002S
SYS 0M0.004S

python

réel 0m0.075s de
Utilisateur 0m0.061S
SYS 0M0.013S

rubis

réel 0m0.017 de
Utilisateur 0m0.008s
SYS 0M0.008S

C

réel 0m0.003s
Utilisateur 0m0.001s
SYS 0M0.002S

Mon test est erroné d'une manière ou d'une autre?

J'ai lu que Python est mieux adapté aux grands programmes ( voir ici ). Est-ce que ça va surperformer Perl alors? Qu'en est-il de leur utilisation de la mémoire?

J'écris quelques grandes applications à exécuter sous forme de démons sur mon VPS qui a une quantité limitée de RAM, donc mon objectif réel est de minimiser l'utilisation de la mémoire. < / p>


3 commentaires

500 entiers ne suffisent guère pour l'analyse comparative et vous venez de courir cette fois. Et de toutes les manières, est-ce que compte vraiment pour vous ?


Parce que vous posez la mauvaise question.


Quelle est une mauvaise question? Celui-ci semble très clairement clair et utile pour moi. Je peux comprendre pourquoi quelqu'un voudra peut-être le fermer, mais je ne vois pas la raison de la révocation.


4 Réponses :


0
votes

Non, c'est à peu près où je m'attendrais à voir ces langues en termes de performances relatives.

Les langues plus approfondies de OO comme Python et Ruby sont intrinsèquement plus lentes, ces deux en particulier parce qu'ils sont interprétés. (Ok python peut être compilé, mais c'est toujours lent)

La raison pour laquelle Python serait considéré comme meilleur pour les programmes plus importants est dû au fait qu'il est plus facile d'organiser des échelles de complexité. Il faut beaucoup de rigueur pour conserver un grand nombre de scripts perl interdépendants gérables. Surtout quand vous ne pouvez pas les lire deux semaines plus tard. = o)

Le temps de programmeur est aussi important que le temps de la CPU dans la plupart des cas.


3 commentaires

Ma candidature actuelle est écrite à Perl qui utilise environ 100 Mo de RAM. Je pensais que si je peux frapper cela par au moins 30 Mo dans une langue différente, il vaut la peine de passer l'écriture car sinon je finirai à passer à un plan plus élevé.


@Perlit: Perl écrit naïvement peut prendre beaucoup plus de mémoire que Perl écrit avec une utilisation de la mémoire faible comme objectif. Cela dit, la mémoire virtuelle de 100 Mo ne signifie pas 100 Mo de RAM ...


Perlit: fréquemment, Perl utilise moins de mémoire que d'autres langues dynamiques. Examinez votre code, vous pouvez obtenir des économies de mémoire.



6
votes

Il y a quelques problèmes ...

  1. Votre test n'accumule pas assez d'exécution, vous testez probablement surtout le surcharge de démarrage de l'interprète et même la mesure même avec précision.

  2. Je m'en fiche si Perl ou Python sont 10 fois plus vite que Ruby, je veux utiliser ce que je considère la meilleure langue ... Celui que j'ai la plus motivation à écrire ... Celui Je pense qu'il est possible d'écrire un beau code.

  3. L'article ESR est assez ancien et n'inclut certainement pas RUBY.


5 commentaires

Bien sûr, il est très possible (et facile) d'écrire «belle» (malgré la signification sans signification) code dans Python et même Perl. Un bon programmeur trouve toujours un moyen.


1. Ah, donc si je dors () pendant quelques secondes, cela serait-il plus précis? 2. Ce n'est pas la vitesse que je suis vraiment préoccupé, c'est l'utilisation de la mémoire. Personnellement, j'aime Perl mais pensait si la réécriture de mon application à Python ramènerait ma mémoire.


Rafe, bien sûr, j'aurais probablement dû dire "ma langue préférée" et l'a laissé à cela. :-)


@Rafe Kettler: Je suis d'accord. Donc, donc j'irais dans l'inverse: j'utilise une langue dans laquelle il est difficile de ne pas écrire de beau code. Et c'est python. Parce que j'ai souvent besoin d'écrire moi-même un bon code, mais comprenez les autres codes. Et c'est presque impossible à Perl et peut être délicat dans Ruby. Mais mais. C'est autant une question de goût que le contexte.


Vous avez raison sur le chargement du temps d'exécution. Sur mon ordinateur, le test Python prend environ 0,02 à 0,03 secondes. De cela environ 0,00015 est le temps de calcul réel. Chargement de l'interprète prend 200 fois plus longtemps que d'exécuter le programme. :-)



3
votes

Il n'y a pas de réponse générale à votre question sur la performance et le repère ne prouve presque rien, la performance est une question trop complexe à évaluer par un seul test. Perl moderne vous donne des outils d'apprivoiement de complexité que tout autre langage décent et convient parfaitement à la rédaction de grands programmes.

Quant à l'efficacité de la mémoire, vous pourriez dire que cette mise en œuvre de la langue x est moins faim de mémoire que cette mise en œuvre de la langue Y. Mais dans la pratique, je pense que vous obtiendriez une variation beaucoup plus élevée basée sur votre façon de coder et conception. Et si vous utilisez déjà une langue parle d'une seule langue, vous feriez probablement mieux l'utiliser et acheter une mémoire supplémentaire pour l'argent que vous économisez en passant à une langue différente. Ymmv.

et après avoir lu les commentaires: essayer de réduire l'utilisation de la mémoire en réécrivant à une langue différente sans profilage d'abord est fou.


0 commentaires

0
votes

Quelques problèmes auxquels je peux penser:

  • Vous opérez sur le nombre flottant. Vous ne savez pas comment il est mis en œuvre sur chaque langue (quelle précision? Flotteur? Double?) Cela peut entraîner une différence de vitesse / résultat. P> li>

  • Nombre de comptage est trop petit, vous devez faire une boucle imbriquée pour que le programme fonctionne plus de 10 secondes. p> li> ul>

    Par exemple: P>

    for(0:10000) // change variable depending on what your machine
      for(0:10000)
        // your operation here
    


0 commentaires