Pourquoi Scala est-il plus évolutif que les autres langues?

12

Scala est présenté comme un langage évolutif, une fonctionnalité qui est même incluse dans son nom :

Le nom Scala est un portemanteau «évolutif» et «langage», ce qui signifie qu'il est conçu pour évoluer avec les demandes de ses utilisateurs.

Que signifie «évolutif» dans le contexte de Scala? Qu'est-ce qui rend Scala plus évolutif que, disons, Java?

prasonscala
la source
5
Scala n'est pas évolutif comme vous le pensez: vous devriez vraiment lire l'interview des développeurs Twitter sur Scala / Java ... Fondamentalement, chaque fois qu'ils avaient des problèmes (réels) d'évolutivité, ils finissaient par supprimer le code Scala et mettre correctement le multi-thread Code Java (qui, comme cela a été souligné ici, est beaucoup plus facile à faire en Java qu'en Scala). Scala est cool pour les tests unitaires de prototypage et d'écriture et tout ce qui n'implique pas la quantité de données "Real World" [TM] qui dit.
Tristan St.
5
Il est plus facile d'écrire du code multi-thread correctement en Java qu'en Scala? comment?
Aaron Novstrup
@Webinator Avez-vous un lien vers l'interview?
Aaron Novstrup
D'accord avec Tristan St sur l'évolutivité. Erlang est le leader du pack en cas de programmation simultanée en raison de sa capacité à créer des processus en un minimum de temps. Vous ne pouvez tout simplement pas créer plus de 10000 threads et interagir avec SCALA comme vous le pensez.
Ubermensch
3
@TristanSt. Belle diffusion de FUD, ce n'est absolument pas le point de départ que j'ai tiré de cette interview. - "Mais pour les autres parties, nous venons de revenir à un modèle de filetage Java traditionnel. L'ingénieur qui y travaille, John Kalucki, vient de découvrir qu'il était un peu plus facile à tester, un peu plus prévisible. Ce qui était bien, c'était Il a fallu quelques minutes pour passer du code basé sur un acteur à quelque chose basé sur un thread. Il s'agissait de quelques recherches et remplacements. Ce n'est donc pas si mal si les acteurs vous échouent pour une raison quelconque. " Concept étonnant - certaines choses correspondent au modèle d'acteur et d'autres pas!
Derek Litz

Réponses:

14

Lorsque Martin Odersky parle de la scala comme d'un choix de langue évolutif, ce qu'il veut dire, c'est que la langue elle-même est appropriée pour:

  • trucs de script
  • écrire des applications
  • écrire des applications "d'entreprise" de monstre (à défaut d'un meilleur mot)

Il ne fait certainement pas référence à l'évolutivité du point de vue des performances!

Le fait qu'il puisse affirmer que scala est aussi approprié pour les scripts quick'n'dirty que pour le déploiement à grande échelle est à peu près comme suit:

Scripting

Scala est idéal pour les scripts, car son inférence de type et son style fonctionnel le rendent à la fois concis et idéal pour découper et découper des collections, etc.

Applications

Scala est idéal pour écrire des applications, car il s'agit d'un langage à vérification de type statique avec de grandes fonctionnalités pour travailler dans des styles fonctionnels et impératifs. Scala est compatible avec Java et vous pouvez donc tirer parti d'un énorme écosystème de bibliothèques.

Déploiement d'entreprise

Scala compile en bytecode et s'exécute sur la machine virtuelle Java, un système stable avec de grandes performances, par rapport aux langages (soi-disant) dynamiquement typés (c'est-à-dire non typés). Encore une fois, le fait qu'il soit typé statiquement signifie que le refactoring est beaucoup plus facile sur les grandes bases de code.

oxbow_lakes
la source
Y a-t-il des preuves à l'appui pour "typé statiquement signifie que le refactoring est rendu beaucoup plus facile sur de grandes bases de code"? Cela ressemble plus à une situation, "cela dépend", puis à un fait. La seule chose que j'ai vu offrir définitivement est que les langages de saisie sont plus faciles à gérer pour les rédacteurs de compilateurs.
Derek Litz
21

Ce que dit Odersky (diapositive 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala est profonde là où les autres langues sont larges."

Cela signifie, évolutif signifie en termes de flexibilité et d'expressivité. Vous pouvez créer vos propres structures de contrôle. Par exemple, le framework des acteurs est une bibliothèque, mais il semble qu'il utilise des fonctionnalités de langage.

Cela signifie que Scala évoluera en fonction de l'abstraction nécessaire, pas nécessairement en termes de "réponse à 1 000 000 de requêtes en une seconde" (mais Scala est ici aussi fort).

michael.kebe
la source
1
+1 cela correspond vraiment à "SCAlable LAnguage". C'est un langage conçu pour évoluer avec les besoins du développeur.
Ben James
11

Ce qui limite l'évolutivité de Java dans la pratique n'est pas la JVM, c'est la difficulté d'écrire du code concurrent correct. Scala facilite cela grâce à son support pour la programmation fonctionnelle et le modèle d'acteur.

Java peut être très évolutif lorsque la concurrence est facile, comme dans les serveurs Web (chaque demande est presque complètement indépendante). Mais quand il s'agit de paralléliser une seule tâche de longue durée, il peut être difficile de bien faire les choses.

Michael Borgwardt
la source
Bien que Java ne prenne pas en charge la programmation fonctionnelle, cela ne signifie pas que vous ne pouvez pas l'utiliser en Java. Cela peut vous donner sensiblement la même évolutivité, mais pour plus d'efforts. Une bibliothèque qui peut aider code.google.com/p/lambdaj
Peter Lawrey
2
L'évolutivité à laquelle Scala possède son nom est de la langue , pas des programmes.
Daniel C.Sobral
6

Ce n'est pas nécessairement le langage lui-même qui est plus évolutif que Java, car vous dites que les deux langages peuvent produire le même bytecode.

Mais le modèle Actor et le style de programmation fonctionnel peuvent améliorer l'évolutivité (en un mot, simplifiant la programmation simultanée correcte et réduisant les besoins de synchronisation).

Pour obtenir un meilleur aperçu, jetez un œil au modèle d'acteur et comparez-le avec une application java multi-thread traditionnelle:

Vous pouvez même utiliser le framework Akka pour créer une application Java hautement évolutive sans codage dans Scala:

Alois Cochard
la source
La bibliothèque des acteurs est un bon exemple de la façon dont Scala est évolutif, mais cet exemple ne concerne pas la concurrence: l'API des acteurs ressemble à une fonctionnalité native avec des opérateurs spéciaux (tels que! Message-send), mais en réalité, tout est juste appels de méthode réguliers.
Ben James
Le modèle d'acteur vous aide à écrire des logiciels évolutifs sans trop de douleur et sans trop de maux de tête concurrents, n'est-ce pas? même si vous ne le voyez pas lorsque vous utilisez Acteurs, la concurrence comme quelque chose à voir avec le modèle d'acteur. Le modèle d'acteur vise à simplifier le calcul simultané, alors pourquoi cet exemple n'a rien à voir avec la concurrence ... Je ne comprends pas votre point ici?
Alois Cochard
Mon commentaire n'était pas formulé avec brio, désolé. Les réponses de llemieng ou michael.kebe l'expliquent mieux.
Ben James
Aucun problème ! Je comprends maintenant votre point, je ne parlais que de l'évolutivité des bibliothèques Scala et non des fonctionnalités d' évolutivité / simultanéité du langage lui-même. Merci
Alois Cochard