Domanda Scala vs Groovy vs. Clojure [chiuso]


Qualcuno può spiegare le principali differenze tra Scala, Groovy e Clojure. Conosco ciascuna di queste compilazioni per funzionare sulla JVM, ma mi piacerebbe un semplice confronto tra di loro.


676
2017-08-22 00:08


origine


risposte:


Groovy è un linguaggio tipizzato dinamicamente, la cui sintassi è molto simile a Java, con una serie di miglioramenti della sintassi che consentono un codice più leggero e meno codice. Può essere eseguito tramite un interprete e compilato, il che lo rende utile per la prototipazione rapida, gli script e l'apprendimento di linguaggi dinamici senza dover imparare una nuova sintassi (presumendo che tu conosca Java). A partire da Groovy 2.0, ha anche un crescente supporto per compilazione statica. Groovy supporta le chiusure e supporta la programmazione in uno stile un po 'funzionale, sebbene sia ancora abbastanza lontano dalla definizione tradizionale di programmazione funzionale.

Clojure è un dialetto di Lisp con alcune funzionalità avanzate come Memoria transazionale del software. Se ti piace Lisp e vorresti usare qualcosa di simile sotto la JVM, Clojure è per te. Probabilmente è il più linguaggio funzionale in esecuzione sulla JVM, e sicuramente la più famosa. Inoltre, ha un'enfasi maggiore su immutabilità rispetto ad altri dialoghi Lisp, che lo avvicinano al cuore degli appassionati di lingue funzionali.

Scala è un linguaggio completamente orientato agli oggetti, più che Java, con uno dei più avanzati sistemi di tipo disponibile su linguaggi non di ricerca e certamente il sistema di tipi più avanzato sulla JVM. Combina anche molti concetti e caratteristiche dei linguaggi funzionali, senza compromettere l'orientamento all'oggetto, ma il suo compromesso sulle caratteristiche del linguaggio funzionale rimanda alcuni appassionati di quest'ultimo.

Groovy ha una buona accettazione e una struttura web popolare in Grails. Alimenta anche il sistema di build Gradle, che sta diventando un'alternativa popolare a Maven. Personalmente ritengo che si tratti di un linguaggio con utilità limitata, in particolare quando Jython e JRuby iniziano a fare breccia nella JVM-land, rispetto alle altre.

Clojure, anche scontando alcune caratteristiche molto interessanti, ha un forte appeal solo essendo un dialetto Lisp su JVM. Potrebbe limitare la sua popolarità, concessa, ma mi aspetto che ci sia una comunità fedele attorno per un lungo periodo.

Scala può competere direttamente con Java e dargli una corsa per i suoi soldi su quasi tutti gli aspetti. Al momento, naturalmente, non può competere in popolarità, e la mancanza di un forte sostegno aziendale può ostacolare la sua accettazione negli ambienti aziendali. È anche un linguaggio molto più dinamico di Java, nel senso di come si evolve il linguaggio. Dal punto di vista della lingua, questa è una buona cosa. Dal punto di vista degli utenti che prevedono di avere migliaia di righe di codice scritte in esso, non è così.

Come divulgazione finale, conosco bene Scala e conosco solo gli altri due.


874
2017-08-22 02:39



Scala

Scala si è evoluta da un puro linguaggio funzionale noto come Imbuto e rappresenta un'implementazione in camera bianca di quasi tutta la sintassi di Java, differendo solo dove è possibile apportare un miglioramento evidente o dove comprometterebbe la natura funzionale della lingua. Tali differenze includono oggetti singleton invece di metodi statici e inferenza di tipo.

Molto di questo era basato sul lavoro precedente di Martin Odersky con il Pizza linguaggio. L'integrazione OO / FP va ben oltre le semplici chiusure e ha portato alla descrizione del linguaggio come post-funzionale.

Nonostante questo, è il più vicino a Java in molti modi. Principalmente a causa di una combinazione di supporto OO e tipizzazione statica, ma anche a causa di un obiettivo esplicito nella progettazione del linguaggio che dovrebbe integrarsi molto strettamente con Java.

Groovy

Groovy affronta esplicitamente due delle più grandi critiche di Java di

  • essendo digitato in modo dinamico, che rimuove un sacco di caratteri e
  • aggiungendo chiusure alla lingua

Forse è sintatticamente più vicino a Java, che non offre alcuni dei più ricchi costrutti funzionali forniti da Clojure e Scala, ma offre comunque un deciso miglioramento evolutivo, specialmente per la scrittura di programmi script-syle.

Groovy ha il più forte supporto commerciale delle tre lingue, principalmente tramite fonte d'acqua.

Clojure

Clojure è un linguaggio funzionale nella famiglia LISP, è anche digitato in modo dinamico.

Funzionalità come il supporto STM offrono alcuni dei migliori supporti di concorrenza pronti all'uso, mentre Scala richiede una libreria di terze parti come Akka duplicare questo.

Sintatticamente, è anche il più lontano dei tre linguaggi dal tipico codice Java.

Devo anche rivelare che sono più familiarizzato con Scala :)


219
2017-09-16 22:01



Non ho mai avuto il tempo di giocare con il clojure. Ma per scala vs groovy, si tratta di parole di James Strachan - creatore di Groovy

"Anche se il mio consiglio per la sostituzione a lungo termine di javac è Scala.   Sono molto impressionato da questo! Posso dire onestamente se qualcuno mi avesse mostrato   il libro Programming in Scala di Martin Odersky, Lex Spoon & Bill   Venners nel 2003 probabilmente non avrei mai creato Groovy. "

Puoi leggere l'intera storia Qui


68
2018-04-03 13:59



Possono essere differenziati da dove provengono o da quali sviluppatori si rivolgono principalmente.

Groovy è un po 'come la versione di scripting di Java. I programmatori Java di lunga data si sentono a casa quando costruiscono applicazioni agili supportate da architetture di grandi dimensioni. Groovy on Grails è, come suggerisce il nome simile al framework Rails. Per le persone che non vogliono preoccuparsi della verbosità di Java tutto il tempo.

Scala è un linguaggio di programmazione orientato agli oggetti e funzionale e i programmatori di Ruby o Python possono sentirsi più vicini a questo. Impiega molte buone idee comuni trovate in questi linguaggi di programmazione.

Clojure è un dialetto del linguaggio di programmazione Lisp in modo che gli sviluppatori Lisp, Scheme o Haskell possano sentirsi a casa durante lo sviluppo con questo linguaggio.


30
2017-11-18 19:18



Sto leggendo il libro di Pragmatic Programmers "Groovy Recipes: Greasing the wheels of Java" di Scott Davis, Copyright 2008 e stampato nell'aprile dello stesso anno.

È un po 'obsoleto, ma il libro chiarisce che Groovy è letteralmente un'estensione di Java. Posso scrivere codice Java che funziona esattamente come Java e rinominare il file * .groovy e funziona perfettamente. Secondo il libro, il contrario è vero se includo le librerie richieste. Finora, la sperimentazione sembra confermarlo.


8
2017-08-22 00:33



Ovviamente, la sintassi è completamente diversa (Groovy è il più vicino a Java), ma suppongo che non sia quello che stai chiedendo.

Se sei interessato a usarli per creare script su un'applicazione Java, Scala probabilmente non è una buona scelta, in quanto esiste nessun modo semplice per valutare da Java, mentre Groovy è particolarmente adatto per questo scopo.


4