Qualcuno può spiegare le principali differenze tra Scala, Groovy e Clojure. Conosco ognuna di queste compilazioni da eseguire sulla JVM ma vorrei un semplice confronto tra di loro.
Qualcuno può spiegare le principali differenze tra Scala, Groovy e Clojure. Conosco ognuna di queste compilazioni da eseguire sulla JVM ma vorrei un semplice confronto tra di loro.
Risposte:
Groovy è un linguaggio tipizzato in modo dinamico, la cui sintassi è molto simile a Java, con una serie di miglioramenti alla sintassi che consentono un codice più leggero e meno plate. Può funzionare attraverso un interprete oltre ad essere compilato, il che lo rende utile per la prototipazione rapida, gli script e l'apprendimento di linguaggi dinamici senza dover imparare una nuova sintassi (supponendo che tu sappia Java). A partire da Groovy 2.0, ha anche un supporto crescente per la 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 la memoria transazionale del software . Se ti piace Lisp e desideri utilizzare qualcosa di simile nell'ambito della JVM, Clojure è per te. È forse il linguaggio più funzionale in esecuzione su JVM, e sicuramente il più famoso. Inoltre, ha un'enfasi maggiore sull'immutabilità rispetto agli altri dialetti Lisp, che lo avvicina al cuore degli appassionati di linguaggio funzionale.
Scala è un linguaggio completamente orientato agli oggetti, più che Java, con uno dei sistemi di tipi più avanzati disponibili su linguaggi non di ricerca, e sicuramente il sistema di tipi più avanzato sulla JVM. Combina anche molti concetti e caratteristiche dei linguaggi funzionali, senza compromettere l'orientamento agli oggetti, ma il suo compromesso sulle caratteristiche del linguaggio funzionale rimanda alcuni appassionati di questi ultimi.
Groovy ha una buona accettazione e un popolare framework web in Grails. Alimenta anche il sistema di costruzione Gradle, che sta diventando una popolare alternativa a Maven. Personalmente penso che sia un linguaggio con utilità limitata, in particolare quando Jython e JRuby iniziano a farsi strada nella terra della JVM, rispetto agli altri.
Clojure, pur scontando alcune caratteristiche molto interessanti, ha un forte richiamo solo essendo un dialetto Lisp su JVM. Potrebbe limitare la sua popolarità, scontato, ma mi aspetto che avrà una comunità fedele intorno per molto tempo.
Scala può competere direttamente con Java e dargli una corsa per i suoi soldi su quasi tutti gli aspetti. Non può competere in popolarità al momento, ovviamente, 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 il linguaggio si evolve. Dal punto di vista della lingua, questa è una buona cosa. Dal punto di vista degli utenti che intendono avere migliaia di righe di codice scritte al suo interno, non così.
Come ultima rivelazione, conosco molto bene Scala e conosco solo gli altri due.
Scala si è evoluto da un linguaggio funzionale puro noto come Funnel e rappresenta un'implementazione in clean room di quasi tutta la sintassi di Java, differendo solo dove si potrebbe apportare un chiaro miglioramento o dove comprometterebbe la natura funzionale del linguaggio. Tali differenze includono oggetti singleton invece di metodi statici e inferenza di tipo.
Gran parte di questo era basato sul precedente lavoro di Martin Odersky con il linguaggio della pizza . L'integrazione OO / FP va ben oltre le semplici chiusure e ha portato al linguaggio descritto come post-funzionale.
Nonostante ciò, è 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 affronta esplicitamente due delle maggiori critiche di Java di
È forse sintatticamente più vicino a Java, non offre alcuni dei costrutti funzionali più ricchi forniti da Clojure e Scala, ma offre comunque un netto miglioramento evolutivo, specialmente per la scrittura di programmi di sceneggiatura.
Groovy ha il più forte supporto commerciale delle tre lingue, principalmente via fonte.
Clojure è un linguaggio funzionale nella famiglia LISP, inoltre è tipizzato 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 per duplicare questo.
Sintatticamente, è anche la più lontana delle tre lingue dal tipico codice Java.
Devo anche rivelare di conoscere meglio Scala :)
Non ho mai avuto il tempo di giocare con il clojure. Ma per scala vs groovy, queste sono le parole di James Strachan - creatore di Groovy
"Anche se il mio consiglio per la sostituzione a lungo termine di javac è Scala. Ne sono rimasto molto colpito! Posso dire onestamente se qualcuno mi avesse mostrato il libro Programmazione in Scala di Martin Odersky, Lex Spoon e Bill Venners nel 2003 I probabilmente non avrebbe mai creato Groovy. "
Puoi leggere l'intera storia qui
Possono essere differenziati da dove provengono o quali sviluppatori stanno prendendo di mira principalmente.
Groovy è un po 'come la versione di scripting di Java. I programmatori Java da molto tempo si sentono a casa durante la creazione di applicazioni agili supportate da grandi architetture. Groovy on Grails è, come suggerisce il nome simile al framework Rails. Per le persone che non vogliono preoccuparsi sempre della verbosità di Java.
Scala è un linguaggio di programmazione orientato agli oggetti e funzionale e i programmatori Ruby o Python potrebbero sentirsi più vicini a questo. Impiega molte buone idee comuni che si trovano in questi linguaggi di programmazione.
Clojure è un dialetto del linguaggio di programmazione Lisp, quindi gli sviluppatori Lisp, Scheme o Haskell possono sentirsi a casa durante lo sviluppo con questo linguaggio.
Sto leggendo il libro dei programmatori pragmatici "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 benissimo. Secondo il libro, è vero il contrario se includo le librerie necessarie. Finora, la sperimentazione sembra confermarlo.
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 eseguire lo script di un'applicazione Java, Scala non è probabilmente una buona scelta, in quanto non esiste un modo semplice per valutarlo da Java, mentre Groovy è particolarmente adatto a tale scopo.
eval
richiesto.