Wofür ist Clojure nützlich? [geschlossen]

100

Für welche realen Anwendungen verwenden Benutzer Clojure?

Ich benutze Groovy für Kleber, Java für große Systeme, Python / Perl-Skripte zum Parsen und Kleben. Ich könnte mir vorstellen, von Java aus in Clojure aufzurufen, aber ich kann nicht sehen, wo ich es alleine verwenden würde. Es fällt mir auf, dass es einfacher wäre, fast jede Skriptsprache für Ad-hoc-Aufgaben zu verwenden.

Ich bin keineswegs ein Groovy-Experte oder Fanboy, aber es fällt mir auf, dass es ein besseres Support-Framework, Tools und viele Sprachkonstrukte (Closures, funktionale Programmierung) hat. Gleiches gilt für Scala.

Könnte es sein, dass seine Zukunft eine Sprache ist, die in andere Systeme eingebettet ist?

Fortyrunner
quelle
23
Alles außer mir ein Sandwich zu machen.
Wheaties
12
@wheaties: Hast du es versucht (sandwich me BLT)?
FrustratedWithFormsDesigner
3
Warum sollten Sie Clojure nicht auch für "große Systeme" verwenden? ISTM, da Ihre Systeme weniger ausführlich als Java sind, müssen sie in Clojure nicht so groß sein. :-)
Ken
2
Schauen Sie sich die Antworten an - ich denke, die Leute benutzen sie für ein paar coole Sachen. Ich frage mich, wie viele Unternehmen es für langfristige Entwicklungsarbeiten wählen werden.
Fortyrunner
1
Ich weiß, dass es lange her ist, aber es erfordert einen scharfen Verstand, in einer funktionalen Sprache zu programmieren. Scharfe Köpfe sind teuer, daher kenne ich das LTD-Potenzial von Clojure aus geschäftlicher Sicht nicht - erst, wenn es weit verbreiteter wird als heute (fünf Jahre später).
Sean Allred

Antworten:

93

Ich habe Clojure verwendet für:

  1. Scraping von Webseiten
  2. Shell-Skripte
  3. Erstellen von Websites
  4. Mit OpenGL herumspielen
  5. Asynchrone Webserver schreiben
  6. HTML-Vorlagen
  7. Ausführen paralleler Aufgaben (Abrufen mehrerer URLs und paralleles Verarbeiten)
  8. Mit Echtzeit-Audio herumspielen
  9. Simulationen

Das ist das praktische / lustige Zeug.

Aber Clojure hat auch viel theoretische Tiefe. Ideen, die mit zunehmendem Mainstream immer relevanter werden, verstehen das Potenzial der funktionalen Programmierung wirklich.

Eine persönliche Meinung, aber Clojure bietet bessere Sprachkonstrukte für die korrekte Organisation von Software (ohne dem arbeitenden Programmierer übermäßige Schmerzen zu bereiten) aller Sprachen, die ich bisher akademisch und beruflich verwendet habe - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Was nicht heißt, dass Clojure perfekt ist. Aber es scheint mir, dass es auf einem besseren Fundament aufgebaut ist als die meisten anderen Dinge.

dnolen
quelle
Bist du David Nolen? der Typ, der den Vortrag über "Clojurescript: Lisp's Revenge" gehalten hat. Es war ein großartiges Gespräch!
Amogh Talpallikar
1
//, Was meinst du mit "bietet bessere Sprachkonstrukte für die korrekte Organisation von Software"? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese
2
@maSnun bei moderner Hardware-Startzeit beträgt maximal 1 Sekunde. Dies ist in Ordnung für Shell-Skripte.
dnolen
1
@dnolen Danke, dass du dir die Zeit genommen hast zu antworten. Ich bin ein neuer Clojure-Enthusiast und es dauert ungefähr 20 Sekunden, wenn ich versuche, die mit lein uberjar erstellte JAR-Datei auszuführen. Ich bin auf OS X, Macbook mit Core i5 und 16 GB RAM. Verwenden Sie spezielle Optimierungen?
Masnun
5
@maSnun-Uberjars sind nicht für Shell-Skripte gedacht, sondern für die Anwendungsbereitstellung. Das Optimieren von Anwendungen ist eine allgemeine Frage der JVM, die für Clojure nicht spezifisch ist. Sie können mit Clojure genauso einfach Hash-Bang-Shell-Skripte schreiben wie mit jeder anderen Skriptsprache, und das würde ich empfehlen.
dnolen
20

Beginnen Sie vielleicht mit Rich Hickeys Begründung .

Wie wäre es mit diesem Appell der Google-Gruppe für reale Apps ?

Corbin März
quelle
18

Clojure wird in großem Umfang zur Verarbeitung großer Datenmengen verwendet. Es eignet sich sehr gut für Data Mining / kommerzielle KI (dh Runa) und groß angelegte Vorhersagen (auch bekannt als WeatherBill). Die Parallelitätsgeschichte von Clojure hilft wirklich in diesen datenintensiven Bereichen, in denen die parallele Verarbeitung einfach die einzige Antwort ist.

Arthur Ulfeldt
quelle
13

Nun, das ist eine schwer zu beantwortende Frage. Was möchten Sie tun? Es gibt nicht viel, wofür Clojure nicht wirklich geeignet ist. Ich meine, es ist wegen der Startzeit der JVM nicht wirklich gut für einzelne Befehlszeilenskripte (es sei denn, Sie verwenden Kuchen oder ähnliches), aber das kann für jede JVM-Sprache gesagt werden.

Clojure eignet sich besonders für Parallelitätsaufgaben. Es wurde von Grund auf als fantastische Sprache für Parallelität entwickelt und das STM-System ist fantastisch. Wenn Sie einige Hardcore-Parallelitätsaufgaben erledigen müssen, ist Clojure möglicherweise besonders für diese Aufgabe geeignet.

Man muss jedoch bedenken, dass Clojure eine Allzwecksprache ist. Es ist nicht nur für bestimmte Nischen geeignet, sondern auch für viele oder alle Dinge, für die die anderen JVM-Sprachen geeignet sein könnten.

Clojure wurde entwickelt, um eine fantastische Sprache für sich zu sein und nicht unbedingt eine Klebesprache. Sie können in Clojure Systeme von Grund auf erstellen, ohne jemals Java-Code direkt zu berühren. Nicht, dass es keine schöne Klebesprache ist, ich weiß, dass viele Leute es als solches verwendet haben.

Wenn Sie etwas im Sinn haben, ist es am besten zu überlegen, wie die Lösung in den jeweiligen Sprachen aussehen würde. Wenn es in Groovy besser aussieht / sich besser anfühlt, gehen Sie mit Groovy. Sie sind beide radikal unterschiedliche Sprachen und sie haben beide ihre Zwecke.

Rayne
quelle
Schon damals schrieb ich CLI Clojure-Skripte, nur weil ich die Sprache als angenehm empfand und die Startzeit in meinem Fall nicht störte.
nha
7

Sie können Clojure überall dort verwenden, wo Sie Groovy oder Java verwenden würden. Warum willst du das tun? Manche Leute mögen Lispeln. Diese werden Clojure Groovy vorziehen. Manche Leute mögen Lisp nicht. Diese werden Groovy wählen.

Vagif Verdi
quelle
2
Es ist nicht nur eine Frage der Wahl, Clojure hat Unmengen von Funktionen, die keine andere Sprache hat. Irgendwie hat niemand etwas erwähnt. Ich kann mich kaum an Vorträge auf Konferenzen erinnern, daher kann ich hier keine richtige Antwort schreiben
Holms