it-swarm.com.de

Warum Clojure über andere JVM-Lisps: Kawa, Armed Bear oder SISC?

Die JVM hatte bereits drei Lisps, bevor Clojure die Szene betrat: Kawa , Bewaffneter Bär und SISC .

Welche Lücke füllt Clojure , die diese Lisps hinterlassen haben?

65
uzo

Kawa, ABCL und SISC sind Reimplementierungen vorhandener Sprachen, die recht langwierig sind. Sie eignen sich hervorragend, wenn Sie aus irgendeinem Grund Standardschema oder Standard-Common LISP in der JVM verwenden möchten.

Clojure ist eine neue Sprache. Es füllt keine Lücke . Es fügt völlig neue Möglichkeiten hinzu. Es bevorzugt einen rein funktionalen Ansatz - Schema und CL sind beide ein Multi-Paradigma. Clojure lehnt sich stark an das Design verschiedener FP Sprachen (ML, Haskell) an.

Und ja, Sie könnten anderen Lisps die Unterstützung von Parallelität hinzufügen, aber das fehlt völlig. Clojure wurde von Anfang an als gleichzeitige Sprache konzipiert. So viel, dass das Schreiben von gleichzeitigen Programmen in Clojure trivial ist - und nicht wie in nicht-funktionalen Sprachen (Scheme, CL nicht ausgeschlossen). Schau dir diesen Weg an:

Die Leute sagen, dass man mit C standardmäßig schnelle Programme schreiben kann.

Nun, mit Clojure können Sie standardmäßig gleichzeitige Programme schreiben.

108
dnolen
  1. "Clojure ist ein LISP, der nicht durch Rückwärtskompatibilität eingeschränkt ist" (das ist von der Clojure-Website). Es ist ein neuer Anfang. Es ist ein Fortschritt. Nutzen Sie die Ideen, die LISP/Scheme stark machen, aber überdenken Sie sie in Bezug auf Java Plattform .

  2. Clojure wird immer das neueste Clojure sein. Bei einer anderen Sprache, die in die JVM portiert wurde, spielt die JVM-Version möglicherweise immer Aufholjagd. Wenn Sie die Java-Plattform nicht benötigen, warum sollten Sie SISC über ein anderes Schema verwenden? Wenn ja, warum nicht die LISP (Clojure) verwenden, die speziell dafür entwickelt wurde?

  3. Entwickelt im Hinblick auf Parallelität.

33
z5h

Die einfachste Antwort, die ich finden kann, ist, dass Clojure kein Common-LISP ist. Clojure ist nicht durch die Geschichte anderer Lisps eingeschränkt. Es ist ein new language built für die JVM.

14
Rayne

Ich wusste einfach nichts davon, was für Clojure ein großer Vorteil ist (dass die Leute genug Lärm machten). Das Größte, was Clojure in den von Ihnen aufgeführten Personen nicht gesehen hat, ist Software Transactional Memory .

Clojure wurde auch für die JVM entwickelt, im Gegensatz zu einer Schicht für eine andere Sprache. Es ist also etwas mehr "Java-y", wie ich es mir vorstelle, wenn die anderen Interoperationen durchgeführt werden müssen.

11
MBCook

Die Begründungsseite auf clojure.org lautet:

Warum habe ich noch eine andere Programmiersprache geschrieben? Grundsätzlich, weil ich wollte:

  • Eine LISP
  • für die funktionale Programmierung
  • symbiotisch mit einer etablierten Plattform
  • konzipiert für Parallelität

und konnte keinen finden.

Erfüllen diese drei Sprachen (Kawa, ABCL und SISC) diese Anforderungen? Sie sind:

  • Lisps (entweder die CL- oder Scheme-Dialekte) ✓
  • für die Funktionsprogrammierung ✓
  • symbiotisch mit einer etablierten Plattform (der JVM) ✓

aber sie sind nicht designed für (STM) Concurrency; Um jedoch fair und vollständig zu sein, gibt es mindestens 2 STM-Bibliotheken, die ich für CL gefunden habe, die noch nicht erwähnt wurden:

  1. STMX
    • Getestete Arbeit an ABCL. In aktiver Entwicklung.
  2. CL-STM
    • Tot? Letzte Änderung war 2007.

