¿Qué tan independiente es Clojure de Java?

13

Soy bastante nuevo en el mundo Clojure. Aprecio el hecho de que uno tenga fácil acceso a todas las bibliotecas de Java a través de las funciones de interoperabilidad de Clojure, pero me preguntaba cuánto se destaca Clojure en sus propias piernas.

Por supuesto, hay algunas plataformas, como Android, donde la interoperabilidad con Java siempre será necesaria, ya que las bibliotecas centrales están escritas o expuestas en Java. Además, como las cadenas de Clojure son cadenas de Java, espero que las bibliotecas de manipulación de cadenas sean un envoltorio de los métodos de cadenas de Java.

Pero para otras tareas no veo ninguna razón por la que no se puedan desarrollar las bibliotecas nativas de Clojure. Piense en Http, manipulación de fechas, análisis de XML, plantillas, serialización y deserialización JSON, OAuth, bibliotecas de matemáticas, etc.

Así que mi pregunta es:

¿Hasta qué punto Clojure ha llegado a ser independiente del ecosistema de Java? ¿Tiene sus propias bibliotecas idiomáticas para la mayoría de estas y otras tareas?

    
pregunta Andrea 18.01.2012 - 09:47

3 respuestas

2

Clojure se está volviendo cada vez más independiente de las bibliotecas de Java a medida que su base de código crece y se diversifica de forma natural. Una de las principales fortalezas de Clojure es que puede llamar a Java, por lo que ver el código de Clojure en el futuro que no use Java sería poco probable. Dicho esto, he hecho una gran cantidad de desarrollo al llamar a las bibliotecas de Java (argumentos de la línea de comandos, minupulación de texto básico, etc.). Aquí hay una lista de bibliotecas de clojure puro: enlace

    
respondido por el wespiserA 18.01.2012 - 22:08
7

Creo que es justo decir que Clojure está diseñado como un lenguaje alojado y ahora tiene tres implementaciones:

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

Debido a que está diseñado como un lenguaje alojado, el idioma es aprovechar las bibliotecas de la plataforma subyacente donde tiene sentido, pero también proporciona un conjunto de bibliotecas "centrales" que son portátiles (desde un punto de vista de uso, no necesariamente a nivel de código ). Espero que con el tiempo veamos muchas más bibliotecas de Clojure ejecutándose en las tres plataformas, donde tenga sentido.

Mantengo clojure.java.jdbc y clj-time (una envoltura alrededor de JodaTime), por lo que no tiene sentido usar las versiones de * CLR o * Script, pero las bibliotecas compatibles con API en diferentes espacios de nombres podrían ser una posibilidad .

Muchas de las bibliotecas "puras" de Clojure deberían ser fáciles de usar en las versiones * CLR o * Script ya.

A la pregunta del OP: "Clojure-the-language" es bastante portátil, pero "Clojure-the-implement" está vinculado deliberadamente al ecosistema de Java, al igual que ClojureCLR a .NET y ClojureScript a JavaScript.

    
respondido por el Sean Corfield 18.01.2012 - 19:24
2

A medida que Clojure continúa evolucionando, sin duda construirá cada vez más bibliotecas propias, lo que permitirá puertos más fáciles para otras máquinas virtuales. En lo que respecta a Clojure en la JVM, creo que el objetivo a largo plazo será reemplazar la mayoría de las librerías con las alternativas de Clojure (por lo tanto, esa inmutabilidad por defecto, STM, etc.), llevando la capa de interoperabilidad de Java al nivel más bajo de primitivas y base. objetos como cuerdas. Esto será especialmente cierto una vez que la plataforma Java esté modularizada con jigsaw / OSGi en Java 8 (2013)

Sin embargo, creo que Clojure todavía querrá probar y aprovechar las ventajas de Invokedynamic (introducida como una instrucción de bytecode en Java 7) y tendrá un enfoque bastante pragmático acerca de qué bibliotecas reemplazar cuando (si Java tiene una excelente lib , entonces ¿por qué cambiarlo temprano?

NOTA: No estoy involucrado profundamente en la comunidad de Clojure, por lo que esto es en parte un rumor / conjetura.

    
respondido por el Martijn Verburg 18.01.2012 - 11:07

Lea otras preguntas en las etiquetas