Clojure

Según la misma descripción que dan desde el sitio oficial de Clojure

" Clojure es un lenguaje de programación dinámica que se dirige a la máquina virtual de Java. Está diseñado para ser un lenguaje de propósito general, la combinación de accesibilidad y el desarrollo interactivo de un lenguaje de script con una infraestructura eficiente y robusto para la programación multiproceso. Clojure es un lenguaje compilado - que compila directamente al código de bytes de JVM, sin embargo, sigue siendo completamente dinámico. Cada función compatible con Clojure se admite en tiempo de ejecución. Clojure proporciona un fácil acceso a los marcos de Java, con notas de tipo opcional y la inferencia de tipos, para garantizar que las llamadas a Java pueden evitar la reflexión."

Aquí les dejo un buena entrada a este blog en donde le dan un recorrido a lo que es Clojure. De donde nace, como, de que se trata y por que la gente de Lisp se esta pasando a este lenguaje.

Saludos!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Más referencias

Este sitio contiene varios recursos acerca de Clojure:

¿Qué opinión tiene acerca de Clojure? ¿Lo conocen? ¿Lo han utilizado? ¿Les gustan los lenguajes derivados de Lisp?

Imagen de ezamudio

no lo he usado

No lo he usado, creo que lo único que he leído/oído acerca de Clojure ha sido porque el creador de Tapestry, Howard Lewis Ship, ha escrito al respecto y parece que le gusta bastante, incluso un rato dejó a un lado Tapestry porque se estuvo enfocando a hacer un framework para webapps en Clojure, no sé qué haya pasado con eso.

En lo personal creo que es bueno que exista, seguro que hay algún dominio de problemas para el cual sirve muy bien, y dado que es un lenguaje de JVM debe haber cierto nivel de integración con Java, Groovy, Scala, etc. No soy fan de Lisp, tampoco le echo tierra, pero pues con el nuevo re-auge de la programación funcional algún nicho encontrará este lenguaje...

Re: Más referencias

Me da la impresión de ser un lenguaje con una curva de aprendizaje muy marcada, mucho más difícil que Scala es la impresión que tengo. No sé si desafortunada o afortunadamente no he podido trabajar con este lenguaje que promete muchas cosas. Sin embargo trae mucho peso detrás (ser un derivado Lisp), creo que eso es lo que más impacto causa.

Ahi va de nuevo el link para

Ahi va de nuevo el link para probar clojure en el browser sin tener que instalarlo:

Una cosa que esta mucho muy interesante es que por su naturaleza funcional Clojure permite resolver el "El problema de la expresión" ( artículo de IBM developerWorks )

El problema de la expresión es un nuevo nombre para un problema viejo. El objetivo es definir un tipos de dato por casos, donde uno puede agregar un nuevo caso al tipo de dato y agregar nuevas funciones sobre ese tipo de dato, sin tener que recompilar el código existente y manteniendo el "tipeo estático ( es decir sin hacer cast )

El articulo dice que para los lenguajes de programación orientados a objetos es muy fácil agregar nuevos subtipos ( especializando así la funcionalidad existente )

Y para los funcionales es muy fácil agregar nueva funcionalidad para los tipos existentes:

Clojure siendo un lenguaje que se ejecuta en la JVM permite agregar nueva funcionalidad a los tipos existentes de una forma muy interesante ( aunque pudiera pensarse .. "ahhh eso es viejo y es lo mismo que acá y allá y tralala tralala" )

Le dejo el link del artículo por si alguién tiene interés en saber más al respecto.

Uso de Clojure

En mí caso, me emociona reencontrarme con Lisp (lo utilicé antes que Java) dentro de una plataforma que conozco bien.

Tienes razón, respecto a la integración con Java ya que se pueden invocar directamente las clases desde Clojure. Y respecto al nicho espero que logré ir más allá del académico al cual siempre se ha relegado a Lisp (no es que lo esté).

Re: Curva de aprendizaje

No sé, si sea realmente díficil. Creo que es menos díficil que, digamos Prolog o ensamblador (los cuales también los vi en la Universidad). Creo que la clave reside en usar un enfoque diferente.

En estos días, he visto muchos nuevos artículos y referencias sobre Clojure (un ejemplo, es este sitio). ¿O será acaso que los he notado porque me llama la atención Lisp?

@hmvictor yo creo que sí,

@hmvictor yo creo que sí, digamos que lo estas buscando.

Yo creo que lisp ( no sé clojure ) es más fácil que aprender que Java por ejemplo. De hecho yo aprendí estructuras de datos con Lisp en 2do semestre antes de aprender C y cuando quisimos hacer hacer los mismos programas en C fue un tanto traumante.

