7
votes

Cas de rubis performant mieux que Java

Je fais une présentation sur l'écosystème rubis ciblé à une foule Java.

Même si je ferai les points de gagner du temps de la productivité et que plus lent peut toujours être assez rapide , ce sera bien si je peux trouver un indice de référence Cela montre que Ruby Outperformez Java dans une sorte de chiffrement de nombre, une fois la question qui se pose, pour l'amour du jeu de mots.


Malheureusement, après des heures de recherche et d'expérimentation, je n'ai toujours rien.

Quelqu'un pourrait-il proposer une référence qui montre que les choses ne sont pas complètement noires et blanches?

Idéalement, il devrait comparer les dernières versions de Java 1,6 / 1,8 contre la dernière version de CRUBY . Tous les exemples impliquant rubinius / Jruby sont également appréciés.


6 commentaires

Si vous essayez de faire des expériences vous-même et que vous ne pouvez pas proposer des points de repère prenant en charge votre hypothèse, cela pourrait bien indiquer que votre hypothèse est fausse.


@Louiswasserman, qui est probable, mais je suis toujours ouvert à la possibilité qu'il pourrait y avoir une affaire d'angle obscur. Il n'y a pas de mal à demander.


Benchmarksgame.alioth.debian.org/u64q/... Peut indiquer des endroits où Ruby est au moins en criant une distance de Java et des endroits où Ruby n'est pas.


Java a passé des milliers d'années d'homme sur l'amélioration de la performance :)


Je ne pense pas que "Java" a passé à tout moment. Les développeurs et les sociétés à source ouverte ont fait.


Montrez-leur des comptes de ligne de projets similaires écrits dans chacun.


3 Réponses :


15
votes

Je ne pense pas que vous allez trouver quelque chose. Lorsqu'il s'agit d'optimisation, Ruby et Java sont réellement assez similaires, le principal point de douleur pour les deux sont des objets en boîte et une expédition de méthode dynamique, qu'ils ont tous deux hérité de SmallTalk (Ruby directement, Java via son Inspiration principale Objective-C ). Et les VMS Java sont tout simplement les environnements d'exécution de la production les plus avancés pour les langues de OO distribuées dynamiquement. Il peut y avoir des éléments de recherche pour le schéma, par exemple, cela est encore plus rapide, mais en ce qui concerne les implémentations industrielles prêtes à la production, Azul Zing , hotspot oracle , Oracle JRockit , IBM J9 et amis gagne la main vers le bas.

Donc, à moins que le Rubinius Les gars ont inventé quelque chose que la communauté SmallTalk / Java a oublié, vous aurez à peu près beaucoup se retrouver avec les mêmes performances au mieux.

Votre meilleur pari est pas traitement numérique mais traitement de texte. C'est quelque chose où le patrimoine Perl de Ruby brille. La plupart des moteurs de java d'implémentations de Java ne sont pas très performants (bien qu'ils vont mieux), tandis que Onigmo est en fait assez bon (pas aussi bon que Perl's, cependant). De plus, les chaînes indépendantes de codage de caractères de Ruby vous permettent d'éliminer la ré-codage de votre chaîne, tandis que les chaînes de Java devront toujours être codées vers et à partir de UTF-16, à moins que les codages d'entrée et de sortie ne soient UTF-16, ce qui est hautement improbable. En rubis, vous devez le transcoder au plus une fois, même si votre codage d'entrée et de sortie est différent, vous pouvez définir le codage interne pour être identique à l'entrée ou à l'encodage de sortie, et vous ne devez donc transcoder que pendant l'entrée. ou la sortie, mais pas les deux.

sont des exemples , cependant, de Ruby en concurrence avec C, et comme "tout le monde sait" ™ que c est plus rapide que Java, cela doit sûrement dire que Ruby est plus rapide que Java, non? droit?

[En réalité, trouver des exemples où Ruby Outperforms C est probablement plus facile, car les optimisations dynamiques telles que l'inlinage spéculatif, la mise en cache en ligne polymorphe, l'optimisation adaptative, ainsi que des optimisations "dangereuses" activées par la définition dynamique d'optimisation n'existent pas dans typique c implémentations.]

en particulier, Rubinius's hachage La classe qui est écrite en ruby ​​n'est pas significativement plus lente que 's Hash classe écrite en c.

Et un exemple vraiment excitant est que Jruby + truffe + graal + Trufflec peut exécuter les extensions YARV C dans un interprète C au sommet de la JVM (!!!) plus rapide que YARV peut exécuter des extensions C Nativement:


1 commentaires

Ceci est en fait très informatif. J'ai même un vague mémoire d'une regex qui jetait stackoverflowerror en Java, mais passait dans Ruby. Nice matériaux, vue d'ensemble et directions. Je vais enquêter plus loin.



0
votes

J'ai déjà assisté à une conversation par un développeur Jruby qui a souligné qu'ils obtenaient de meilleurs repères de Jruby que de Native Ruby, et que c'était parce que Sun / Oracle avait passé de vastes sommes d'argent pour rendre hotpot incroyablement bon à l'optimisation JIT .

Je soupçonne que vous pourrez peut-être trouver des points de repère dans lesquels Jruby est aussi rapide que Java, une fois que Jit a eu une chance de faire sa magie.

Essayez donc une application de serveur, peut-être une application Web, de démarrer et d'exercer le code au moins une fois avant de commencer à mesurer la performance. Cela devrait vouloir dire que JIT est arrivé et vous trouverez peut-être que la performance équivaut à Java uni.

même si, un tracteur n'est pas une voiture de course. On est bon à des courses gagnantes, l'autre est bonne pour tirer des charrues. De même, il y a des raisons pour lesquelles plus d'une langue existe.


0 commentaires

3
votes

Je finirai par utiliser un exemple simple regex - / (foo | bar) * / , essayant de correspondre à 'foobar' * n :


< pré> xxx

vs
xxx

Ce n'est pas techniquement plus rapide, la version Java ne fonctionne même pas (jette un Stackoverflowerror ). Cet IMHO est une affaire de loin supérieure contre la notion que Java est mieux optimisée pour chaque scénario possible là-bas.

Cela me donne aussi une bonne transition pour parler de denteness de code, surtout après Je montrais la version pré- Java8 .


0 commentaires