Frage

Die JVM hatte bereits drei Lisps vor Clojure am Tatort eintraf: Kawa , Armed Bär und SISC .

Welche Lücke tut Clojure füllen, die von diesen Lisps verlassen wurde?

War es hilfreich?

Lösung

Kawa, ABCL und SISC sind Neuimplementierungen bestehender Sprachen, die ziemlich in die Jahre gekommen sind. Sie eignen sich hervorragend, wenn Sie aus irgendeinem Grund Standardschema oder Standard Common Lisp auf der JVM verwendet werden soll.

Clojure ist eine neue Sprache. Sie stellen keine Lücke füllen. Sie fügt hinzu, völlig neue Möglichkeiten. Fördert ein rein funktionales approach- Schema und CL sind beide Multi-Paradigma. Clojure lehnt sich stark an das Design der verschiedenen FP Sprachen (ML, Haskell).

Und ja könnten Sie Gleichzeitigkeit Unterstützung für andere Lisps hinzufügen, aber das ist völlig fehlt der Punkt. Clojure wurde von Anfang an als gleichzeitige Sprache entwickelt. So sehr, dass die gleichzeitigen Programme schreiben, ist trivial in Clojure - kein Hexenwerk, wie es in nicht-funktionalen Sprachen ist (Schema, CL nicht ausgeschlossen). Schauen Sie sich diese Art und Weise:

Die Leute sagen, dass C können Sie schnell Programme standardmäßig schreiben.

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

Andere Tipps

  1. "Clojure ist ein Lisp nicht durch die Abwärtskompatibilität eingeschränkt" (das ist von der Clojure Website). Es ist ein Neuanfang. Es ist Fortschritt. Verwenden Sie die Ideen, die Lisp / Scheme mächtig, aber überdenken sie rund um die Java Plattform .

  2. Clojure wird immer die neuesten Clojure. Bei jedem anderen auf der JVM portiert Sprache, kann die JVM-Version immer catch-up spielen. Wenn Sie brauchen nicht die Java-Plattform, warum SISC Verwendung über ein anderes Schema? Wenn Sie das tun, verwenden warum nicht der Lisp (Clojure), die speziell dafür entworfen wurde?

  3. Entworfen mit Gleichzeitigkeit im Auge behalten.

Die einfachste Antwort, die ich mit oben kommen kann, ist Clojure nicht Common Lisp. Clojure ist nicht von der Geschichte anderen Lisps eingeschränkt. Es ist ein neue Sprache gebaut für die JVM.

Ich war einfach nicht bewusst, diejenigen, die ein ernster Vorteil für Clojure ist (dass die Menschen genug Lärm ich herausgefunden hat). Die größte Sache, Clojure hat, dass ich nicht in denen hast du Software Transactional Memory aufgeführt ist .

Clojure auch für die JVM entwickelt wurde, im Gegensatz zu einer Schicht für eine andere Sprache zu sein, so ist es ein wenig mehr „Java-y“, dass ich die andere vorstellen würde, wenn Sie das Zusammenspiel zu tun haben.

Die Begründung Seite auf clojure.org lautet:

  

Warum habe ich schreibe noch eine andere Programmiersprache? Im Grunde genommen, weil ich wollte:

     
      
  • A Lisp
  •   
  • für Functional Programming
  •   
  • symbiotisch mit einer etablierten Plattform
  •   
  • die für Concurrency
  •   
     

und konnte nicht finden.

Haben die drei Sprachen, die Sie erwähnt (Kawa, ABCL und SISC) diese Anforderungen erfüllen? Sie sind:

  • Lisps (entweder die CL oder Schema Dialekte) ✓
  • für Functional Programming ✓
  • symbiotisch mit einer etablierten Plattform (JVM) ✓

, aber sie sind nicht entworfen für (STM) Concurrency; aber um fair zu sein und vollständig ist, gibt es mindestens zwei STM-Bibliotheken ich für CL gefunden, die noch nicht erwähnt wurden:

  1. STMX
    • Getestet arbeiten an ABCL. Unter der aktiven Entwicklung.
  2. CL-STM
    • Tot? Letzte Änderung im Jahr 2007 war.