Lo único malo es que yo tenía tan poca noción de programación entonces que lo poco que aprendí ya lo olvidé. Eso sí los conceptos se me quedaron bien grabado. Por ejemplo para ordenar una lista simplemente hay que agregar la cabeza a lo que resulte ordenar el resto de la lista :) :) :) :) jejeje

Re: Re: Curva de aprendizaje

Yo lo que he visto de Clojure es algo más enredado además de contar con un estilo de programación poco común para mí y seguro que para muchos. Aunque cabe mencionar que para la gente que le gusta Lisp pues es una maravilla, un lenguaje con mucho de Lisp que puede usar lo que hay en Java, no deja de sonar interesante.

No puedo dar un comentario sobre Prolog o Assembler, porqué no tuve la (des)gracia de utilizarlos.

En cuanto a la comparación un tanto justa y un tanto injusta, fue contra otro lenguaje de programación alterno para la JVM (Scala) y de verdad que lo que he visto de Scala y lo que he visto de Clojure simplemente me da la impresión de ser más difícil aprender Clojure que aprender Scala; quizás en parte porqué de momento paso una cegera Scalista, agregando que estoy leyendo el "Programming Scala: Tackle multi-core complexity on the JVM" y de Clojure no he leído más que el Get started.

Como descubrí Lisp

Saludos a todos, es mi primer comentario en el sitio.

Yo no considero que aprender algún lenguaje de la familia lisp sea dificil, al contrario es lo más fácil. en el 99 aprendí C yo estaba muy acostumbrado a pensar en matemáticas (cálculo, álgebra y esas cosas de prepa) y el cambio a C fue muy drástico me costó mucho trabajo, y con ayuda de un amigo nos motivabamos e hicimos un proyecto de un juego de Ajedrez, y me enamoré de C y los apuntadores.

Al mismo tiempo aprendí C++ y leí un libro de OO de Dattatri, muy bueno el libro. Luego por el trabajo aprendí Java. La OO no me gustó mucho, porque para hacer las cosas bien en OO se requiere mucha talacha y de hubby yo usaba C y no Java ni C++. Intentaba hacer código genérico, para usarlo en librerías, y sin querer agarre un estilo de programación funcional. Evitaba efectos colaterales, y esas cosas, sin saber que onda erá la programación funcional, ni conocía el término.

Después me tope con Lisp, me llamaba mucho la atención la AI y sabia que ahí se usaba lisp, así que saque un libro de la biblioteca de la facultad. "ANSI Common Lisp" de Paul Graham. Y fue amor a primerá vista, la sintaxis simple, unforme y sencilla. Todo lo que intentaba hacer con C ahí estaba directo con una sintaxis que iba al grano. No tiene apuntadores per se, pero tiene simbolos, y todos las funciones ahí muy compactas, 5 o 10 líneas de código, y me imaginaba como hacerlo en C, C++ o Java y era horrible un montón de código (hacerlo en esos lenguajes no dejaba de ser interesante por el reto.) Aritmética sin límites, super eficiente, más rápido que Java en el momento (año 2000).

Otra cosa que me hizo acercarme a Lisp, fue la hipotesis de Sapir-Whorf, en pocas palabras, que nuestro razonamiento es limitado por el lenguaje natural y que es muy particular a nuestra sociedad, etc. Así que quise aprender un lenguaje de programación totalmente diferente a los que concía porque quería ampliar mis herramientas de analisis, mi capacidad para entender y ver problemas y solucionarlos.

Un ejemplo de que no es dificil aprender lisp, o algún lenguaje de la familia. es explicado en el video en el cual Matthias Felleisen, ganador de premio de educador del año en USA, hace un sistema para enseñarle a programar a chavos de secundaría en Scheme, uno de los dialectos más importantes. Les enseña paso a paso, pero sin decirles que es prorgamar, les dice que están aprendiendo a hacer su propio video juego. El salto de matemáticas a programación funcional es muy simple, no es tan drástico como es iniciar directo con cualquier lenguaje imperativo, procedural, orientado a objetos, etc.. Al final del curso se les enseña OO y ya no les gusta.

Un caso sorprendente es el que explica Rich Hickey creador de Clojure. El parteaguas que lo llevo a decidir hacer clojure fue cuando estaba aprendiendo Common Lisp, después de muchos años de hacer programación OO concurrente y paralela en C++, hizo un proyecto en common lisp para un cliente, con pocos meses de experiencia en Lisp y luego el cliente se lo pidio en C++ y con todo sus muchos años de ser experto en C++ y dominarlo de pies a cabeza, le tomó el triple de tiempo en rehacerlo.

Yo creo que depende con que lenguaje empieces, si se te hace más dificil. Es cosa de acostumbrarse. después de todo, así aprendimos español, inglés y cualquier otra cosa, dandole oportunidad para acostumbrarnos.