Kann jemand bitte die Hauptunterschiede zwischen Scala, Groovy und Clojure erklären. Ich weiß, dass jede dieser Kompilierungen auf der JVM ausgeführt werden kann, möchte aber einen einfachen Vergleich zwischen ihnen.
Kann jemand bitte die Hauptunterschiede zwischen Scala, Groovy und Clojure erklären. Ich weiß, dass jede dieser Kompilierungen auf der JVM ausgeführt werden kann, möchte aber einen einfachen Vergleich zwischen ihnen.
Antworten:
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, was es für schnelles Prototyping, Skripte und das Erlernen dynamischer Sprachen gut macht, ohne eine neue Syntax lernen zu müssen (vorausgesetzt, Sie kennen Java). Ab Groovy 2.0 wird auch die statische Kompilierung zunehmend unterstützt . Groovy unterstützt Closures und unterstützt das Programmieren in einem etwas funktionalen Stil, obwohl es noch ziemlich weit von der traditionellen Definition der funktionalen Programmierung entfernt ist.
Clojure ist ein Lisp-Dialekt mit einigen erweiterten Funktionen wie Software Transactional Memory . Wenn Sie Lisp mögen und so etwas unter der JVM verwenden möchten, ist Clojure genau das Richtige für Sie. Es ist möglicherweise die funktionalste Sprache, die auf der JVM ausgeführt wird, und sicherlich die bekannteste. Außerdem wird die Unveränderlichkeit stärker betont als bei anderen Lisp-Dialekten, wodurch sie den Enthusiasten funktionaler Sprachen näher kommt.
Scala ist eine vollständig objektorientierte Sprache, mehr als Java, mit einem der fortschrittlichsten Typsysteme, die für Nicht-Forschungssprachen verfügbar sind, und sicherlich dem fortschrittlichsten Typsystem in der JVM. Es kombiniert auch viele Konzepte und Merkmale funktionaler Sprachen, ohne die Objektorientierung zu beeinträchtigen, aber sein Kompromiss bei den Merkmalen der funktionalen Sprache schreckt einige Enthusiasten der letzteren ab.
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 denke, es ist eine Sprache mit begrenztem Nutzen, insbesondere da Jython und JRuby im Vergleich zu den anderen auf dem JVM-Land Fuß fassen.
Clojure, der sogar einige sehr interessante Funktionen außer Acht lässt, hat einen starken Reiz, nur weil es ein Lisp-Dialekt auf JVM ist. Zugegeben, es könnte seine Popularität einschränken, aber ich gehe davon aus, dass es für lange Zeit eine treue Gemeinschaft geben wird.
Scala kann direkt mit Java konkurrieren und in fast allen Aspekten um sein Geld kämpfen. Im Moment kann es natürlich nicht mit der Popularität mithalten, und das Fehlen einer starken Unternehmensunterstützung kann seine Akzeptanz in Unternehmensumgebungen beeinträchtigen. Es ist auch eine viel dynamischere Sprache als Java, im Sinne der Entwicklung der Sprache. Aus der Sicht der Sprache ist das eine gute Sache. Aus der Sicht von Benutzern, die Tausende von Codezeilen schreiben möchten, nicht so.
Als letzte Enthüllung bin ich mit Scala sehr vertraut und kenne nur die anderen beiden.
Scala entwickelte sich aus einer reinen funktionalen Sprache, die als Trichter bekannt ist, und stellt eine Reinraumimplementierung fast aller Java-Syntax dar. Sie unterscheidet sich nur dort, wo eine deutliche Verbesserung erzielt werden könnte oder wo dies die funktionale Natur der Sprache beeinträchtigen würde. Zu diesen Unterschieden gehören Singleton-Objekte anstelle statischer Methoden und Typinferenz.
Ein Großteil davon basierte auf Martin Oderskys früherer Arbeit mit der Pizza- Sprache. Die OO / FP-Integration geht weit über bloße Schließungen hinaus und hat dazu geführt, dass die Sprache als postfunktional beschrieben wird.
Trotzdem ist 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 im Sprachdesign, dass es sehr eng in Java integriert werden sollte.
Groovy geht explizit zwei der größten Kritikpunkte von Java an
Es ist Java vielleicht syntaktisch am nächsten und bietet nicht einige der umfangreicheren Funktionskonstrukte, die Clojure und Scala bieten, aber dennoch eine deutliche evolutionäre Verbesserung - insbesondere für das Schreiben von Programmen im Skriptstil.
Groovy hat die stärkste kommerzielle Unterstützung der drei Sprachen, hauptsächlich über springsource.
Clojure ist eine funktionale Sprache in der LISP-Familie und wird auch dynamisch typisiert.
Funktionen wie die STM-Unterstützung bieten einige der besten sofort einsatzbereiten Parallelitätsunterstützungen, während Scala eine Bibliothek eines Drittanbieters wie Akka benötigt , um diese zu duplizieren.
Syntaktisch ist es auch die am weitesten vom typischen Java-Code entfernte der drei Sprachen.
Ich muss auch offenlegen, dass ich Scala am besten kenne :)
Ich hatte nie Zeit, mit Clojure zu spielen. Aber für Scala vs Groovy sind dies 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 2003 das Buch" Programming in Scala "von Martin Odersky, Lex Spoon & Bill Venners gezeigt hätte Ich hätte Groovy wahrscheinlich nie erschaffen. "
Sie können die ganze Geschichte hier lesen
Sie können unterschieden werden, woher sie kommen oder welche Entwickler sie hauptsächlich ansprechen.
Groovy ist ein bisschen wie eine Skriptversion von Java. Langjährige Java-Programmierer fühlen sich zu Hause, wenn sie agile Anwendungen erstellen, die von großen Architekturen unterstützt werden. Groovy on Grails ähnelt, wie der Name schon sagt, dem Rails-Framework. Für Leute, die sich nicht ständig mit Javas Ausführlichkeit beschäftigen wollen.
Scala ist eine objektorientierte und funktionale Programmiersprache, und Ruby- oder Python-Programmierer fühlen sich dieser möglicherweise näher. Es verwendet eine Menge allgemeiner guter Ideen, die in diesen Programmiersprachen zu finden sind.
Clojure ist ein Dialekt der Programmiersprache Lisp, sodass sich Lisp-, Scheme- oder Haskell-Entwickler bei der Entwicklung mit dieser Sprache möglicherweise zu Hause fühlen.
Ich lese das Buch "Groovy Recipes: Schmieren der Räder von 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 die erforderlichen Bibliotheken einbeziehe. Bisher scheinen Experimente dies zu bestätigen.
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, eine Java-Anwendung mit Skripten zu versehen, ist Scala wahrscheinlich keine gute Wahl, da es keine einfache Möglichkeit gibt, sie von Java aus zu bewerten , während Groovy für diesen Zweck besonders geeignet ist.
eval
erforderlich.