Hmm ... Warum also eine neue Lisp schaffen? Vor allem, weil diese sind Bibliotheken . Die Begründung Seite auf clojure.org weiter (Hervorhebung hinzugefügt):

  

Was ist mit dem Standard Lisps (Common Lisp und Scheme)?

     
      
  • Slow / keine Innovation Beitrag Standardisierung
  •   
  • Kerndatenstrukturen wandelbar, nicht erweiterbar
  •   
  • Keine Gleichzeitigkeit in specs
  •   
  • Gute Implementierungen existieren bereits für JVM (ABCL, Kawa, SISC et al)
  •   
  • Standard Lisps sind, ihre eigenen Plattformen
  •   

Es ist ein Sprache Gleichzeitigkeit Design Problem, wie andere erwähnt haben.

Außerdem, warum an der JVM stoppen? Clojure CLR-Unterstützung ist unter aktiver Entwicklung .

Das sind die zwei Lücken es aus meiner Sicht füllt. Sie sollten Clojure verwenden, wenn es Ihren Bedürfnissen entspricht. Mach dir keine Sorgen über Ihre Fähigkeiten zu verlieren, wenn Clojure abfällt die Karte. Ihre Lisp Fähigkeiten, aber noch wichtiger ist Ihre Denkweise, werden auf andere Lisp Dialekte tragen über.

Wenn ich zynisch wurden, würde ich sagen, es ist, weil Clojure ist ein schönere Website und sexier Namen.

Ich mag auch hinzufügen, dass Clojure eine relativ neue Sprache ist, von einer Person durchgeführt, mit guten Marketing-Fähigkeiten und eine Menge Energie. Er hat eine Menge Zeit und Hype in clojure investieren ... manchmal ist der Hype eine sich selbst erfüllende Prophezeiung, dass, wenn Sie genug Leute davon überzeugen kann, dass es die letzte größte Sache ist, dann können Sie genug Unterstützung und Schwung bekommen, um es tatsächlich Arbeit.

Ich vermute, die Implementierer von Kawa usw. nicht so viel auf dem Spiel haben, sind hyping daher nicht ihr Produkt. Außerdem, was ist da Hype? „Wir haben eine großartige Sprache bekommen .. es Lisp genannt“ Es ist ein schwieriges Marketing zu verkaufen.

Ich denke, Java ein gutes Beispiel dafür ist. Es hatte einige sehr ernste Mängel, sondern weil es in Verkehr gebracht wurde und gehypt so schwer es viel Schwung erreicht, die Unterstützung gedacht und von Hardware / Software-Hersteller, Hersteller von Werkzeugen, Investitionen der Industrie, usw. So oder so, es erreicht ein gewisses Maß an Erfolg, obwohl ich hasste Programmierung darin. Clojure könnte einen ähnlichen Erfolg erzielen, wo andere Lisps nicht.

Der Vorteil von Clojure ist, dass es Ihnen den Zugriff auf alle Java-Bibliotheken / Code gibt es aus, und Multi-Threading-Unterstützung, weil es auf der JVM basiert. Zusätzlich mit Concurrency konzipiert wurde, was nicht allgemein in Lisp entwickelt, obwohl wegen der Mapping-Primitive wäre es wahrscheinlich nicht schwer sein, ein Lisp zu entwerfen, die Gleichzeitigkeit gut unterstützen.

Davon abgesehen, habe ich versucht, Clojure und hasste die Syntax und die Schmerzen in den Hintern Faktor, der mit etwas Java-verbunden zu gehen zusammen zu sein scheint.

Clojure ist „ein Lisp“, es ist nicht lispeln Sie bereits kennen. Ich habe die letzte ausgegeben Paar Tage, um das Material zu lesen und die Videos ansehen, und ich bin beeindruckt. Es ist Voraussetzung ist, dass funktionalen Programme (basierend auf unveränderliche Daten) sind der beste Weg zu verwalten Gleichzeitigkeit. Clojure implementiert ein Lisp-ähnliches System, basierend auf JVM es zur Verfügung zu stellen.

Wir müssen nicht noch eine Antwort haben (und ich erwarte nicht, dass Stimmen für diese), aber hier sind einige kleine Verbesserungen mehrere andere Antworten.

