Frage

Ich entwickle in Lisp und in Schema, aber ich las über Clojure und dann möchte ich wissen, in welchen Fällen besser ist, es zu benutzen als Lisp oder Scheme verwenden? Dank

War es hilfreich?

Lösung

„laufen Clojure auf der JVM“ bedeutet, dass Sie die ganze Fülle von Java-Bibliotheken zur Verfügung zu bekommen. Sie können ziemlich GUIs in Swing, verwenden Apache Web-Client oder Server-Code, schließen Sie einen Fertig- Sudoku Solver machen ... was Sie wollen.

Ein weiteres großes Plus von Clojure ist seine sehr poliert Gleichzeitigkeit Unterstützung, mit etwa 3 verschiedenen Geschmacksrichtungen. Wenn Sie eine rechenintensive, parallelizable Aufgabe haben, können Clojure es einfach machen. Nun, einfacher.

Update: Ein weiteres Argument. Clojure ist ziemlich stark funktionell, also ist es ein Plus, wenn Sie möchten, sich zwingen, funktionell zu denken und schreiben.

Andere Tipps

Diese Frage ist unmöglich zu beantworten. Sie sollten Clojure fast 100% der Zeit über CL und Scheme verwenden, ist das, was würde ich sagen. Aber das bedeutet nicht, sollten Sie mir zuhören. Andere können ein gutes Argument, dass das Gegenteil der Fall ist.

Für mich sind die Syntax und Funktionsnamen in Clojure ästhetisch ansprechend. Bestimmte Java-Bibliotheken sind von unschätzbarem Wert für das, was ich für Daten munging und Web-Programmierung und GUI-Sachen. Funktionale Programmierung ist anspruchsvoll und angenehm. Clojure die Mängel sind unwichtig und aufgewogen durch die Vorteile in meinen Augen. Bestimmte unerträgliche Mängel in anderen Lisps sind „fixiert“ in Clojure, weil es neu ist und es kann die Abwärtskompatibilität ignorieren. Es hat einen neuen und wohl leistungsfähigen Ansatz zur Gleichzeitigkeit. Die Clojure Gemeinde ist lebendig und einladend und genial. All dies sagt, wie über mich viel und was ich zu schätzen, da es über Clojure oder andere Lisps der Fall ist.

Es gibt Bibliotheken für CL und Scheme, die in Clojure oder Java nicht existieren. Es gibt Menschen, die nicht mögen, wie Clojure verwendet zu viel Syntax wie [] und {} und wollen überall Pars verwenden. Wenn Sie CLOS-Stil OOP oder viele veränderbare Datenstrukturen wollen, ist eine andere Lisp wohl besser. Die JVM ist Schwergewicht, vielleicht zu Schwergewicht und zu viel Gepäck für einige Menschen. Viele Java Lecks in Clojure (von Design) und das kränkt einiger Empfindlichkeiten der Menschen. Die STM und unveränderliche Datenstrukturen haben Gemeinkosten, die bestimmte Dinge (z Zahlknirschens) langsamer oder weniger elegant. Clojure ist neu und noch rau in bestimmten Bereichen noch schnell ändernden und in anderen sich entwickelnden. Clojure hat noch den Test der Zeit zu vertreiben, während andere Lisps bereits haben. Clojure ist kein „Standard“ und einige Leute finden, eine Sprache, die von einer Implementierung definiert unattraktiv zu sein. Und so weiter. Keines dieser Dinge mir egal, aber sie können es Ihnen.

Das ist fast völlig subjektiv. Welche Sprache Sie verwenden sollten, hängt davon ab, was Sie bereits wissen, was Sie bereit sind zu lernen, welche Bibliotheken Sie verwenden möchten, welche Editoren und Tools für Sie akzeptabel, welche Sprache Mängel Sie bereit sind, mit zu leben und arbeiten um und was für Fehler kann man nicht tolerieren, und was Sie Ihre Arbeit schneller erledigen hilft, billiger, mehr enjoyably, oder zu erreichen, was auch immer Ihre Ziele sind.

