it-swarm.com.de

Scala vs. Groovy vs. Clojure

Kann jemand bitte die Hauptunterschiede zwischen Scala, Groovy und Clojure erklären. Ich kenne jede dieser Kompilierungen, die auf der JVM ausgeführt werden sollen, aber ich möchte einen einfachen Vergleich zwischen ihnen.

676
James Fassett

Groovy ist eine dynamisch typisierte Sprache, deren Syntax Java sehr nahe kommt, mit einer Reihe von Syntaxverbesserungen, die leichteren Code und weniger Boilerplate ermöglichen. Es kann sowohl einen Interpreter durchlaufen als auch kompiliert werden. Dies erleichtert das schnelle Erstellen von Prototypen, Skripten und das Erlernen dynamischer Sprachen, ohne eine neue Syntax erlernen zu müssen (vorausgesetzt, Sie kennen Java). Ab Groovy 2.0 wird auch statische Kompilierung zunehmend unterstützt. Groovy unterstützt Closures und unterstützt die Programmierung in einem etwas funktionalen Stil, obwohl es immer noch ziemlich weit von der traditionellen Definition der funktionalen Programmierung entfernt ist.

Clojure ist ein Dialekt von LISP mit einigen erweiterten Funktionen wie Software Transactional Memory . Wenn Sie LISP mögen und etwas Ähnliches unter der JVM verwenden möchten, ist Clojure das Richtige für Sie. Es ist wahrscheinlich die funktionale Sprache , die auf der JVM ausgeführt wird, und sicherlich die berühmteste. Darüber hinaus wird nveränderlichkeit stärker betont als bei anderen LISP-Dialekten, wodurch das Herz funktionaler Sprachbegeisterter näher rückt.

Scala ist eine vollständig objektorientierte Sprache, mehr als Java, mit einem der fortschrittlichsten Typsysteme , die für Sprachen ohne Forschungskenntnisse verfügbar sind, und mit Sicherheit das fortschrittlichste Typsystem die JVM. Es kombiniert auch viele Konzepte und Merkmale funktionaler Sprachen, ohne die Objektorientierung zu beeinträchtigen, aber sein Kompromiss bei den Merkmalen funktionaler Sprachen stört einige Enthusiasten der letzteren.

Groovy hat eine gute Akzeptanz und ein beliebtes Webframework in Grails. Es unterstützt auch das Gradle-Build-System, das zu einer beliebten Alternative zu Maven wird. Ich persönlich halte es für eine Sprache mit begrenztem Nutzen, zumal Jython und JRuby im Vergleich zu den anderen auf dem JVM-Land Fuß fassen.

Clojure, das sogar einige sehr interessante Features herausstellt, hat einen starken Reiz, nur weil es ein LISP-Dialekt für JVM ist. Es könnte seine Popularität einschränken, aber ich gehe davon aus, dass es für eine lange Zeit eine treue Gemeinschaft geben wird.

Scala kann direkt mit Java konkurrieren und es in fast allen Aspekten auf die Probe stellen. Es kann im Moment natürlich nicht an Popularität gewinnen, und das Fehlen einer starken Unternehmensunterstützung kann seine Akzeptanz in Unternehmensumgebungen beeinträchtigen. Es ist auch eine viel dynamischere Sprache als Java, in dem Sinne, wie sich die Sprache entwickelt. Aus der Sicht der Sprache ist das eine gute Sache. Aus der Sicht von Benutzern, die vorhaben, Tausende von Codezeilen zu schreiben, ist dies nicht der Fall.

Letztendlich kenne ich Scala sehr gut und kenne nur die beiden anderen.

873

Scala

Scala ist aus einer reinen funktionalen Sprache entstanden, die als Funnel bekannt ist, und stellt eine Reinraumimplementierung von fast der gesamten Java-Syntax dar, die sich nur dort unterscheidet, wo eine deutliche Verbesserung erzielt werden könnte oder die Funktionalität der gefährdet wäre Sprache. Solche Unterschiede umfassen Singleton-Objekte anstelle von statischen Methoden und Typinferenz.

Ein Großteil davon basierte auf Martin Oderskys früherer Arbeit mit der Sprache Pizza . Die OO/FP-Integration geht weit über bloße Abschlüsse hinaus und hat dazu geführt, dass die Sprache als postfunktional beschrieben wurde.

