¿Qué tiene de bueno Clojure? [cerrado]

39

Últimamente he echado un vistazo a Clojure y me topé con esta publicación en Stackoverflow que indica algunos proyectos que siguen las mejores prácticas y un buen código general de Clojure. Después de leer algunos tutoriales básicos, quise entender el idioma, así que eché un vistazo a algunos proyectos "reales".

Después de consultar ClojureScript y Compojure (dos de los proyectos" buenos "mencionados anteriormente), siento que Clojure es una broma. No entiendo por qué alguien escogería a Clojure en lugar de, por ejemplo, Ruby o Python, dos idiomas que amo y que tienen una sintaxis tan limpia y que son muy fáciles de aprender, mientras que Clojure usa mucho paréntesis y símbolos En todas partes que arruina la legibilidad para mí.

Creo que Ruby y Python son hermosos, legibles y elegantes. Son fáciles de leer incluso para alguien que no conoce el idioma de adentro hacia afuera. Sin embargo, Clojure es opaco para mí y siento que debo conocer cada pequeño detalle sobre la implementación del lenguaje para poder entender cualquier código.

¡Por favor, ilumíname!

  • ¿Qué tiene de bueno Clojure?
  • ¿Cuál es el mínimo absoluto que debo saber sobre el idioma para poder apreciarlo?
pregunta marco-fiset 11.12.2012 - 22:09

3 respuestas

45

Para el fondo que dio, si puedo parafrasear:

  1. Estás familiarizado con Ruby / Python.
  2. Todavía no ves las ventajas de Clojure.
  3. No encuentra clara la sintaxis de Lisp o Clojure.

... Creo que la mejor respuesta es leer el libro Clojure Programming de Emerick, Carper and Grand. El libro tiene numerosas comparaciones de códigos explícitos con Python, Ruby y Java, y tiene explicaciones de texto que se dirigen a los codificadores de esos idiomas. Personalmente, vine a Clojure después de construir proyectos de buen tamaño con Python y tener algo de experiencia con Lisp; Leer ese libro me ayudó a convencerme de que comience a usar Clojure no solo en proyectos paralelos, sino también con fines profesionales.

Para responder directamente a sus dos preguntas:

  1. ¿Qué tiene de bueno Clojure? Un montón de respuestas en este sitio y en otros lugares, por ejemplo. vea enlace
  2. ¿Cuál es el mínimo absoluto que debo saber sobre el idioma para poder apreciarlo? Sugeriría conocer las grandes ideas detrás del diseño de Clojure, como se expresa en Programación de Clojure y The Joy of Clojure en cuanto a libros, y en las charlas de Rich Hickey, esp. la charla Simple Made Easy . Una vez que sepa qué / por qué , puede comenzar a entender cómo cómo al leer el código de Clojure, esp. cómo cambiar su forma de pensar de clases, objetos, estado / mutación a "solo funciones y datos" (funciones de orden superior, mapas / conjuntos / secuencias, tipos).

Sugerencias adicionales: la elegancia y el poder de Lisp se deben en parte a su sintaxis minimalista y totalmente consistente. Es mucho más fácil apreciarlo con un buen editor, por ejemplo, Emacs con clojure-mode y ParEdit. A medida que se familiarice con ella, la sintaxis se desvanecerá y "verá" la semántica, las intenciones y las abstracciones concisas. En segundo lugar, no empieces leyendo la fuente de ClojureScript o Compojure, son demasiado a la vez; Pruebe algunos problemas de 4clojure.org y compare las soluciones con los mejores codificadores allí. Si ve 4-6 otras soluciones, invariablemente alguien habrá escrito una solución realmente idiomática y concisa al estilo de PF, que podrá comparar con una solución de estilo imperativo torpe, verbosa y innecesariamente complicada.

    
respondido por el limist 12.12.2012 - 01:58
20