Im Grunde, was Sie fühlen sich warm und Fuzzy macht. Lernen Sie sie alle und dann eine informierte Wahl auf Ihrem eigenen Geschmack basiert machen, und die Nutzung je nachdem, welche Ihnen am besten gefällt. Sie sind alle gut.

Wann? So viel wie möglich. Warum? Unveränderliche Datenstrukturen - sie sind wirklich so gut. Es gibt viele anderen Gründen zu.

Clojure verwendet werden sollen, wenn

  • Sie müssen mit bestehenden Java-Code arbeiten.
  • Sie arbeiten mit Menschen, die (Lispeln allergisch „Chef, würde Ich mag eine Java Concurrency-Bibliothek verwenden genannt clojue vs. Ich möchte dies in Schema neu schreiben“ [1]
  • Sie werden für ein Multiprozessorsystem werden Programmierung.

Schema wäre besser, wenn:

  • müssen Sie den Code beweisen, ist richtig. Clojures (Aufruf zum Java-out) behindert dies aber nicht verhindern.
  • Sie arbeiten mit Menschen, die auf Java allergisch sind.
  • Sie entwickeln eine Plattform ohne (neu genug) JVM

[1] ja, das ist ein schlechter schlecht schlecht Grund. so ist die Welt in der wir leben in ...

ABCL (Armed Bär Common Lisp) und mehrere von Scheme-Implementierungen (KAWA, SISC , ...) sind auch auf der JVM ausgeführt wird.

Generell Common Lisp ist in verschiedenen ‚Geschmacksrichtungen‘ zur Verfügung - ABCL ist einer von ihnen. Andere zu C kompilieren, zu nativen Code, verfügen über umfangreiche Entwicklungsumgebungen oder spezielle Erweiterungen wie Logiksprachen oder Datenbanken.

Clojure OTOH ist ein neuer Lisp-Dialekt mit Schwerpunkt auf faul funktionaler Programmierung und parallele Programmierung. Sein Autor (Rich Hickey) ist ein sehr erfahrener Softwareentwickler (er hat auch Java und .NET-Schnittstellen für Common Lisp geschrieben) und hat eine ausgezeichnete Arbeit mit Clojure. Auch wenn einige Hype es um die Sprache ist, ist es lohnt sich - es ist definitiv einer der besseren Lisp Dialekte in den letzten Jahren entwickelt ist (im Vergleich newLISP oder Arc zu sagen)

.

Es gibt viel von Gründen, einige oben erwähnt. Meine Meinung ist:

  1. Die bereits vorhandenen Bibliotheken. Dies ist so ein Vorteil. Ich kann einfach nicht genug, um diese Funktion loben.
  2. Die Sprache mehr ist der adaptierte Hardware zur Zeit verfügbar (Multi-Core) und die Entwicklung Paradigmen heute im Einsatz. Es ist so viel einfacher, über die Parallelität zur Vernunft. Die funktionalen Aspekte sind auch schöner. Sie können in Lisp, offensichtlich funktionale Programmierung tun, aber es ist sehr einfach, das Paradigma unwissentlich zu brechen, ohne es zu wissen, und unbeabsichtigt.
  3. Cross-Plattform. Ich betreibe identisch Programme unter Linux, Windows und die Mac. Es gibt viel von nativen Lisps dass läuft auf allen Plattformen, aber Unterstützung für alle Funktionen auf allen Plattformen ist ein bisschen fleckig und Sie haben ständig auf der Hut sein, für Dinge, die auf der einen fehlen Plattform oder das andere. Auch die Bibliotheken, die Sie brauchen, sind nicht immer konsistent über unterstützt Plattformen. ABCL und einige der JVM Scheme-Implementierungen haben diese wie auch die konsequente Unterstützung, aber ich noch lieber Clojure wegen Punkt 2.
  4. Die Natur der Sprache Gemeinschaft. Seien wir ehrlich, eine Menge die Zeit, die Common Lisp-Community nur böse ist, zu beschäftigen. Das ist nicht der Fall überhaupt Clojure. Es ist einfach, nützliche Hilfe zu bekommen, ohne die Herablassung und Gemeinheit, dass oft kommt mit einer Antwort von der Common Lisp Gemeinschaft. Da ich gelernt für mich mehrere Male, es ist keine Frage so dumm, dass Sie wird nicht höflich und hilfsbereit bekommen Antwort von der Clojure Gemeinschaft.

Wenn ich eine Sache zu finden habe zu beklagen, wäre es IDE-Unterstützung sein. Vielleicht ist es eine Frage, neue Gewohnheiten zu lernen, aber es ist noch einfacher für mich, die Mechanik der Java-Entwicklung als Clojure zu behandeln. Ich habe versucht, und verwenden, Clojure Box, enclojure auf NetBeas, La Clojure auf IntelliJ IDEA und Counterclockwise auf Eclipse. Sie alle arbeiten gut, wenn Sie in erster Linie aus dem REPL arbeiten, aber für die Erstellung und Durchführung von Klassendateien, sie alle fühlen sich immer noch ein wenig unbeholfen.

Eine Untergruppe von Clojure kann auch kompilieren zu Javascript

Clojure läuft auf der JVM (und auf der CLR), so gibt es das.

Clojure Design betrifft sicher mehrere Arten von Concurrent Programming aufnimmt, bewusst macht es schwierig, die gefährlich, wackelig zu fälschlicherweise zu schreiben, und oft Gleichzeitigkeit tolerante Code in anderen Sprachen gebrochen. Wenn Ihr Problem Domain Gleichzeitigkeit für die Verwaltung von Concurrent Programming, Clojure des Arrays von integrierten Tool beinhaltet eine bessere Passform als die Implementierung spezifischer oder kleinsten gemeinsame Nenner Bibliotheken in anderen Lisps und Schemata kann.

Eine der größten Dinge über Clojure ist die Fülle von Bibliotheken, die Sie mit ihm verwenden können. Sie haben die Macht von Java mit der Ausdruckskraft von Lisp, und das ist eine Badass Kombination. Clojure ist besser geeignet für echte Entwicklung, weil es für die reale Welt Entwicklung gemacht wurde. Mit Clojure, haben Sie ehrfürchtige Bibliotheken, fantastisch moderne Features und eine erstaunliche Gemeinschaft von hilfreich, gleichgesinnten Menschen.

würde ich muss sagen, dass Clojure eine bessere Sprache ist, den ganzen Weg um. Das ist eine sehr argumentative Aussage zu machen, so dass ich hier darauf hin, dass dies nur meine ehrliche Meinung.

Clojure Felsen.

Ich versuche immer, neue Sprachen zu lernen, so dass ich bin interessiert Clojure zu lernen. Aber nicht SBCL und einige andere Common Lisp-Implementierungen viel, viel schneller als Clojure? Wäre das nicht brauchen Sie deutlich mehr als 4 Prozessoren (und eine einigermaßen parallelizable Aufgabe) für den Performance-Unterschied zwischen einer Clojure App zu machen und sogar eine Single-Threaded SBCL Version des gleichen App?

Als allgemeine Faustregel gilt, neige ich dazu, Clojure über andere Sprachen in Fällen, in denen eine dieser passen die Rechnung zu begünstigen: (1). Das Domain-Modell neigt dazu, sehr rekursiv zu suchen und / oder Graph-like. (2). Es gibt eine Möglichkeit, eine Multi-Core-JVM-Umgebung zu nutzen (zum Beispiel Elastic Beanstalk) (3). Es gibt eine Fuzzy-Barriere zwischen Daten und Code (man denke RPN-Rechner, wo Knoten Operatoren oder Zahlen sein können)

Dies könnte ein bisschen gekünstelt klingen, aber viele meiner Arbeit beinhaltet das mit Grafiken und Bäume von Informationen zu tun, ob es sich bei sozialen Netzwerken sucht, eine Art von Constrained-basierte Optimierung oder semantische Beziehung Gebäude. Ich finde, dass meine andere Lieblingssprache, Ruby, kann mich nicht die Mischung aus Ausdruckskraft und Roh-Rechenleistung im Vergleich zu Clojure, vor allem, wenn es um quantitativen, rekursiv, concurrent-Typen Problemlösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top