En surface, Groovy et Scala sont assez similaires, mis à part Scala étant typé statiquement et Groovy dynamique).
Ce sont deux langages orientés objet pour la JVM qui ont des lambdas et des fermetures et interagissent avec Java. À part cela, ils sont extrêmement différents.
Groovy est un langage "dynamique" non seulement dans le sens où il est typé dynamiquement mais qu'il prend en charge la méta-programmation dynamique.
Scala est un langage "statique" en ce qu'il est typé statiquement et n'a pratiquement aucune méta-programmation dynamique au-delà des trucs maladroits que vous pouvez faire en Java. Notez que le système de type statique de Scala est beaucoup plus uniforme et sophistiqué que celui de Java.
Groovy est influencé syntaxiquement par Java mais plus sémantiquement influencé par des langages comme Ruby.
Scala est influencé syntaxiquement par les deux Ruby et Java. Il est plus sémantiquement influencé par Java, SML, Haskell et un langage OO très appelé) gBeta.
Groovy a une répartition multiple "accidentelle" en raison de la façon dont il gère la surcharge Java.
Scala est une distribution unique uniquement, mais a une correspondance de modèle inspirée de SML pour traiter certains des mêmes types de problèmes que la distribution multiple est censée gérer. Cependant, lorsque la répartition multiple ne peut être distribuée que sur le type d'exécution, la correspondance de modèle de Scala peut être distribuée sur les types d'exécution, les valeurs ou les deux. La correspondance de formes comprend également une liaison de variables syntaxiquement agréable. Il est difficile de surestimer à quel point cette seule fonctionnalité rend la programmation dans Scala agréable.
Scala et Groovy prennent en charge une forme d'héritage multiple avec des mixins (bien que Scala les appelle des traits)).
Scala prend en charge à la fois l'application de fonctions partielles et le curry au niveau du langage, Groovy a une méthode "curry" maladroite pour faire des applications de fonctions partielles.
Scala optimise directement la récursivité de la queue. Je ne crois pas que Groovy le fasse. C'est important dans la programmation fonctionnelle mais moins important dans la programmation impérative.
Scala et Groovy sont évalués avec impatience par défaut. Cependant, Scala prend en charge les paramètres d'appel par nom. Groovy ne le fait pas - l'appel par nom doit être émulé avec des fermetures.
Scala a "for comprehensions", une généralisation des listes de compréhension trouvées dans d'autres langages (techniquement ce sont des compréhensions monades plus un peu - quelque part entre le do de Haskell et le LINQ de C #).
Scala n'a aucun concept de champs "statiques", de classes internes, de méthodes, etc. - il utilise à la place des objets singleton. Groovy utilise le concept statique.
Scala n'a pas intégré de sélection d'opérateurs arithmétiques comme Groovy. Dans Scala vous pouvez nommer les méthodes de manière très flexible.
Groovy a l'opérateur elvis pour gérer null. Scala les programmeurs préfèrent utiliser les types Option à l'aide de null, mais il est facile d'écrire un opérateur elvis dans Scala si vous le souhaitez).
Enfin, il y a des mensonges, il y a des putains de mensonges, et puis il y a des repères. Le jeu de benchmarks en langage informatique se classe Scala comme étant sensiblement plus rapide que Groovy (allant de deux à 93 fois plus vite) tout en conservant à peu près la même taille de source. benchmarks .
Je suis sûr qu'il y a beaucoup, beaucoup de différences que je n'ai pas couvertes. Mais j'espère que cela vous donne un Gist.
Y a-t-il une compétition entre eux? Oui, bien sûr, mais pas autant qu'on pourrait le penser. La vraie concurrence de Groovy est JRuby et Jython.
Qui va gagner? Ma boule de cristal est aussi fissurée que n'importe qui d'autre.
scala est censé être un langage hybride oo/fonctionnel et est très bien planifié et conçu. groovy ressemble plus à un ensemble d'améliorations que beaucoup de gens aimeraient utiliser en Java. j'ai regardé de plus près les deux, donc je peux dire :)
aucun d'eux n'est meilleur ou pire que l'autre. groovy est très bon en méta-programmation, scala est très bon dans tout ce qui n'a pas besoin de méta-programmation, donc ... j'ai tendance à utiliser les deux.
Scala a des acteurs, qui facilitent la mise en œuvre de la concurrence. Et les traits qui donnent un véritable héritage multiple de type sécurisé.
Vous avez frappé le clou sur la tête avec le typage statique et dynamique. Les deux font partie de la nouvelle génération de langages dynamiques, avec des fermetures, des expressions lambda, etc. Il y a aussi quelques différences syntaxiques entre les deux, mais fonctionnellement, je ne vois pas de différence énorme entre Groovy et Scala.
Scala implémente les listes un peu différemment; dans Groovy, à peu près tout est une instance de Java.util.List, alors que Scala utilise à la fois des listes et des tableaux primitifs. Groovy a (je pense) une meilleure interpolation de chaînes.
Scala est plus rapide, semble-t-il, mais les gens de Groovy poussent vraiment les performances pour la version 2.0. 1.6 a donné un énorme bond de vitesse sur la série 1.5.
Je ne pense pas que les deux langues "gagneront" vraiment, car elles ciblent deux classes de problèmes différentes. Scala est un langage haute performance très semblable à Java sans avoir à peu près le même niveau de passe-partout que Java. Groovy est pour le prototypage et le développement rapides, où la vitesse est moins importante que le temps prend pour que les programmeurs implémentent le code.
Scala a une courbe d'apprentissage beaucoup plus abrupte que Groovy. Scala a beaucoup plus de support pour la programmation fonctionnelle avec sa correspondance de modèle et sa récursion basée sur la queue, ce qui signifie plus d'outils pour FP pur.
Nous avons largement utilisé Groovy et pouvons affirmer avec confiance qu'il est extrêmement bon dans le développement d'applications Web de qualité production, pas seulement pour le prototypage. Il est très facile à utiliser et permet un développement rapide, à tel point qu'il est difficile de sevrer les développeurs de Groovy pour planifier Java après l'avoir utilisé pendant un certain temps, selon mon expérience.
Je n'ai pas beaucoup utilisé Scala et je ne peux donc pas en dire beaucoup à ce sujet.
Scala a également une compilation dynamica et je l'ai fait en utilisant Twitter eval lib ( https://github.com/Twitter/util ). J'ai conservé scala code dans un fichier plat (sans aucune extension) et en utilisant eval créé scala classe au moment de l'exécution. Je dirais scala est une méta-programmation et a une fonction de complication dynamique