Il faut distinguer les différentes significations de l'échelonnement :
- 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.
- 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.