Trotzdem kommt es Java in vielerlei Hinsicht am nächsten. Hauptsächlich aufgrund einer Kombination aus OO Unterstützung und statischer Typisierung, aber auch aufgrund eines expliziten Ziels in das Sprachdesign, das es sehr eng mit Java integrieren sollte.

Groovy

Groovy geht explizit auf zwei der größten Kritikpunkte Javas ein

  • dynamisch getippt werden, wodurch viel Kesselblech und
  • schließen der Sprache.

Es ist vielleicht syntaktisch Java am nächsten und bietet nicht die umfangreicheren Funktionskonstrukte, die Clojure und Scala=) bieten, aber immer noch Dies bietet eine deutliche Verbesserung der Entwicklung - insbesondere für das Schreiben von Programmen im Stil von Skripten.

Groovy hat den stärksten kommerziellen Rückhalt der drei Sprachen, hauptsächlich über Springsource.

Clojure

Clojure ist eine funktionale Sprache in der LISP-Familie und wird auch dynamisch geschrieben.

Funktionen wie die STM-Unterstützung bieten die beste sofort einsatzbereite Parallelitätsunterstützung, wohingegen Scala erfordert, dass eine Drittanbieter-Bibliothek wie Akka dupliziert wird diese.

Syntaktisch ist es auch die am weitesten entfernte der drei Sprachen aus dem typischen Java Code.

Ich muss auch offenlegen, dass ich am meisten mit Scala :) vertraut bin

219
Kevin Wright

Ich hatte nie Zeit, mit Clojure zu spielen. Aber für scala vs groovy, das sind Worte von James Strachan - Groovy Schöpfer

"Obwohl mein Tipp für den langfristigen Ersatz von javac Scala ist. Ich bin sehr beeindruckt davon! Ich kann ehrlich sagen, wenn mir jemand die Programmierung in Scala Buch von Martin Odersky gezeigt hätte, Lex Spoon & Bill Venners im Jahr 2003, ich hätte Groovy wahrscheinlich nie geschaffen. "

Sie können die ganze Geschichte lesen hier

68
Thai Tran

Man kann unterscheiden, woher sie kommen oder auf welche Entwickler sie sich hauptsächlich konzentrieren.

Groovy ist ein bisschen wie eine Skriptversion von Java. Lange Zeit Java fühlen sich Programmierer zu Hause, wenn sie agile Anwendungen erstellen, die von großen Architekturen unterstützt werden. Groovy on Grails ist, wie der Name schon sagt, dem Rails Framework ähnlich. Für Leute, die sich nicht die ganze Zeit mit Javas Ausführlichkeit herumschlagen wollen.

Scala ist eine objektorientierte und funktionale Programmiersprache und Ruby oder Python Programmierer fühlen sich dieser möglicherweise näher. In diesen Programmiersprachen stecken ziemlich viele gute Ideen.

Clojure ist ein Dialekt der LISP-Programmiersprache, sodass sich LISP-, Scheme- oder Haskell-Entwickler bei der Entwicklung mit dieser Sprache zu Hause fühlen können.

30
Mehmet Duran

Ich lese das Pragmatic Programmers-Buch "Groovy Recipes: Greasing the wheels of Java" von Scott Davis, Copyright 2008, das im April desselben Jahres gedruckt wurde.

Es ist etwas veraltet, aber das Buch macht deutlich, dass Groovy buchstäblich eine Erweiterung von Java ist. Ich kann Java Code schreiben, der genau wie Java funktioniert, und die Datei * .groovy umbenennen, und es funktioniert einwandfrei. Laut dem Buch ist das Gegenteil der Fall, wenn Ich schließe die erforderlichen Bibliotheken ein. Bisher scheinen Experimente dies zu belegen.

8
Jim Collings

Natürlich ist die Syntax völlig anders (Groovy ist Java am nächsten), aber ich nehme an, das ist nicht das, wonach Sie fragen.

Wenn Sie daran interessiert sind, mit ihnen ein Skript für eine Java) - Anwendung zu erstellen, ist Scala wahrscheinlich keine gute Wahl, da es gibt ) keine einfache Möglichkeit, es von Java aus auszuwerten , wohingegen Groovy für diesen Zweck besonders geeignet ist.

4
Thilo