it-swarm.com.de

Was ist so toll an Clojure?

Ich habe mir in letzter Zeit Clojure angesehen und bin auf diesen Beitrag zu Stackoverflow gestoßen, der auf einige Projekte hinweist, die Best Practices und insgesamt guten Clojure-Code befolgen. Nachdem ich einige grundlegende Tutorials gelesen hatte, wollte ich mich mit der Sprache vertraut machen, also habe ich mir einige "reale" 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 wählen würde, sagen wir Ruby oder Python, zwei Sprachen, die ich liebe und die eine so saubere Syntax haben und die sehr einfach zu erlernen sind, während Clojure so viel Klammern und Symbole überall, dass es die Lesbarkeit für mich ruiniert.

Ich denke, dass Ruby und Python sind schön, lesbar und elegant. Sie sind leicht zu lesen, selbst für jemanden, der die Sprache nicht genau kennt). Clojure ist für mich undurchsichtig und ich habe das Gefühl, dass ich jedes kleine Detail über die Sprachimplementierung wissen muss, um jeden Code verstehen zu können.

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?
40
marco-fiset

Für den Hintergrund, den Sie gegeben haben, wenn ich umschreiben darf:

  1. Sie sind mit Ruby/Python vertraut.
  2. Sie sehen die Vorteile von Clojure noch nicht.
  3. Sie finden weder die LISP- noch die Clojure-Syntax klar.

... Ich denke, die beste Antwort ist, das Buch Clojure Programming von Emerick, Carper und Grand zu lesen. Das Buch enthält zahlreiche explizite Codevergleiche mit Python, Ruby und Java sowie Texterklärungen für Codierer aus diesen Sprachen. Persönlich kam ich zu Clojure, nachdem ich große Projekte mit Python erstellt und einige LISP-Erfahrungen gesammelt hatte. Das Lesen dieses Buches hat mich überzeugt, Clojure nicht nur in Nebenprojekten, sondern auch für berufliche Zwecke einzusetzen.

Um Ihre beiden Fragen direkt zu beantworten:

  1. Was ist so gut an Clojure? Viele Antworten auf dieser Site und anderswo, z. siehe https://www.quora.com/Why-would-someone-learn-Clojure
  2. Was ist das absolute Minimum, das ich über die Sprache wissen sollte, um sie zu schätzen? Ich würde vorschlagen, die großen Ideen hinter Clojures Design zu kennen, wie sie in Clojure-Programmierung und The Joy of Clojure artikuliert sind Bücher, und in Rich Hickeys Gesprächen, insb. das Gespräch Simple Made Easy . Sobald Sie das Was/Warum kennen, können Sie beginnen, das Wie zu verstehen. beim Lesen von Clojure-Code, insb. wie Sie Ihr Denken von Klassen, Objekten, Zustand/Mutation in "nur Funktionen und Daten" (Funktionen höherer Ordnung, Karten/Mengen/Sequenzen, Typen) ändern können.

Zusätzliche Vorschläge: Die Eleganz und Kraft von LISP beruht zum Teil auf seiner minimalistischen und äußerst konsistenten Syntax. Mit einem guten Editor, z. Emacs mit Clojure-Modus und ParEdit. Wenn Sie sich damit vertraut machen, verschwindet die Syntax und Sie werden Semantik, Absichten und prägnante Abstraktionen "sehen". Zweitens, lesen Sie nicht zuerst die Quelle für ClojureScript oder Compojure, diese sind zu viel auf einmal. 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, hat ausnahmslos jemand eine wirklich idiomatische, prägnante Lösung im FP-Stil geschrieben, die Sie mit einer ungeschickten, ausführlichen und unnötig komplizierten Lösung im imperativen Stil vergleichen können.

47
limist

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 entsprechend Ihrer Problemdomäne modellieren, anstatt sie so zu modellieren, dass Ihre Problemdomäne in Ihre Sprache passt. Es ist wirklich cool, wenn Sie sich erst einmal damit beschäftigt haben, und es ermöglicht Ihnen, viele Dinge einfach zu erledigen, die in anderen Sprachen sehr schwierig sind.

Der Nachteil ist, dass, da jedes LISP-Programm im Wesentlichen seine eigene Sprache definiert, Sie wirklich ein solides Verständnis für die Dinge benötigen, um zu verstehen, was vor sich geht.

Nun, um Ihre Fragen zu beantworten ...

  1. 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.

  2. Es ist wichtig zu verstehen, wie Sie Makros verwenden, um LISP für Ihre Problemdomäne zu erstellen, um deren Verwendung zu schätzen. Ich habe das wirklich erst verstanden, nachdem ich eine LISP-Laufzeit implementiert hatte, als ich feststellte, dass viele der wichtigsten Sprachfunktionen problemlos in LISP selbst implementiert werden können. Es braucht ein ziemlich großes Projekt, um dies zu erreichen.

Abgesehen von den Vorteilen, obwohl es Spaß macht, darin zu programmieren, habe ich persönlich nicht viele Fälle, in denen ich mich wegen täglicher Probleme an ihn wenden würde. Es ist ein sehr gutes Werkzeug, um zur Erweiterung des Geistes zu lernen, und nachdem man LISP richtig gelernt hat, wurde es viel natürlicher, Meta-Programmierfunktionen in anderen Sprachen zu nutzen.

Die einfache Syntax erleichtert Computern die Interpretation (was so einfache, leistungsstarke Makros ermöglicht), macht es einem Menschen jedoch sehr schwer, komplexe Ausdrücke schnell zu analysieren.

20
bunglestink

Die Stärken von Clojure wurden schon oft hervorgehoben und sorgen mit Sicherheit für eine sehr mächtige Sprache, sodass ich sie hier nicht noch einmal wiederholen werde.

Ich habe LISP seit den Tagen der Uni immer geliebt und war sehr aufgeregt, als ich Clojure entdeckte (vielleicht die Chance, LISP endlich außerhalb der Wissenschaft zu nutzen!). Als ich jedoch anfing zu lernen, schlich sich ein unbehagliches Gefühl ein, obwohl ich nicht genau sagen kann, was ich nicht mag. 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 verschwinden wird, 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 halb Vektor und halb Karte sind, und mit ein paar Codezeichen können Sie sie als Parameter akzeptieren, auseinander nehmen und korrekt verarbeiten. Ja, es entfernt alle Kesselplatten, aber irgendwie fühlt es sich nicht richtig an. Ist, als ob Sie nie sehr gut wissen, dass die Regeln unter all diesen Klammern, Doppelpunkten, Klammern usw. funktionieren.

Ich liebe die Sprache immer noch wegen all ihrer Vorteile (vor allem, weil sie in der JVM ausgeführt wird und die Parallelität vereinfacht, aber viel leistungsfähiger und prägnanter ist als Java und mit weniger offensichtlichen Designfehlern), aber Die Jury ist sich noch nicht sicher, ob etwas hätte verbessert werden können.

10
DPM