Dans quelle mesure Clojure est-il indépendant de Java?

13

Je suis assez nouveau dans le monde Clojure. J'apprécie le fait que l'on ait un accès facile à toutes les bibliothèques Java via les fonctionnalités d'interopérabilité de Clojure, mais je me demandais combien Clojure se tenait sur ses propres jambes.

Bien sûr, il existe certaines plates-formes, comme Android, où l'interopérabilité avec Java sera toujours nécessaire, car les bibliothèques principales sont écrites ou exposées en Java. De plus, comme les chaînes Clojure sont des chaînes Java, je m'attends à ce que les bibliothèques de manipulation de chaînes soient un wrapper sur les méthodes Java String.

Mais pour d'autres tâches, je ne vois aucune raison pour laquelle les bibliothèques natives Clojure n'ont pas pu être développées. Pensez à Http, à la manipulation de dates, à l'analyse XML, aux modèles, à la sérialisation et à la désérialisation JSON, à OAuth, aux bibliothèques mathématiques, etc.

Ma question est donc:

Dans quelle mesure Clojure est-il devenu indépendant de l'écosystème Java? A-t-il ses propres bibliothèques idiomatiques pour la plupart de ces tâches et d'autres?

Andrea
la source
ClojureCLR est un port Clojure vers le framework .Net.
SL Barth - Rétablir Monica le
1
À mon goût, une trop grande partie du noyau Clojure est implémentée en Java, elle n'est pas correctement démarrée.
SK-logic
@Barth: Je sais qu'il existe des ports vers d'autres plates-formes, mais cela ne dit pas grand-chose sur la question. Il pourrait fonctionner sur le CLR et ne pas encore avoir ses propres bibliothèques.
Andrea
1
@JeremyHeiler, bien sûr, toute personne saine d'esprit tenterait d'atteindre un tel objectif. La question est - pourquoi Clojure n'a pas été mis en œuvre de cette façon dès le début? C'est tellement plus facile que de coder un compilateur en Java.
SK-logic
1
@ SK-logic, D'après ce que je peux dire, les fonctionnalités que Rich Hickey voulait pour démarrer correctement Clojure ont mis du temps à se concrétiser. Autrement dit, il ne voulait pas précipiter les décisions de conception qui pourraient nuire au langage, décisions qui pourraient potentiellement donner de meilleurs résultats si plus de temps était consacré à la réflexion sur le fonctionnement de certaines fonctionnalités. Je suis peut-être complètement absent, mais c'est mon point de vue sur le sujet.
Jeremy Heiler

Réponses:

2

Clojure devient de plus en plus indépendant des bibliothèques Java à mesure que sa base de code se développe et se diversifie naturellement. Une force majeure de Clojure est qu'il peut appeler Java, donc voir du code Clojure à l'avenir qui n'utilise pas java serait peu probable. Cela étant dit, j'ai fait beaucoup de développement sans appeler de bibliothèques Java (arguments de ligne de commande, minupulation de texte de base, etc.). Voici une liste de bibliothèques clojure pures: http://www.clojure-toolbox.com/

wespiserA
la source
J'ai choisi cette réponse grâce au lien vers un référentiel de bibliothèques Clojure pures.
Andrea
7

Je pense qu'il est juste de dire que Clojure est conçu comme un langage hébergé et qu'il a maintenant trois implémentations:

  • Clojure sur JVM
  • ClojureCLR sur .NET
  • ClojureScript sur JavaScript

Parce qu'il est conçu comme un langage hébergé, l'idiome est de tirer parti des bibliothèques de la plate-forme sous-jacente là où cela a du sens, mais également de fournir un ensemble de bibliothèques "de base" qui sont portables (à partir d'un point de vue d'utilisation, pas nécessairement au niveau du code). J'espère qu'au fil du temps, nous verrons beaucoup plus de bibliothèques Clojure s'exécuter sur les trois plates-formes, là où cela aura du sens.

Je maintiens clojure.java.jdbc et clj-time (un wrapper autour de JodaTime), il n'est donc pas logique de les utiliser sur les versions * CLR ou * Script, mais des bibliothèques compatibles API dans différents espaces de noms pourraient être une possibilité.

La plupart des bibliothèques Clojure "pures" devraient être faciles à utiliser sur les versions * CLR ou * Script déjà.

À la question de l'OP: "Clojure-the-language" est assez portable mais "Clojure-the-implementation" est délibérément lié à l'écosystème Java, tout comme ClojureCLR à .NET et ClojureScript à JavaScript.

Sean Corfield
la source
2

Comme Clojure continue d'évoluer, il va certainement construire de plus en plus de ses propres bibliothèques, permettant des ports plus faciles vers d'autres machines virtuelles. En ce qui concerne Clojure sur la JVM, je pense que l'objectif à long terme sera de remplacer la plupart des bibliothèques par des alternatives à Clojure (ayant ainsi cette immuabilité par défaut, STM, etc.), ramenant la couche d'interopérabilité Java au plus bas niveau de primitives et de base des objets tels que String. Cela sera particulièrement vrai une fois que la plate-forme Java sera modularisée avec Jigsaw / OSGi dans Java 8 (2013).

Cependant, je crois que Clojure voudra toujours essayer de tirer parti de la dynamique invoquée (introduite comme une instruction de bytecode dans Java 7) et adoptera une approche assez pragmatique sur les bibliothèques à remplacer quand (si Java a une bibliothèque parfaitement bonne, alors pourquoi changer tôt).

NOTE: Je ne suis pas profondément impliqué dans la communauté Clojure, donc c'est en partie du ouï-dire / des conjectures.

Martijn Verburg
la source