Die Absicht meiner Frage ist nicht , einen Flammenkrieg zu beginnen, sondern zu bestimmen, unter welchen Umständen jede Sprache "das beste Werkzeug für den Job" ist.
Ich habe mehrere Bücher über Clojure gelesen ( Programmieren von Clojure , Praktisches Clojure , Die Freude an Clojure und die Manning Early Access-Ausgabe von Clojure in Aktion ), und ich denke, es ist eine fantastische Sprache. Ich lese gerade Let Over Lambda, das sich hauptsächlich mit Common Lisp-Makros befasst und auch eine sehr interessante Sprache ist.
Ich bin kein Lisp-Experte (eher ein Neuling), aber diese Sprachfamilie fasziniert mich ebenso wie die funktionale Programmierung im Allgemeinen.
Vorteile von Clojure (und Nachteile von "anderen"):
Läuft auf der JVM.
Die JVM ist eine sehr stabile, leistungsstarke Sprachumgebung, die Suns Traum vom "Einmal schreiben, [fast] überall ausführen" ziemlich gut erfüllt. Ich kann Code auf mein Macbook Pro schreiben, ihn in eine ausführbare JAR-Datei kompilieren und ihn dann unter Linux und Microsoft Windows mit wenig zusätzlichen Tests ausführen.
Die (Hotspot- und andere) JVM unterstützt eine qualitativ hochwertige Speicherbereinigung und eine sehr performante Just-in-Time-Kompilierung und -Optimierung. Wo ich vor ein paar Jahren alles geschrieben habe, was in C schnell laufen musste, zögere ich jetzt nicht, dies in Java zu tun.
Standardmodell, einfaches Multithreading-Modell. Hat Common Lisp ein Standard-Multithreading-Paket?
Bricht die Monotonie all dieser Klammern mit
[]
, auf{}
, und#{}
obwohl Common Lisp-Experten mir wahrscheinlich sagen werden, dass Sie diese mit Lesermakros zu CL hinzufügen können.
Nachteile von Clojure :
- Läuft auf der JVM.
- Keine Schwanzrekursion oder Fortsetzung. Unterstützt Common Lisp Fortsetzungen? Ich glaube, das Programm erfordert Unterstützung für beide.
Vorteile anderer (insbesondere Common Lisp) (und Nachteile von Clojure):
Benutzerdefinierte Lesermakros.
Weitere Vorteile?
Gedanken? Andere Unterschiede?