2010-06-15 13 views
16

Kann jemand auf die Vorteile von Clojure hinweisen und für welche Art von Anwendungen ist es geeignet?Vorteile von Clojure

Ich beabsichtige nicht, es mit irgendwelchen Sprachen als solche zu vergleichen. Als Sprache an sich, wozu eignet es sich? Meine Absicht ist es, die richtigen Werkzeuge für den richtigen Job zu kennen, und wo passt clojure in ein solches Szenario?

+2

Die Vorteile benötigt von clojure im Vergleich zu was? Gemeinsame Liste? Planen? Java? – sepp2k

+3

http://clojure.org/rationale – msw

+0

@ Sepp2k: Sie wahrscheinlich gemeinsame LISP gemeint – Max

Antwort

10

Im Allgemeinen finde ich so stark Punkte für Clojure (in keiner bestimmten Reihenfolge):

1) Die REPL Dinge interaktiv ausprobieren.

2) Alles ist unveränderlich von Ausfall- und Veränderlichkeit mehr gut gewählte Standardmuster hat

3) Endrekursion explizit gemacht Zustand auf sichere Weise in einer Multithread-Umgebung zu modifizieren. Bis es richtig Unterstützung für Tail-Rekursion auf der JVM gibt, ist dies wahrscheinlich der beste Kompromiss.

4) Sehr ausdrucksstarke Sprache, die einen funktionalen Ansatz gegenüber einem imperativen Ansatz bevorzugt.

5) Sehr gute Integration mit der Java-Plattform es schmerzlos in Java-Bibliotheken

6) Leiningen als Build und Abhängigkeitsmanagement-Tool zusammen mit der clojars Website

Ok zu mischen, Punkt 6 hat nichts mit der Sprache perse zu tun, aber definitiv mit meiner Freude, es zu benutzen.

In Bezug auf Anwendungen zielt es Multithreading-Anwendungen, aber so wie die Dinge jetzt gehen, dass alles bedeuten könnte, wie überall Menschen versuchen, all diese Kerne beschäftigt zu halten, während der Benutzer nicht Warten sind. Auf der anderen Seite verwenden anscheinend viele Leute es zur Google App Engine, die radikal EINFACH ist.

Der funktionale Ansatz funktioniert gut in meiner (begrenzten) Erfahrung für die Implementierung von Datentransformationen und Berechnungen. Wo Informationen und Ereignisse durch die Anwendung "gestreamt" werden können. Web-Apps fallen weitestgehend unter diese Kategorie, wo wir eine Anfrage in eine "Antwort" verwandeln.

Aber ich muss es immer noch in realen Produktionscode verwenden. Momentan verwende ich es für persönliche Projekte und Prototyping/Benchmarking.

17

Vorteile:

  • alle Vorteile der funktionalen Programmierung, ohne die Reinheit Zwangsjacke
  • lispy: ermöglicht dynamischer, kompakter Code mit dem späten Bindung, Makros, Multimethoden
  • Java Interoperabilität
  • kann Code Funktionen zur Sequenzabstraktion statt zu spezifischen Datenstrukturen
  • Nebenläufigkeit Goodies gebacken in: funktionelle Datenstrukturen, Softwaretransaktionsspeicher
  • läuft auf der JVM: Portabilität und schnelle Garbage Collection

Geeignet für:

  • Bottom-up-Design
  • eingebetteten Sprachen
  • hoch gleichzeitige Anwendungen

Wahrscheinlich nicht geeignet für:

  • Fällen, in denen Sie statische Typisierung wollen
  • , wenn Sie wollen, dass die Sprache auf statische Analyse
  • alles zugänglich zu sein, die eine schnelle Startzeit
  • Horden von ahnungslosen Java-Affen
+2

In Bezug auf starke Typisierung - ich hatte bisher gute Ergebnisse in Clojure 1.2 mit Typhinweisen.Ich denke, mit vernünftiger Verwendung können Sie die meisten Vorteile erhalten von starken Typisierung, wenn Sie wirklich wollen .... – mikera

+4

Dies ist ein alter Post, aber nur um zu sagen, dass starke Typisierung nicht nur hier ist für die Leistung.Am neuesten Javascript VM sind schnell, ohne statische Typisierung Tipp oder Typ Ausführungszeit und Code neu kompilieren. Starke Tipping Advages ist besser Tooling-Unterstützung. Compiler finden viele offensichtliche Bugs, IDE bieten unterstützt Refactoring.Wenn Sie den Code zu überprüfen, können Sie einfach alle Anrufer einer Funktion finden, alle Implementierung einer Schnittstelle ... Main Problem ist mehr Ausführlichkeit und weniger Generizität –

+3

Ich liebe den Teil "Horden von ahnungslosen Java Affen". – Heejin