Was ist so toll an Clojure? [geschlossen]

40

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?
Marco-Fiset
quelle
14
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 syntaxWohl haben lispelartige funktionale Sprachen eine sehr saubere Syntax und Struktur, nur eine, an die die meisten Leute nicht gewöhnt sind.
22
Sein Name ist sexy.
Programmierer
4
Jeder Teenager, der in einem Keller wohnt, kann in wenigen Monaten Python und Ruby abholen. Wenn das alles ist, was sie jemals nutzen wollen, werden sie niemals aus dem Keller kommen. Ich sage nicht, dass jemand, der jahrelang professionelle Python-Entwicklung gemacht hat, weniger sterblich ist als jemand, der eingebettetes C schreibt, aber wenn Python und Ruby alles sind, was sie wissen und was sie jemals wissen wollen, dann ist etwas faul. Übrigens habe ich über 6 Jahre nach meinem Abschluss persönlich gebraucht, um funktionale Programmierung und Lisps zu entdecken und zu schätzen. Meine erste Reaktion auf Scheme war ein Trottel.
Job
4
"lisp wie funktionale Sprachen haben wohl eine sehr saubere Syntax und Struktur, nur eine, an die die meisten Leute nicht gewöhnt sind.": Ich habe sehr wenig Erfahrung mit Lisp und habe gerade angefangen, das Buch "Practical Common Lisp" zu lesen. Bisher habe ich keine Probleme mit der Syntax festgestellt. Meiner Meinung nach sind die Mythen über eine weniger lesbare Lisp-ähnliche Syntax nur FUD.
Giorgio
4
Ich habe kürzlich angefangen, mich mit Clojure zu beschäftigen (aber ich habe bereits Erfahrung mit Haskell und Scala, daher ist die Syntax kein so großer Schock). Ich fand es tatsächlich überraschend lesbar. Es gibt sehr fewviele 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.
KChaloux

Antworten:

47

Für den Hintergrund, den Sie angegeben haben, wenn ich das so umschreiben darf:

  1. Sie kennen sich mit Ruby / Python aus.
  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 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:

  1. Was ist so gut an Clojure? Viele Antworten auf dieser Website und anderswo, z. B. unter 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 sowohl in Clojure Programming und The Joy of Clojure als auch in Rich Hickeys Vorträgen formuliert sind. das gespräch Simple Made Easy . Sobald Sie das Was / Warum kennen , können Sie beginnen, das Wie beim Lesen von Clojure-Code zu verstehen . wie Sie Ihr Denken von Klassen, Objekten, Zustand / Mutation in "nur Funktionen und Daten" ändern (Funktionen höherer Ordnung, Karten / Mengen / Sequenzen, Typen).

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.

Limist
quelle
20

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

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

Mistkerl
quelle
2
Hast du dir den Leuchttisch angesehen ?
4
Ihre Antwort lässt es so klingen, als ob Makros die normale Herangehensweise an die Lisp-Programmierung sind, obwohl die meisten Programmierprobleme mit gewöhnlichen, erstklassigen Funktionen gelöst werden können. Makros sind in erster Linie für die Sprachprogrammierung (dh die Erweiterung der Sprache) gedacht. Siehe auch bookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey
3
@RobertHarvey Ich würde argumentieren, dass es eine Vielzahl anderer Sprachen gibt, die ich verwenden würde, um erstklassige Funktionen mit einer viel besser lesbaren Syntax anzubieten, wenn Sie marcos nicht ausnutzen.
Mistkerl
@MichaelT das sieht ordentlich aus. Ich mag das Konzept.
DPM
3
@RobertHarvey Scala, JavaScript, C #, Python und Haskell sind in Bezug auf Sprachen mit erstklassigen Funktionen, die ich für eine vom Menschen analysierbare Syntax als Lisps halte, ganz oben auf der Liste.
Mistkerl
10

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.

DPM
quelle