Wie unabhängig ist Clojure von Java?


13

Ich bin ziemlich neu in der Clojure-Welt. Ich schätze die Tatsache, dass man über Clojure-Interop-Funktionen leicht auf alle Java-Bibliotheken zugreifen kann, aber ich habe mich gefragt, wie viel Clojure auf seinen eigenen Beinen steht.

Natürlich gibt es einige Plattformen wie Android, für die immer eine Interoperabilität mit Java erforderlich ist, da die Kernbibliotheken in Java geschrieben oder verfügbar gemacht werden. Da es sich bei Clojure-Strings um Java-Strings handelt, erwarte ich außerdem, dass die String-Manipulationsbibliotheken ein Wrapper für die Java-String-Methoden sind.

Aber für andere Aufgaben sehe ich keinen Grund, warum native Clojure-Bibliotheken nicht entwickelt werden konnten. Denken Sie an HTTP, Datumsmanipulation, XML-Analyse, Templating, JSON-Serialisierung und -Deserialisierung, OAuth, Mathematikbibliotheken und so weiter.

Meine Frage lautet also:

Inwieweit ist Clojure vom Java-Ökosystem unabhängig geworden? Verfügt es über eigene Sprachbibliotheken für die meisten dieser und anderer Aufgaben?


ClojureCLR ist ein Clojure-Port für das .Net-Framework.
SL Barth - Wiedereinsetzung von Monica am

1
Für meinen Geschmack ist zu viel des Clojure-Kerns in Java implementiert, es ist nicht richtig gebootet.
SK-logic am

@Barth: Ich weiß, dass Ports zu anderen Plattformen existieren, aber das sagt nicht viel über die Frage aus. Es kann auf der CLR ausgeführt werden und hat noch keine eigenen Bibliotheken.
Andrea

1
@ JeremyHeiler, natürlich würde jeder mit einem gesunden Verstand versuchen, ein solches Ziel zu erreichen. Die Frage ist - warum wurde Clojure nicht von Anfang an so implementiert? Es ist so viel einfacher als das Codieren eines Compilers in Java.
SK-logic

1
@ SK-logic, Soweit ich weiß, hat Rich Hickey einige Zeit gebraucht, um Clojure zu booten. Das heißt, er wollte keine überstürzten Entwurfsentscheidungen treffen, die sich negativ auf die Sprache auswirken könnten. Entscheidungen, die möglicherweise zu besseren Ergebnissen führen könnten, wenn mehr Zeit darauf verwendet würde, darüber nachzudenken, wie bestimmte Funktionen funktionieren könnten. Vielleicht bin ich völlig daneben, aber das ist meine Einstellung zum Thema.
Jeremy Heiler

Antworten:


2

Clojure wird immer unabhängiger von Java-Bibliotheken, da seine Codebasis wächst und sich auf natürliche Weise diversifiziert. Eine große Stärke von Clojure ist, dass es Java aufrufen kann. Daher ist es unwahrscheinlich, dass in Zukunft Clojure-Code ohne Java angezeigt wird. Davon abgesehen habe ich viel entwickelt, ohne Java-Bibliotheken aufzurufen (Befehlszeilenargumente, Minupulation von Basistexten usw.). Hier ist eine Liste von reinen Clojure-Bibliotheken: http://www.clojure-toolbox.com/


Ich habe diese Antwort aufgrund des Links zu einem Repository mit reinen Clojure-Bibliotheken ausgewählt.
Andrea

7

Ich denke, es ist fair zu sagen, dass Clojure als gehostete Sprache entworfen wurde und jetzt drei Implementierungen hat:

  • Clojure auf JVM
  • ClojureCLR unter .NET
  • ClojureScript in JavaScript

Da es als gehostete Sprache konzipiert ist, besteht die Redewendung darin, die Bibliotheken der zugrunde liegenden Plattform zu nutzen, sofern dies sinnvoll ist, aber auch eine Reihe von "Kern" -Bibliotheken bereitzustellen, die portierbar sind (ausgehend von einer Verwendungsstrategie, nicht unbedingt auf Codeebene). Ich gehe davon aus, dass mit der Zeit viel mehr Clojure-Bibliotheken auf allen drei Plattformen laufen werden, sofern dies sinnvoll ist.

Ich verwalte clojure.java.jdbc und clj-time (ein Wrapper um JodaTime), daher ist es nicht sinnvoll, diese in den Versionen * CLR oder * Script zu verwenden, aber API-kompatible Bibliotheken in verschiedenen Namespaces könnten eine Möglichkeit sein.

Viele der "reinen" Clojure-Bibliotheken sollten in den * CLR- oder * Script-Versionen bereits problemlos zu verwenden sein.

Auf die Frage des OP: "Clojure-the-language" ist ziemlich portabel, aber "Clojure-the-Implementation" ist bewusst an das Java-Ökosystem gebunden, ebenso wie ClojureCLR für .NET und ClojureScript für JavaScript.


2

Da sich Clojure weiterentwickelt, wird es mit Sicherheit immer mehr eigene Bibliotheken aufbauen und so einfachere Ports zu anderen VMs ermöglichen. In Bezug auf Clojure auf der JVM glaube ich, dass das langfristige Ziel darin bestehen wird, die meisten Bibliotheken durch Clojure-Alternativen zu ersetzen (wobei diese standardmäßig unveränderlich sind, STM usw.), wodurch die Java-Interop-Schicht auf die niedrigste Ebene von Grundelementen und Basis gebracht wird Objekte wie String. Dies gilt insbesondere dann, wenn die Java-Plattform mit Jigsaw / OSGi in Java 8 (2013) modularisiert wurde.

Ich bin jedoch der Meinung, dass Clojure weiterhin versuchen wird, die Vorteile von invokedynamic (eingeführt als Bytecode-Anweisung in Java 7) zu nutzen, und einen ziemlich pragmatischen Ansatz verfolgen wird, welche Bibliotheken zu ersetzen sind (wenn Java eine perfekte Bibliothek hat, warum?) ändern Sie es früh).

HINWEIS: Ich bin nicht tief in die Clojure-Community involviert, daher ist dies zum Teil eine Vermutung.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.