web-dev-qa-db-fra.com

Scala vs. Groovy vs. Clojure

Quelqu'un peut-il s'il vous plaît expliquer les principales différences entre Scala, Groovy et Clojure. Je connais chacune de ces compilations pour fonctionner sur la machine virtuelle, mais j'aimerais une comparaison simple entre elles.

676
James Fassett

Groovy est un langage typé dynamiquement, dont la syntaxe est très proche de celle de Java, avec un certain nombre d'améliorations de la syntaxe permettant un code plus clair et un passe-passe moins dur. Il peut être utilisé aussi bien par un interpréteur que par un compilateur, ce qui le rend idéal pour le prototypage rapide, les scripts et l'apprentissage de langages dynamiques sans avoir à apprendre une nouvelle syntaxe (en supposant que vous connaissiez Java). Depuis Groovy 2.0, il prend également en charge de plus en plus compilation statique . Groovy prend en charge les fermetures et prend en charge la programmation dans un style quelque peu fonctionnel, bien que cela reste encore assez éloigné de la définition traditionnelle de la programmation fonctionnelle.

Clojure est un dialecte de LISP avec quelques fonctionnalités avancées telles que Software Transactional Memory . Si vous aimez LISP et souhaitez utiliser quelque chose comme cela dans la JVM, Clojure est fait pour vous. C'est peut-être le plus langage fonctionnel fonctionnant sur la JVM, et certainement le plus célèbre. En outre, il met davantage l'accent sur immuabilité que les autres dialectes du LISP, ce qui le rapproche du cœur des passionnés de langage fonctionnel.

Scala est un langage entièrement orienté objet, bien plus que Java, avec l'un des systèmes les plus avancés types disponible sur des langages autres que ceux de recherche, et certainement le système de types le plus avancé sur la JVM. Il combine également de nombreux concepts et fonctionnalités de langages fonctionnels, sans compromettre l’orientation des objets, mais son compromis sur les caractéristiques des langages fonctionnels rebute certains passionnés de ces derniers.

Groovy a une bonne acceptation et un framework web populaire dans Grails. Il alimente également le système de construction Gradle, qui devient une alternative populaire à Maven. Personnellement, je pense que c'est un langage avec une utilité limitée, en particulier lorsque Jython et JRuby commencent à percer sur la JVM-land, comparés aux autres.

Clojure, même en faisant abstraction de certaines fonctionnalités très intéressantes, a un attrait certain en tant que dialecte LISP sur JVM. Cela pourrait limiter sa popularité, certes, mais je m'attends à ce qu'il ait une communauté fidèle autour de lui pendant longtemps.

Scala peut rivaliser directement avec Java et lui donner son argent sur presque tous les aspects. Bien sûr, il ne peut rivaliser en popularité pour le moment, et l’absence d’un soutien solide de la part de l’entreprise risque de nuire à son acceptation dans les environnements d’entreprise. C'est aussi un langage beaucoup plus dynamique que Java, dans le sens où le langage évolue. Du point de vue de la langue, c'est une bonne chose. Du point de vue des utilisateurs qui prévoient d’écrire des milliers de lignes de code, ce n’est pas le cas.

En conclusion, je connais très bien Scala et je ne connais que les deux autres.

873
Daniel C. Sobral

Scala

Scala est né d'un langage fonctionnel pur appelé Funnel et représente une implémentation en salle blanche de la quasi-totalité de la syntaxe de Java, qui ne diffère que par une nette amélioration ou par une éventuelle amélioration de la nature fonctionnelle de la syntaxe. la langue. De telles différences incluent les objets singleton à la place des méthodes statiques et l'inférence de type.

Cela reposait en grande partie sur les travaux antérieurs de Martin Odersky avec le langage Pizza . L'intégration OO/FP va bien au-delà des simples fermetures et a conduit à décrire le langage comme post-fonctionnel.

Malgré cela, c'est le plus proche de Java à bien des égards. Principalement en raison d'une combinaison de OO prise en charge et de typage statique, mais également en raison d'un objectif explicite de la conception de langage qu'il devrait intégrer très étroitement avec Java.

Sensationnel

Groovy aborde explicitement deux des plus grandes critiques de Java par

  • être typé dynamiquement, ce qui enlève beaucoup de passe-partout et
  • ajouter des fermetures à la langue.

C'est peut-être syntaxiquement le plus proche de Java, n'offrant pas certaines des constructions fonctionnelles les plus riches fournies par Clojure et Scala, mais offrant néanmoins une définition précise. amélioration évolutive - en particulier pour l’écriture de programmes de style script.

Groovy a le support commercial le plus puissant des trois langues, principalement via springsource.

Clojure

Clojure est un langage fonctionnel de la famille LISP, il est également typé de manière dynamique.

Des fonctionnalités telles que la prise en charge STM lui confèrent une des meilleures prise en charge de la simultanéité, alors que Scala nécessite une bibliothèque tierce telle que Akka pour la dupliquer.

Syntaxiquement, c'est aussi le plus éloigné des trois langages du code typique Java.

Je dois aussi révéler que je connais le mieux Scala :)

219
Kevin Wright

Je n'ai jamais eu le temps de jouer avec clojure. Mais pour scala vs groovy, ce sont des mots de James Strachan - créateur Groovy

"Bien que mon conseil pour le remplacement à long terme de javac soit Scala. Je suis vraiment impressionné! Je peux dire honnêtement si quelqu'un m'avait montré la programmation dans Scala livre de Martin Odersky, Lex Spoon & Bill Venners, en 2003, je n’aurais probablement jamais créé Groovy. "

Vous pouvez lire toute l'histoire ici

68
Thai Tran

Ils peuvent être différenciés par leur origine ou par les développeurs qu'ils ciblent principalement.

Groovy est un peu comme la version de script de Java. Long temps Java les programmeurs se sentent à l'aise pour créer des applications agiles reposant sur de grandes architectures. Comme son nom l'indique, Groovy on Grails est similaire au framework Rails. Pour les personnes qui ne veulent pas s'embarrasser de la verbosité de Java tout le temps.

Scala est un langage de programmation fonctionnel et orienté objet. Les programmeurs Ruby ou Python peuvent se sentir plus proches de celui-ci. Il utilise beaucoup de bonnes idées communes trouvées dans ces langages de programmation.

Clojure est un dialecte du langage de programmation LISP afin que les développeurs LISP, Scheme ou Haskell puissent se sentir chez eux lors du développement avec ce langage.

30
Mehmet Duran

Je lis le livre de Pragmatic Programmers "Groovy Recipes: Graisser les roues de Java" de Scott Davis, Copyright 2008 et imprimé en avril de la même année.

C'est un peu dépassé, mais le livre montre clairement que Groovy est littéralement une extension de Java. Je peux écrire Java un code qui fonctionne exactement comme Java et renommer le fichier * .groovy et tout va bien. Selon le livre, l'inverse est vrai si j'inclus les bibliothèques requises. Jusqu'à présent, l'expérimentation semble le confirmer.

8
Jim Collings

Évidemment, la syntaxe est complètement différente (Groovy est le plus proche de Java), mais je suppose que ce n’est pas ce que vous demandez.

Si vous souhaitez les utiliser pour écrire un script dans une application Java, Scala n'est probablement pas un bon choix, car il existe pas de moyen facile d'évaluer à partir de Java, alors que Groovy est particulièrement adapté à cette fin.

4
Thilo