Hmm ... Warum also ein neues Lisp erstellen? Hauptsächlich, weil diese Bibliotheken sind. Die Seite mit den Gründen auf clojure.org wird fortgesetzt (Hervorhebung hinzugefügt):

Was ist mit den Standard-Lisps (Common LISP und Schema)?

  • Langsame/keine Innovation nach Standardisierung
  • Kerndatenstrukturen veränderbar, nicht erweiterbar
  • Keine Parallelität in Spezifikationen
  • Es gibt bereits gute Implementierungen für JVM (ABCL, Kawa, SISC ua).
  • Standard-Lisps sind ihre eigenen Plattformen

Wie andere bereits erwähnt haben, handelt es sich hierbei um ein Problem mit language concurrency design.

Warum auch bei der JVM aufhören? Clojure CLR-Unterstützung wird derzeit aktiv entwickelt.

Das sind die 2 Lücken, die es aus meiner Sicht füllt. Sie sollten Clojure verwenden, wenn es Ihren Anforderungen entspricht. Machen Sie sich keine Sorgen, wenn Sie Ihre Fähigkeiten verlieren, wenn Clojure von der Karte abbricht. Ihre LISP-Fähigkeiten, aber noch wichtiger Ihre Denkweise, werden auf andere LISP-Dialekte übertragen.

11

Wenn ich zynisch wäre, würde ich sagen, dass Clojure eine schönere Website und einen sexy Namen hat.

10
ire_and_curses

Ich sollte auch hinzufügen, dass Clojure eine relativ neue Sprache ist, die von einer Person mit guten Marketingfähigkeiten und viel Energie umgesetzt wird. Er investiert viel Zeit und Hype in das Clojure ... Manchmal ist der Hype eine sich selbst erfüllende Prophezeiung: Wenn man genug Leute davon überzeugen kann, dass es die neueste Sache ist, dann kann man genug Unterstützung und Schwung bekommen, um es tatsächlich zu schaffen Arbeit.

Ich vermute, dass die Implementierer von Kawa usw. nicht so viel auf dem Spiel haben, also nicht ihr Produkt hyping. Außerdem, was gibt es zu hype? "Wir haben eine großartige Sprache ... es heißt LISP" Es ist ein schwierigeres Marketing. 

Ich denke, Java ist ein Paradebeispiel dafür. Es hatte einige schwerwiegende Mängel, aber weil es so stark vermarktet und gehyped wurde, erlangte es viel Schwung, was die Unterstützung von Hardware-/Softwareanbietern, Werkzeugherstellern, Investitionen von der Industrie usw. bedeutete Erfolg, obwohl ich es hasste, darin zu programmieren. Clojure könnte einen ähnlichen Erfolg erzielen wie andere Lisps.

7
Larry Watanabe

Der Vorteil von Clojure ist, dass Sie Zugriff auf alle Java-Bibliotheken/-Codes erhalten und die Unterstützung für Multithreading bietet, da sie auf der JVM basiert. Darüber hinaus wurde es im Hinblick auf Parallelität entwickelt, etwas, das normalerweise nicht in LISP vorgesehen ist, obwohl es aufgrund der Mapping-Grundelemente wahrscheinlich nicht schwer wäre, ein LISP zu entwerfen, das Parallelität gut unterstützt.

Trotzdem habe ich Clojure ausprobiert und die Syntax und den Schmerz im Butt-Faktor, der mit allem, was mit Java zu tun scheint, gehasst.

5
Larry Watanabe

Clojure ist "eine LISP", es ist keine LISP, die Sie bereits kennen. Ich habe die letzten Tage damit verbracht, das Material zu lesen und die Videos anzusehen, und ich bin beeindruckt. Voraussetzung ist, dass funktionale Programme (basierend auf unveränderlichen Daten) der beste Weg sind, um Parallelität zu verwalten. Clojure implementiert ein LISP-ähnliches System, das auf JVM basiert, um es bereitzustellen.

1
ddyer

Es ist neu! Das bedeutet, dass nicht viele alte Lispers es verwenden werden, da die traditionelle LISP-Community gut und traditionell ist, aber es bedeutet auch, dass die Leute ohne LISP-Erfahrung es als das Neue betrachten.

