Ich habe mir in letzter Zeit Clojure angesehen und bin auf diesen Beitrag über Stackoverflow gestoßen , der auf einige Projekte hinweist , die bewährten Methoden und insgesamt guten Clojure-Code folgen. Nachdem ich ein paar grundlegende Tutorials gelesen hatte, wollte ich mich mit der Sprache befassen, also habe ich mir einige "echte" Projekte angesehen.
Nachdem ich mir ClojureScript und Compojure (zwei der oben genannten "guten" Projekte) angesehen habe, habe ich das Gefühl, dass Clojure ein Witz ist. Ich verstehe nicht, warum jemand Clojure über Ruby oder Python auswählen würde, zwei Sprachen, die ich liebe und die eine so saubere Syntax haben und die sehr einfach zu erlernen sind, während Clojure überall so viele Klammern und Symbole verwendet, dass die Lesbarkeit für sie beeinträchtigt wird mich.
Ich finde Ruby und Python wunderschön, lesbar und elegant. Sie sind leicht zu lesen, auch für jemanden, der die Sprache nicht genau kennt. Allerdings ist Clojure für mich undurchsichtig und ich habe das Gefühl, dass ich jedes Detail der Sprachimplementierung kennen muss, um in der Lage zu sein, jeden Code zu verstehen.
Also bitte, erleuchte mich!
- Was ist so gut an Clojure?
- Was ist das absolute Minimum, das ich über die Sprache wissen sollte, um sie zu schätzen?
I don't understand why someone would pick Clojure over say, Ruby or Python
- Es läuft auf dem JVM und kann die gesamte Java-Bibliothek nutzen.... have such a clean syntax
Wohl haben lispelartige funktionale Sprachen eine sehr saubere Syntax und Struktur, nur eine, an die die meisten Leute nicht gewöhnt sind.few
viele Symbole außerhalb von Klammern im Vergleich zu vielen Sprachen und fast keine reservierten Wörter. Der Grund, warum Sie es für unlesbar halten, ist, dass es ein völlig neues Paradigma ist und grundlegend anders funktioniert als eine typische objektorientierte Sprache. Geben Sie ihm etwas Zeit und Kraft.Antworten:
Für den Hintergrund, den Sie angegeben haben, wenn ich das so umschreiben darf:
... Ich denke, die beste Antwort ist, das Buch Clojure Programming von Emerick, Carper und Grand zu lesen . Das Buch bietet zahlreiche explizite Codevergleiche mit Python, Ruby und Java sowie Texterklärungen für Programmierer aus diesen Sprachen. Persönlich bin ich zu Clojure gekommen, nachdem ich große Projekte mit Python erstellt und einige Erfahrungen mit Lisp gesammelt hatte. Das Lesen dieses Buches hat mich überzeugt, Clojure nicht nur für Nebenprojekte, sondern auch für berufliche Zwecke einzusetzen.
Um Ihre beiden Fragen direkt zu beantworten:
Zusätzliche Vorschläge: Die Eleganz und Kraft von Lisp beruht zum Teil auf seiner minimalistischen und absolut konsistenten Syntax. Mit einem guten Editor, z. B. Emacs mit Clojure-Modus und ParEdit, ist das viel einfacher zu verstehen. Wenn Sie sich damit vertraut machen, wird die Syntax ausgeblendet und Sie sehen Semantik, Absichten und prägnante Abstraktionen. Zweitens sollten Sie nicht zuerst den Quellcode für ClojureScript oder Compojure lesen, da dies zu viel auf einmal ist. Probieren Sie einige 4clojure.org-Probleme aus und vergleichen Sie die Lösungen mit den dortigen Top-Codierern. Wenn Sie 4-6 andere Lösungen sehen, wird immer jemand eine wirklich idiomatische, prägnante Lösung im FP-Stil geschrieben haben, die Sie mit einer plumpen, wortreichen und unnötig komplizierten Lösung im imperativen Stil vergleichen können.
quelle
Lisp-Dialekte haben aufgrund ihrer einfachen Syntax eine einzigartige Nische. Diese einfache Syntax macht die Metaprogrammierung mithilfe von Makros sehr einfach. Auf diese Weise können Sie die Sprache so modellieren, dass sie zu Ihrer Problemdomäne passt, anstatt sie so zu modellieren, dass sie zu Ihrer Problemdomäne in Ihrer Sprache passt. Es ist wirklich cool, wenn man sich einmal damit beschäftigt, und man kann eine Menge Dinge leicht erledigen, die in anderen Sprachen sehr schwierig sind.
Der Nachteil ist, dass jedes Lisp-Programm im Wesentlichen seine eigene Sprache definiert, und Sie daher ein solides Verständnis der Dinge benötigen, um zu verstehen, was vor sich geht.
Nun, um Ihre Fragen zu beantworten ...
Clojure ist ein moderner Lisp-Dialekt, der in der JVM / CLR ausgeführt wird. Dies macht es einfach, die Leistung von Lisp in einer vorhandenen Infrastruktur zu nutzen.
Es ist wichtig zu verstehen, wie Sie mit Makros Lisp für Ihre Problemdomäne erstellen, um die Verwendung zu schätzen. Ich habe das wirklich erst nach der Implementierung einer Lisp-Laufzeit verstanden, als ich feststellte, dass viele der wichtigsten Sprachfunktionen problemlos in Lisp selbst implementiert werden können. Um dies zu erreichen, ist ein Projekt von angemessener Größe erforderlich.
Abgesehen von den Vorteilen: Es macht zwar Spaß, darin zu programmieren, aber ich persönlich habe nicht viele Fälle, in denen ich mich bei alltäglichen Problemen an ihn wenden würde. Es ist ein sehr gutes Werkzeug zum Erlernen der Gedankenerweiterung, und nachdem man Lisp richtig gelernt hat, wurde es viel natürlicher, Metaprogrammierfunktionen in anderen Sprachen zu nutzen.
Die einfache Syntax erleichtert Computern die Interpretation (was so einfache, leistungsstarke Makros ermöglicht), aber es ist für einen Menschen sehr schwierig, komplexe Ausdrücke schnell zu analysieren.
quelle
Die Stärken von Clojure wurden viele Male hervorgehoben und sorgen mit Sicherheit für eine sehr mächtige Sprache, so dass ich sie hier nicht noch einmal wiederholen werde.
Ich habe lisp schon immer geliebt, und ich war sehr aufgeregt, als ich Clojure entdeckte (vielleicht die Chance, lisp endlich auch außerhalb der akademischen Welt einzusetzen!). Als ich anfing zu lernen, begann sich ein unbehagliches Gefühl einzuschleichen, obwohl ich nicht genau bestimmen kann, was mir nicht gefällt. Zunächst würde ich sagen, dass das Codieren in Common lisp für mich einfach und unterhaltsam war, aber Clojure hat eine steilere Lernkurve. Clisp hatte eine gewisse Schönheit und Eleganz. Ich bin mir nicht sicher, ob ich das gleiche Gefühl von Clojure bekommen werde. Ich frage mich, ob dieses Gefühl nachlässt, wenn ich mehr Erfahrung bekomme.
Ich habe eine andere Vermutung für meine mysteriöse leichte Abstoßung. Ich denke, es könnte seine große Flexibilität sein. Zum Beispiel können Sie Strukturen haben, die zur Hälfte aus Vektoren und zur Hälfte aus Karten bestehen, und mit wenigen Zeichen Code können Sie sie als Parameter akzeptieren, zerlegen und korrekt verarbeiten. Ja, es entfernt alle Kesselplatten, aber irgendwie fühlt es sich nicht richtig an. Ist so, als wüsste man nie sehr genau, welche Regeln unter all diesen Klammern, Doppelpunkten, Klammern usw. gelten.
Ich mag die Sprache immer noch wegen all ihrer Vorteile (vor allem weil sie in der JVM ausgeführt wird und die Parallelität vereinfacht, gleichzeitig aber viel leistungsfähiger und prägnanter als Java ist und weniger offensichtliche Designfehler aufweist) hätte verbessert werden können.
quelle