Los dialectos Lisp tienen un nicho único debido a su sintaxis simple. Esta sintaxis simple hace que la meta programación a través del uso de macros sea muy simple. Esto le permite modelar el idioma para que se adapte a su dominio de problemas en lugar de modelar para adaptar su dominio de problemas a su idioma. Es realmente genial una vez que se te acerca la cabeza y te permite hacer muchas cosas fácilmente, lo cual es muy difícil en otros idiomas.

El inconveniente, es que dado que cada programa Lisp esencialmente define su propio idioma, realmente necesitas un conocimiento sólido de las cosas para entender lo que está pasando.

Ahora, para responder a tus preguntas ...

  1. El cierre es un dialecto Lisp moderno que se ejecuta en la JVM / CLR. Esto hace que sea fácil aprovechar el poder de Lisp en una infraestructura existente.

  2. Es esencial entender cómo usar macros para construir Lisp en su dominio de problemas para apreciar su uso. Realmente solo entendí esto después de implementar un tiempo de ejecución Lisp, cuando descubrí que muchas de las funciones básicas del lenguaje se pueden implementar fácilmente en el mismo Lisp. Se necesita un proyecto de tamaño justo para obtener esto.

Dejando las cosas a un lado, aunque es divertido programarlo, personalmente no tengo muchos casos en los que pueda recurrir a los problemas diarios. Es una muy buena herramienta para aprender para la expansión de la mente, y después de aprender a Lisp correctamente, se volvió mucho más natural aprovechar las facilidades de programación en otros idiomas.

La sintaxis simple facilita la interpretación de las computadoras (lo que permite macros potentes y fáciles de usar), pero dificulta que un humano analice expresiones complejas rápidamente.

    
respondido por el bunglestink 11.12.2012 - 22:32
10

Las fortalezas de Clojure se han resaltado muchas veces y, por supuesto, son un lenguaje muy poderoso, por lo que no las repetiré aquí.

Siempre me encantó lisp, desde los días universitarios y me emocioné mucho cuando descubrí Clojure (¡tal vez la oportunidad de usar lisp fuera de la academia por fin!). Sin embargo, cuando comencé a aprender, un sentimiento incómodo comenzó a aparecer, aunque no puedo identificar exactamente qué es lo que no me gusta. En primer lugar, diría que la codificación en Common lisp fue fácil y divertida para mí, pero Clojure tiene una curva de aprendizaje más pronunciada. Clisp tenía cierta belleza y elegancia. No estoy seguro de tener la misma sensación de Clojure. Me pregunto si ese sentimiento desaparecerá a medida que tenga más experiencia.

Tengo otra conjetura para mi misteriosa ligera repulsión. Creo que podría ser su gran flexibilidad. Por ejemplo, puede tener estructuras que son medio vector y medio mapa y con algunos caracteres de código puede aceptarlos como parámetros, desarmarlos y procesarlos correctamente. Sí, elimina todas las placas, pero de alguna manera no se siente bien. Es como si nunca supieras muy bien las reglas bajo todos los paréntesis, puntos, puntos, etc. que están operando.

Para mí, sigo amando el lenguaje por todas sus ventajas (principalmente, ejecutando JVM y simplificando la concurrencia, al mismo tiempo que soy mucho más poderoso y conciso que Java y con fallas de diseño menos obvias) pero el jurado aún está deliberando. a si algo podría haber sido mejorado.

    
respondido por el DPM 11.12.2012 - 23:15

Lea otras preguntas en las etiquetas

Comentarios Recientes

Bueno, porque Clojure es eso [10:19] Genial porque tiene una abstracción de contenedores. Escribí algo antes sobre listas perezosas, creé una que puedo construir con objetos var. Tengo la impresión de que está realmente intrigado por la programación funcional y se olvida fácilmente del manejo de funcionalidades de alto nivel como interfaces y mapfalsities funcionales. ¿Vas a construir algo pequeño que use Clojure? ¿O le interesará obtener algo capaz de ofrecer esa abstracción funcional de nivel accesible... Lee mas