41 votes

Scala est-il plus évolutif que les autres langages JVM ?

Voici la seule façon que je connaisse de poser la question pour le moment. Si j'ai bien compris, Scala utilise la machine virtuelle Java. Je pensais que Jruby le faisait aussi. Twitter a changé son middleware pour Scala. Auraient-ils pu faire la même chose et utiliser Jruby ?

Auraient-ils pu commencer avec Jruby et ne pas avoir les problèmes de mise à l'échelle qui les ont poussés à passer de Ruby à Scala ? Est-ce que je ne comprends pas ce qu'est Jruby ? Je suppose que parce que Jruby peut utiliser Java, il aurait pu évoluer là où Ruby ne l'aurait pas fait.

Est-ce que tout se résume aux types statiques ou dynamiques, dans ce cas ?

39voto

Daniel C. Sobral Points 159554

Scala est "extensible" dans le sens où les langue peuvent être améliorées par des bibliothèques d'une manière qui donne l'impression que les extensions font partie du langage. C'est pourquoi les acteurs semblent faire partie du langage, ou pourquoi BigInt semble faire partie du langage.

Cela s'applique également à la plupart des autres langages de la JVM. Cela ne s'applique pas à Java, car il a un traitement spécial pour ses types de base (Int, Boolean, etc.), pour les opérateurs, une syntaxe lourde qui précise ce qui est construit dans le langage et ce qui est une bibliothèque, etc.

Aujourd'hui, Scala est plus performant que les langages dynamiques. sur la JVM car la JVM ne les prend pas en charge. Les langages dynamiques sur JVM doivent recourir à la réflexion, ce qui est très lent.

11voto

chaos Points 69029

Non, pas vraiment. Ce n'est pas que la JVM soit en quelque sorte magique et qu'elle fasse évoluer les choses par ses pouvoirs magiques ; c'est que Scala, en tant que langage, est conçu pour aider les gens à écrire des systèmes évolutifs. Le fait qu'il se trouve au-dessus de la JVM est presque accessoire.

5voto

Skade Points 789

Je ne pense pas vraiment que la langue soit le plus gros problème ici. Twitter s'est développé à une vitesse folle, ce qui conduit toujours à un code désordonné. Et si vous faites une réécriture, c'est une bonne idée d'opter pour un langage différent - cela vous empêche de refaire vos propres erreurs et/ou de "réutiliser certaines parties". De plus, Ruby n'est pas vraiment conçu pour ce genre de manipulation de données lourdes que le backend twitter fait. Le frontend reste en Ruby, donc ils l'utilisent toujours.

5voto

Erik Engbrecht Points 2593

Il faut distinguer les différentes significations de l'échelonnement :

  1. La mise à l'échelle en termes d'augmentation du nombre de demandes par seconde pouvant être traitées avec une augmentation proportionnelle du matériel.
  2. La mise à l'échelle en termes de croissance de la base de code sans qu'elle ne devienne un fouillis.

Scala aide sur le premier point car il compile en bytecode Java qui est vraiment similaire à Java, et a donc généralement les mêmes performances que Java. Je dis "généralement", car il y a des cas où Scala idiomatique entraîne une grande quantité de boxe là où Java idiomatique ne le ferait pas (cela devrait changer dans Scala 2.8).

La performance est bien sûr différente de la mise à l'échelle. Un code équivalent écrit en JRuby s'adapterait tout aussi bien, mais la pente de la ligne serait plus raide - vous auriez besoin de plus de matériel pour traiter le même nombre de demandes, mais la forme de la ligne serait la même. D'un point de vue plus pratique, les performances sont utiles, car il est rare que l'évolution soit parfaitement linéaire en ce qui concerne l'ajout de noyaux ou de serveurs, et l'amélioration des performances ralentit le rythme auquel il faut ajouter de la capacité.

Scala est utile pour le deuxième point, car il possède un système de types expressif, appliqué au moment de la compilation, et fournit de nombreux autres moyens de gérer la complexité de votre code, comme les mixins. Vous pouvez écrire du code spaghetti dans n'importe quel langage, mais le compilateur Scala vous dira quand certaines des nouilles sont cassées alors qu'avec JRuby vous devrez vous fier uniquement aux tests. J'ai personnellement constaté que, pour moi, Python s'effondre à environ 1000 LOCs étroitement liées, et à partir de ce moment-là, je dois remanier le code pour soit réduire substantiellement les LOCs, soit rendre la structure plus modulaire. Bien sûr, ce remaniement serait une bonne idée quel que soit le langage utilisé, mais parfois la complexité est inhérente. Gérer un grand nombre de LOCs étroitement couplées n'est facile dans aucun langage, mais c'est beaucoup plus facile en Scala qu'en Python, et je pense que l'analogie s'étend également à Ruby/JRuby.

4voto

wmoxam Points 41

L'évolutivité n'est pas une capacité héritée du langage. Vous parlez de vitesse.

Une meilleure question à poser serait "Pourquoi Scala est-il plus rapide que les autres langages JVM (ou l'est-il) ?". Comme d'autres l'ont souligné, c'est une question de langage statique ou dynamique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X