Quelles sont les principales différences entre Scala et Groovy?

Sur la surface, Groovy et Scala se ressemblent beaucoup, mis à part le fait que Scala soit statiquement typé et Groovy dynamic.

  • Quelles sont les autres différences clés et les avantages de chacun par rapport à l’autre?
  • Dans quelle mesure sont-ils similaires?
  • Y a-t-il concurrence entre les deux?
    • Si oui, qui va gagner à long terme?

Ce sont tous deux des langages orientés object pour la JVM qui ont des lambdas et des fermetures et qui interagissent avec Java. A part ça, ils sont extrêmement différents.

Groovy est un langage “dynamic”, non seulement dans le sens où il est typé dynamicment, mais aussi dans la mesure où il prend en charge la méta-programmation dynamic.

Scala est un langage “statique” dans la mesure où il est statiquement typé et ne possède pratiquement aucune méta-programmation dynamic au-delà des trucs difficiles que vous pouvez faire en Java. Notez que le système de type statique de Scala est sensiblement plus uniforme et sophistiqué que celui de Java.

Groovy est influencé syntaxiquement par Java mais plus sémantiquement influencé par des langages tels que Ruby.

Scala est influencée syntaxiquement par Ruby et Java. Il est influencé sémantiquement davantage par Java, SML, Haskell et un langage OO très obscur appelé gBeta.

Groovy a une répartition “accidentelle” en raison de la façon dont il gère la surcharge Java.

Scala est à diffusion unique uniquement, mais SML a inspiré la correspondance de modèles pour traiter certains des problèmes que la répartition multiple est censée gérer. Cependant, lorsque plusieurs envois ne peuvent être dissortingbués que sur le type à l’exécution, la correspondance de modèle de Scala peut être répartie sur les types d’exécution, les valeurs ou les deux. La correspondance de motif comprend également une liaison de variables agréable du sharepoint vue syntaxique. Il est difficile de souligner à quel point cette seule fonctionnalité rend la programmation à Scala agréable.

Scala et Groovy supportent tous deux une forme d’inheritance multiple avec les mixins (bien que Scala les appelle des traits).

Scala supporte à la fois l’application de fonctions partielles et le curry au niveau du langage, Groovy a une méthode de curry maladroite pour faire des applications de fonctions partielles.

Scala effectue une optimisation de la récursion directe de la queue. Je ne crois pas que Groovy le fasse. C’est important dans la functional programming mais moins important dans la programmation impérative.

Scala et Groovy sont tous deux évalués avec passion par défaut. Cependant, Scala prend en charge les parameters par nom. Groovy ne le fait pas – call-by-name doit être émulé avec des fermetures.

Scala a “pour des compréhensions”, une généralisation des compréhensions de listes trouvées dans d’autres langages (techniquement, ce sont des compréhensions monad plus un peu – quelque part entre le do de Haskell et le LINQ de C #).

Scala n’a pas de concept de champs “statiques”, de classes internes, de méthodes, etc. – elle utilise plutôt des objects singleton. Groovy utilise le concept statique.

Scala n’a pas intégré la sélection des opérateurs arithmétiques de la même manière que Groovy. Dans Scala, vous pouvez nommer les méthodes de manière très flexible.

Groovy a l’opérateur elvis pour gérer les valeurs nulles. Les programmeurs Scala préfèrent utiliser les types Option pour utiliser 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 mensonges, et il y a des repères. Le jeu de tests de langage informatique 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 aperçu.

Y a-t-il une concurrence entre eux? Oui, bien sûr, mais pas autant que vous ne le pensez. La véritable compétition de Groovy est JRuby et Jython.

Qui va gagner? Ma boule de cristal est aussi craquelée que n’importe qui d’autre.

scala se veut 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 pour tout ce qui ne nécessite pas de méta-programmation, donc … j’ai tendance à utiliser les deux.

Scala a des acteurs, ce qui rend la mise en œuvre beaucoup plus facile. Et Traits qui donnent un inheritance multiple, typeafe.

Vous avez frappé le clou avec le typage statique et dynamic. Les deux font partie de la nouvelle génération de langages dynamics, avec des fermetures, des expressions lambda, etc. Il y a une poignée de différences syntaxiques entre les deux, mais fonctionnellement, je ne vois pas de grande différence 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 des 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 fait un énorme bond de vitesse sur la série 1.5.

Je ne pense pas que les deux langues vont vraiment «gagner», car elles ciblent deux classes de problèmes différentes. Scala est un langage très performant, très Java, sans avoir le même niveau de standard que Java. Groovy est destiné au prototypage et au développement rapides, où la vitesse est moins importante que le temps nécessaire aux programmeurs pour implémenter le code.

Nous avons largement utilisé Groovy et pouvons affirmer avec certitude qu’il est extrêmement efficace pour développer des applications Web de qualité de production, et pas seulement pour le prototypage. Il est très facile à utiliser et permet un développement rapide, à tel point qu’il est difficile de se passer des 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 grand chose.

Scala a une courbe d’apprentissage beaucoup plus raide que Groovy. Scala a beaucoup plus de soutien pour la functional programming avec son appariement de motifs et sa récursivité basée sur la queue, ce qui signifie plus d’outils pour la FP pure.

Scala a également compilé dynamica et je l’ai fait en utilisant twitter eval lib ( https://github.com/twitter/util ). J’ai conservé le code scala dans un fichier plat (sans aucune extension) et en utilisant la classe Scala créée au moment de l’exécution. Je dirais que Scala est méta-programmation et a la caractéristique de la complication dynamic