Neuere ist nicht unbedingt besser. Neuere und schlecht ist nicht gut entwickelt, neuere und nicht die ist nicht gut gepflegt, und neuere ohne größere (oder zumindest wachsend) User-Community ist nicht gut. (Neue Sprachen kommen regelmäßig, aber die meisten von ihnen auf der Strecke bleiben, weil nicht benutzt wird.)

Ich liebe Common Lisp. Ein Teil seiner Schönheit ist seine Schrulligkeit, die kommt von der Tatsache, dass es von Ausschüssen mit dem Ziel, die Abwärtskompatibilität zu mehreren inkompatiblen Dialekten entwickelt wurde.

I Schema lieben. Es ist eine schöne, elegante Sprache. Dennoch hängt die Entwicklung in den Ausschüssen, und vielleicht, dass es manchmal verlangsamt. In jedem Fall sind seine Ziele unterscheiden sich von Clojure ist.

Common Lisp und Scheme haben Betonungen wie Endrekursion, die nicht an Effizienz auf der JVM gut geeignet sind. Clojure wurde von Anfang an so konzipiert und auf die JVM abzubilden und zu interagieren (recht) gut mit Java. (Ich bin nicht sicher, was das bedeutet über die Clojurescript und CLR Dialekte.)

Die Tatsache, dass Clojure entwickelt wurde, zunächst von einer Person, Reich Hickey, und von ihm zusammen mit einem kleinen Team gesteuert wird, macht es nicht unbedingt besser als eine Sprache, die von Ausschüssen kontrolliert. Wenn diese eine Person schlechte Entscheidungen getroffen, wäre Clojure keine gute Sprache.

Allerdings, und das ist der wichtige Punkt : Hickey entworfen, um eine Sprache, die gut angenommen wird, aus, elegant, und das von Anfang an enthielt eine systematischen Zusammenhang Reihe von Funktionen, die es einfach zu tun ein machen lot mit ein wenig. Das gilt auch für den Grund JVM Interop sowie der Rest der Sprache. Die Leute, die Clojure steuern weiterhin streng sein um zu der Sprache der Ziele stecken, so weit.

Dies ist ein großer Teil dessen, was ich liebe, über Clojure: Es ist gut entwickelt, um sowohl als Ganzes als auch in seinen Einzelheiten. Das bedeutet, dass, sobald Sie sich daran gewöhnen, es ist ein Vergnügen darin zu programmieren.

Es wäre nur ein wenig von einer Übertreibung (oder understatment?) Zu sagen, dass Clojure die Macht des Common Lisp mit der Eleganz von Schema hat. Common Lisp hat viele, viele, was Sie in die Sprache gebaut brauchen, aber es ist ein Chaos (ich sage, dass mit der Liebe), und wenn man etwas mehr als benötigen, was in der Sprache gibt es manchmal mehrere inkompatible Bibliotheken mit unterschiedlichen Vor- und Nachteilen. Scheme nach Design ist klein, aber es gibt Bibliotheken zur Verfügung. Clojure hat eine wachsende Zahl von Standard Bibliotheken (im Gegensatz zu CL), die mehr oder weniger Teile der Sprache sind. Ein schönes Beispiel dafür ist die core.matrix Projekt, das eine gemeinsame Schnittstelle zu mehreren verschiedenen Implementierungen Matrix bereitstellt. Dies ist wichtig, weil es verschiedene Matrix-Implementierungen sind, die am besten für die gelegentlichen Gebrauch von kleinen Matrizen sind, oder für umfangreiche Verwendung von großen Matrizen, zum Beispiel.

All dies soll sagen, dass Clojure ist besser als Common Lisp oder Scheme; es ist nicht. Die drei Sprachen haben unterschiedliche Tugenden.

Es ist neu! Das bedeutet nicht eine Menge alten lispers wird es, da die traditionelle Lisp Gemeinschaft verwenden ist gut, traditionell, aber es bedeutet auch, dass die Menschen ohne vorherige Lisp Erfahrung wird es als das neue Ding abholen.

Imho ist Clojure ältere Lisps was Ruby zu Smalltalk war. Nicht unbedingt besser, aber gut genug. Und entscheidend ist, es ist mehr akzeptabel zu Ihrem Arbeitgeber, weil es an Dynamik und wird als Sprache auf dem Vormarsch gesehen viel wie Ruby einmal war.

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