Ils sont à la fois les langages orientés objets pour la JVM qui ont des lambdas et de fermetures et d'interagir avec Java. Autre que cela, ils sont extrêmement différents.
Groovy est une "dynamique" de la langue non seulement dans le sens qu'il est dynamiquement typé, mais qu'il prend en charge dynamique de la méta-programmation.
Scala est un "statique" de la langue en ce qu'elle est statiquement typé et n'a quasiment aucune dynamique de la méta-programmation au-delà de l'ennui, des choses que vous pouvez faire en Java. Remarque, Scala système de type statique est beaucoup plus uniforme et plus complexe que de Java.
Groovy est syntaxiquement influencé par Java, mais sémantiquement plus influencée par les langues comme le Rubis.
Scala est syntaxiquement influencé par les deux Ruby et Java. Il est sémantiquement plus influencée par Java, SML, Haskell, et une très obscur langage OO appelé gBeta.
Groovy a "accidentelle" de la répartition multiple en raison de la façon dont il gère Java surcharge.
Scala est la seule et unique livraison seulement, mais a SML inspiré de la correspondance de motif pour faire face à certaines des mêmes types de problèmes que de multiples expédition est destinée à gérer. Toutefois, lorsque plusieurs d'expédition ne peut l'expédition de l'exécution le type, la Scala, à la correspondance de motif peut envoyer de l'exécution de types, les valeurs, ou les deux. La correspondance de motif comprend aussi un point de vue syntaxique agréable variable de liaison. Il est difficile de surcharge quoi de plus agréable que cette seule caractéristique à elle seule rend la programmation Scala.
Les deux Scala et Groovy soutenir une forme d'héritage multiple avec mixin (bien que Scala appelle les caractéristiques).
Scala prend en charge partielle de la fonction de l'application et de lancer au niveau du langage, Groovy a un maladroit "curry" méthode pour faire fonction partielle de l'application.
Scala direct récursion sur la queue de l'optimisation. Je ne crois pas que Groovy. Ce qui est important dans la programmation fonctionnelle, mais de moins en moins important dans la programmation impérative.
Les deux Scala et Groovy sont très évaluée par défaut. Cependant, Scala soutient en appel par le nom des paramètres. Groovy n'a pas d'appel par nom doit être émulé avec des fermetures.
Scala a "pour les interprétations de la" la, généralisation des interprétations de la liste trouvée dans d'autres langues (techniquement, ce sont des interprétations de la monade, plus un peu, quelque part entre Haskell faire et C#LINQ).
Scala a pas la notion de "statique" des champs, à l'intérieur des classes, des méthodes, etc - il utilise les objets singleton à la place. Groovy utilise le concept statique.
Scala n'a pas intégré dans la sélection des opérateurs arithmétiques dans tout le chemin que Groovy. En Scala, vous pouvez nommer les méthodes de manière très flexible.
Groovy a la elvis opérateur pour gérer la valeur null. Scala programmeurs préfèrent utiliser des types d'Option pour utiliser la valeur null, mais il est facile d'écrire un elvis opérateur en Scala si vous le souhaitez.
Enfin, il y a des mensonges, il y a des putain de mensonges, et puis il y a des repères. La langue de l'ordinateur de repères jeu rangs Scala entre considérablement plus rapide que Groovy (allant de deux à 93 fois plus rapide), tout en conservant à peu près la même taille source. des repères.
Je suis sûr qu'il ya beaucoup, beaucoup de différences que je n'ai pas couvert. Mais j'espère que cela vous donne une idée.
Est-il une concurrence entre eux? Oui, bien sûr, mais pas autant que vous pourriez le penser. Groovy est réelle concurrence est JRuby et Jython.
Qui va gagner? Ma boule de cristal est aussi craqué comme n'importe qui d'autre.