He estado echando un vistazo a Clojure últimamente y me encontré con esta publicación en Stackoverflow que indica algunos proyectos que siguen las mejores prácticas y, en general, un buen código de Clojure. Quería entender el idioma después de leer algunos tutoriales básicos, así que eché un vistazo a algunos proyectos del "mundo real".
Después de mirar ClojureScript y Compojure (dos de los proyectos "buenos" mencionados anteriormente), siento que Clojure es una broma. No entiendo por qué alguien elegiría Clojure en lugar de, por ejemplo, Ruby o Python, dos idiomas que amo y tienen una sintaxis tan limpia y son muy fáciles de aprender, mientras que Clojure usa tantos paréntesis y símbolos en todas partes que arruina la legibilidad para yo.
Creo que Ruby y Python son hermosos, legibles y elegantes. Son fáciles de leer incluso para alguien que no conoce el idioma al revés. 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.
¡Así que por favor, ilumíneme!
- ¿Qué tiene de bueno Clojure?
- ¿Cuál es el mínimo absoluto que debo saber sobre el idioma para poder apreciarlo?
I don't understand why someone would pick Clojure over say, Ruby or Python
- se ejecuta en jvm y puede usar toda la biblioteca de java.... have such a clean syntax
podría decirse que los lenguajes funcionales lisp tienen una sintaxis y estructura muy limpias, es solo una a la que la mayoría de la gente no está acostumbrada.few
símbolos fuera del paréntesis en comparación con muchos idiomas, y casi no hay palabras reservadas. La razón por la que lo encuentra ilegible es porque es un paradigma totalmente nuevo y funciona de una manera fundamentalmente diferente a un lenguaje orientado a objetos típico. Dale algo de tiempo y poder.Respuestas:
Para el fondo que diste, si puedo parafrasear:
... Creo que la mejor respuesta es leer el libro Clojure Programming de Emerick, Carper y Grand. El libro tiene numerosas comparaciones de código explícito con Python, Ruby y Java, y tiene explicaciones de texto que abordan los codificadores de esos lenguajes. Personalmente, llegué a Clojure después de construir proyectos de buen tamaño con Python y tener algo de experiencia en Lisp; leer ese libro me ayudó a convencerme de comenzar a usar Clojure no solo en proyectos paralelos sino también para fines profesionales.
Para abordar sus dos preguntas directamente:
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 apreciar eso con un buen editor, por ejemplo, Emacs con clojure-mode y ParEdit. A medida que se familiarice con él, la sintaxis se desvanece y "verá" la semántica, las intenciones y las abstracciones concisas. En segundo lugar, no comience leyendo la fuente de ClojureScript o Compojure, ya que son demasiados a la vez; pruebe algunos problemas de 4clojure.org y compare las soluciones con los principales codificadores allí. Si ve de 4 a 6 otras soluciones, invariablemente alguien habrá escrito una solución de estilo FP realmente idiomática y sucinta que puede comparar con una solución de estilo imperativo torpe, verbosa e innecesariamente complicada.
fuente
Los dialectos de 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 problemático en lugar de modelar para adaptar su dominio problemático a su idioma. Es realmente genial una vez que lo entiendes, y te permite hacer muchas cosas fácilmente que es muy difícil en otros idiomas.
La desventaja es que, dado que cada programa Lisp define esencialmente su propio lenguaje, realmente necesita una comprensión sólida de las cosas para comprender lo que está sucediendo.
Ahora, para responder a sus preguntas ...
Clojure es un dialecto moderno de Lisp que se ejecuta en JVM / CLR. Esto facilita aprovechar el poder de Lisp en una infraestructura existente.
Es esencial comprender cómo usar macros para construir Lisp en su dominio problemático para apreciar su uso. Realmente solo entendí esto después de implementar un tiempo de ejecución de Lisp, cuando descubrí que muchas de las características principales del lenguaje se pueden implementar fácilmente en Lisp. Se necesita un proyecto de buen tamaño para obtener esto.
Aparte de sus ventajas, aunque es divertido programarlo, personalmente no tengo muchos casos en los que recurriría a él para problemas diarios. Es una muy buena herramienta para aprender a expandir la mente, y después de aprender Lisp correctamente, se volvió mucho más natural aprovechar las facilidades de meta programación en otros idiomas.
La sintaxis simple facilita la interpretación de las computadoras (permitiendo macros tan potentes y fáciles), pero hace muy difícil que un humano analice rápidamente expresiones complejas.
fuente
Las fortalezas de Clojure se han resaltado muchas veces y, por supuesto, crean un lenguaje muy poderoso, por lo que no las volveré a repetir aquí.
Siempre me encantó el lisp, desde los días de la universidad y estaba realmente emocionado cuando descubrí Clojure (¡quizás la posibilidad de usar lisp fuera de la academia por fin!). Sin embargo, cuando comencé a aprender, una sensación incómoda comenzó a aparecer, aunque no puedo precisar exactamente qué es lo que no me gusta. En primer lugar, diría que codificar en Common lisp fue fácil y divertido 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 suposición para mi misteriosa ligera repulsión. Creo que podría ser su gran flexibilidad. Por ejemplo, puede tener estructuras que son mitad vector y mitad mapa y con algunos caracteres de código puede aceptarlas como parámetros, separarlas y procesarlas correctamente. Sí, elimina todo el repetitivo, pero de alguna manera no se siente bien. Es como si nunca supieras muy bien las reglas bajo todos los paréntesis, dos puntos, corchetes, etc. están funcionando.
Para mí, todavía me encanta el lenguaje por todas sus ventajas (principalmente, ejecutar en la JVM y simplificar la concurrencia, a la vez que es mucho más poderoso y conciso que Java y con defectos de diseño menos obvios), pero aún no se sabe si algo podría haber sido mejorado
fuente