Quelqu'un peut-il m'expliquer les principales différences entre Scala, Groovy et Clojure ? Je sais que chacun d'entre eux est compilé pour fonctionner sur la JVM, mais j'aimerais pouvoir les comparer simplement.
Réponses
Trop de publicités?Groovy est un langage dynamiquement typé, dont la syntaxe est très proche de celle de Java, avec un certain nombre d'améliorations syntaxiques qui permettent d'alléger le code et de réduire le langage passe-partout. Il peut être exécuté par le biais d'un interpréteur tout en étant compilé, ce qui en fait un bon outil pour le prototypage rapide, les scripts et l'apprentissage de langages dynamiques sans avoir à apprendre une nouvelle syntaxe (en supposant que vous connaissez Java). Depuis Groovy 2.0, il prend également en charge les éléments suivants compilation statique . Groovy supporte les fermetures et permet de programmer dans un style quelque peu fonctionnel, bien qu'il soit 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 Mémoire transactionnelle du logiciel . Si vous aimez Lisp et que vous souhaitez utiliser un langage similaire sous la JVM, Clojure est fait pour vous. C'est probablement le plus langage fonctionnel s'exécutant sur la JVM, et certainement le plus célèbre. En outre, il met davantage l'accent sur immuabilité que les autres dialectes Lisp, ce qui le rapproche du cœur des amateurs de langage fonctionnel.
Scala est un langage entièrement orienté objet, plus que Java, avec l'un des langages de programmation les plus avancés. systèmes de type disponible sur les langages non destinés à la recherche, et certainement le système de type le plus avancé sur la JVM. Il combine également de nombreux concepts et caractéristiques des langages fonctionnels, sans compromettre l'orientation objet, mais son compromis sur les caractéristiques des langages fonctionnels a rebuté certains enthousiastes de ces derniers.
Groovy est bien accepté et dispose d'un framework web populaire, Grails. Il alimente également le système de construction Gradle, qui devient une alternative populaire à Maven. Personnellement, je pense que c'est un langage dont l'utilité est limitée par rapport aux autres, notamment parce que Jython et JRuby commencent à faire des percées sur la JVM-land.
Clojure, même sans tenir compte de certaines fonctionnalités très intéressantes, a un fort attrait du simple fait d'être un dialecte Lisp sur JVM. Cela pourrait limiter sa popularité, certes, mais je pense qu'il aura une communauté loyale autour de lui pendant longtemps.
Scala peut concurrencer directement Java et lui donner du fil à retordre dans presque tous les domaines. Il ne peut pas rivaliser en termes de popularité pour le moment, bien sûr, et l'absence d'un soutien fort de la part des entreprises peut entraver son acceptation dans les environnements d'entreprise. Il s'agit également d'un langage beaucoup plus dynamique que Java, en ce qui concerne la façon dont il évolue. Du point de vue du langage, c'est une bonne chose. Du point de vue des utilisateurs qui prévoient d'écrire des milliers de lignes de code dans ce langage, ce n'est pas le cas.
Pour terminer, je tiens à préciser que je suis très familier avec Scala et que je ne connais que les deux autres.
Scala
Scala a évolué à partir d'un langage fonctionnel pur connu sous le nom de Entonnoir et représente une implémentation en salle blanche de la quasi-totalité de la syntaxe de Java, ne différant que là où une amélioration évidente pourrait être apportée ou là où cela compromettrait la nature fonctionnelle du langage. Ces différences incluent les objets singleton au lieu des méthodes statiques, et l'inférence de type.
Une grande partie de ce travail était basée sur les travaux antérieurs de Martin Odersky avec la Pizza le langage. L'intégration OO/FP va bien au-delà des simples fermetures et a conduit à qualifier le langage de post-fonctionnel.
Malgré cela, il est le plus proche de Java à bien des égards. Principalement en raison de la combinaison du support OO et du typage statique, mais aussi en raison d'un objectif explicite dans la conception du langage, à savoir une intégration très étroite avec Java.
Groovy
Groovy s'attaque explicitement à deux des plus grandes critiques de Java en
- étant typés dynamiquement, ce qui élimine beaucoup de passe-partout et de problèmes de sécurité.
- ajouter des fermetures au langage.
C'est peut-être syntaxiquement le plus proche de Java, n'offrant pas certaines des constructions fonctionnelles plus riches que Clojure et Scala, mais offrant tout de même une amélioration évolutive certaine - notamment pour l'écriture de programmes script-syle.
Groovy bénéficie du soutien commercial le plus fort des trois langages, principalement via Springsource.
Clojure
Clojure est un langage fonctionnel de la famille LISP, il est également typé dynamiquement.
Des fonctionnalités telles que la prise en charge de STM lui confèrent l'un des meilleurs supports de concurrence prêts à l'emploi, alors que Scala nécessite une bibliothèque tierce telle que Akka pour dupliquer ceci.
Sur le plan syntaxique, c'est aussi le plus éloigné des trois langages du code Java typique.
Je dois également révéler que je suis plus familier avec Scala :)
Je n'ai jamais eu le temps de jouer avec clojure. Mais pour scala vs groovy, voici les mots de James Strachan - créateur de Groovy
"Bien que mon conseil pour le remplacement à long terme de javac soit Scala. Je suis très impressionné par cette méthode ! Je peux honnêtement dire que si quelqu'un m'avait montré le livre Programming in Scala de Martin Odersky, Lex Spoon et Bill Venners en 2003 Venners en 2003, je n'aurais probablement jamais créé Groovy".
Vous pouvez lire l'article en entier aquí
Ils peuvent être différenciés en fonction de leur provenance ou des développeurs qu'ils ciblent principalement.
Groovy est un peu comme la version script de Java. Les programmeurs Java de longue date se sentent chez eux lorsqu'ils créent des applications agiles soutenues par de grandes architectures. Groovy on Grails est, comme son nom l'indique, similaire au framework Rails. Pour les personnes qui ne veulent pas s'embêter avec la verbosité de Java en permanence.
Scala est un langage de programmation orienté objet et fonctionnel et les programmeurs Ruby ou Python peuvent se sentir plus proches de celui-ci. Il utilise un grand nombre de bonnes idées communes à ces langages de programmation.
Clojure est un dialecte du langage de programmation Lisp, de sorte que les développeurs Lisp, Scheme ou Haskell peuvent se sentir chez eux en développant avec ce langage.
Je suis en train de lire le livre Pragmatic Programmers "Groovy Recipes : Greasing the wheels of Java" par Scott Davis, Copyright 2008 et imprimé en avril de la même année.
Il est un peu dépassé, mais le livre montre clairement que Groovy est littéralement une extension de Java. Je peux écrire du code Java qui fonctionne exactement comme Java et renommer le fichier *.groovy et cela fonctionne bien. Selon le livre, l'inverse est vrai si j'inclus les bibliothèques requises. Jusqu'à présent, l'expérimentation semble confirmer cette affirmation.
- Réponses précédentes
- Plus de réponses