Imho, Clojure ist für ältere Lisps was Ruby für Smalltalk war. Nicht unbedingt besser, aber gut genug. Entscheidend ist, dass dies für Ihren Arbeitgeber akzeptabler ist, da er einen Schwung hat und als aufstrebende Sprache betrachtet wird, ähnlich wie einst Ruby.

0
saolof

Wir brauchen keine weitere Antwort (und ich erwarte keine Stimmen für diese), aber hier sind einige Verbesserungen an einigen anderen Antworten.

Neuer ist nicht unbedingt besser. Neuere und schlecht entworfene Systeme sind nicht gut, neuer und nicht gepflegt ist nicht gut und neuer ist ohne eine größere (oder zumindest wachsende) Benutzergemeinschaft nicht gut. (Neue Sprachen kommen regelmäßig heraus, aber die meisten bleiben aufgrund von Nichtgebrauch auf der Strecke.)

Ich liebe Common LISP. Ein Teil seiner Schönheit ist die Unkonventionelle, die sich aus der Tatsache ergibt, dass sie von Komitees mit dem Ziel der Rückwärtskompatibilität mit mehreren inkompatiblen Dialekten entworfen wurde.

Ich liebe Scheme. Es ist eine schöne, elegante Sprache. Dennoch hängt seine Entwicklung von Ausschüssen ab, und dies hat sie manchmal verlangsamt. Auf jeden Fall unterscheiden sich seine Ziele von Clojures.

Gemeinsame LISP und Schemas haben Schwerpunkte wie die Rekursion des Schwanzes, die für die Effizienz der JVM nicht gut geeignet sind. Clojure wurde von Anfang an entwickelt, um eine gute Zuordnung zur JVM zu ermöglichen und (relativ) gut mit Java zu interagieren. (Ich bin nicht sicher, was das für die Clojurescript- und CLR-Dialekte bedeutet.)

Die Tatsache, dass Clojure ursprünglich von einer Person, Rich Hickey, entwickelt wurde und von ihm zusammen mit einem kleinen Team kontrolliert wird, macht es nicht unbedingt besser als eine Sprache, die von Komitees kontrolliert wird. Wenn diese eine Person schlechte Entscheidungen treffen würde, wäre Clojure keine gute Sprache.

Und das ist der wichtige Punkt : Hickey hat eine Sprache entworfen, die durchdacht und elegant ist und von Anfang an eine systematisch verwandte Suite von Funktionen enthielt, die es leicht macht, mit wenig viel zu tun. Dies gilt sowohl für das grundlegende JVM-Interop als auch für den Rest der Sprache. Die Leute, die Clojure kontrollieren, halten sich bisher strikt an die Ziele der Sprache. 

Dies ist ein großer Teil dessen, was ich an Clojure liebe: Es ist sowohl als Ganzes als auch in seinen Details gut gestaltet. Wenn Sie sich erst einmal daran gewöhnt haben, ist es eine Freude, darin zu programmieren.

Es wäre nur eine kleine Übertreibung (oder Untertreibung?) Zu sagen, dass Clojure die Macht von Common LISP mit der Eleganz von Scheme hat. Bei Common LISP gibt es viele, viele Dinge, die Sie in die Sprache integrieren müssen, aber es ist ein Chaos (ich sage das mit Liebe), und wenn Sie mehr als das, was in der Sprache ist, brauchen, gibt es manchmal mehrere inkompatible Bibliotheken mit unterschiedlichen Kompromissen. Das Schema ist klein, obwohl es Bibliotheken gibt. Clojure hat eine wachsende Anzahl von standard Bibliotheken (im Gegensatz zu CL), die mehr oder weniger Teile der Sprache sind. Ein schönes Beispiel dafür ist das core.matrix-Projekt, das eine gemeinsame Schnittstelle zu mehreren verschiedenen Matriximplementierungen bietet. Dies ist wichtig, da es unterschiedliche Matriximplementierungen gibt, die sich am besten für die gelegentliche Verwendung kleiner Matrizen oder für die umfangreiche Verwendung von beispielsweise großen Matrizen eignen.

Nichts davon soll sagen, dass Clojure besser ist als Common LISP oder Schema. es ist nicht. Die drei Sprachen haben unterschiedliche Tugenden.

0
Mars