Scala contra Groovy contra Clojure [cerrado]
¿Alguien puede explicar las principales diferencias entre Scala, Groovy y Clojure? Sé que cada una de estas compilaciones se ejecuta en la JVM, pero me gustaría una comparación simple entre ellas.
Groovy es un lenguaje de tipado dinámico, cuya sintaxis es muy parecida a la de Java, con una serie de mejoras de sintaxis que permiten un código más ligero y menos repetitivo. Puede ejecutarse a través de un intérprete además de compilarse, lo que lo hace bueno para la creación rápida de prototipos, scripts y el aprendizaje de lenguajes dinámicos sin tener que aprender una nueva sintaxis (suponiendo que conozca Java). A partir de Groovy 2.0, también tiene un soporte creciente para la compilación estática . Groovy admite cierres y admite programación en un estilo algo funcional, aunque todavía está bastante lejos de la definición tradicional de programación funcional.
Clojure es un dialecto de Lisp con algunas características avanzadas como la memoria transaccional de software . Si te gusta Lisp y te gustaría usar algo parecido en JVM, Clojure es para ti. Es posiblemente el lenguaje más funcional que se ejecuta en JVM y, sin duda, el más famoso. Además, tiene un mayor énfasis en la inmutabilidad que otros dialectos Lisp, lo que lo acerca al corazón de los entusiastas del lenguaje funcional.
Scala es un lenguaje totalmente orientado a objetos, más que Java, con uno de los sistemas de tipos más avanzados disponibles en lenguajes que no son de investigación y, sin duda, el sistema de tipos más avanzado en la JVM. También combina muchos conceptos y características de los lenguajes funcionales, sin comprometer la orientación a objetos, pero su compromiso con las características del lenguaje funcional desanimó a algunos entusiastas de este último.
Groovy tiene buena aceptación y un marco web popular en Grails. También impulsa el sistema de construcción Gradle, que se está convirtiendo en una alternativa popular a Maven. Personalmente creo que es un lenguaje con utilidad limitada, particularmente ahora que Jython y JRuby comienzan a hacer avances en el terreno JVM, en comparación con los demás.
Clojure, incluso descontando algunas características muy interesantes, tiene un gran atractivo simplemente por ser un dialecto Lisp en JVM. Puede que limite su popularidad, por supuesto, pero espero que tenga una comunidad leal a su alrededor durante mucho tiempo.
Scala puede competir directamente con Java y competir con él en casi todos los aspectos. Por supuesto, no puede competir en popularidad en este momento, y la falta de un fuerte respaldo corporativo puede dificultar su aceptación en los entornos corporativos. También es un lenguaje mucho más dinámico que Java, en el sentido de cómo evoluciona el lenguaje. Desde la perspectiva del idioma, eso es algo bueno. Desde la perspectiva de los usuarios que planean tener miles de líneas de código escritas, no es así.
Como revelación final, estoy muy familiarizado con Scala y solo conozco los otros dos.
escala
Scala evolucionó a partir de un lenguaje funcional puro conocido como Funnel y representa una implementación limpia de casi toda la sintaxis de Java, diferenciándose sólo donde se podría realizar una mejora clara o donde comprometería la naturaleza funcional del lenguaje. Estas diferencias incluyen objetos únicos en lugar de métodos estáticos y la inferencia de tipos.
Gran parte de esto se basó en el trabajo anterior de Martin Odersky con el lenguaje Pizza . La integración OO/FP va mucho más allá de meros cierres y ha llevado a que el lenguaje sea descrito como posfuncional.
A pesar de esto, es el más cercano a Java en muchos sentidos. Principalmente debido a una combinación de soporte OO y escritura estática, pero también debido a un objetivo explícito en el diseño del lenguaje de que debería integrarse muy estrechamente con Java.
maravilloso
Groovy aborda explícitamente dos de las mayores críticas de Java al
- siendo escrito dinámicamente, lo que elimina una gran cantidad de texto repetitivo y
- agregando cierres al lenguaje.
Quizás sea sintácticamente lo más cercano a Java, ya que no ofrece algunas de las construcciones funcionales más ricas que proporcionan Clojure y Scala, pero aún ofrece una mejora evolutiva definitiva, especialmente para escribir programas de estilo script.
Groovy tiene el respaldo comercial más fuerte de los tres idiomas, principalmente a través de Springsource.
Clojure
Clojure es un lenguaje funcional de la familia LISP, también se escribe dinámicamente.
Funciones como la compatibilidad con STM le brindan el mejor soporte de concurrencia listo para usar, mientras que Scala requiere una biblioteca de terceros como Akka para duplicar esto.
Sintácticamente, también es el más alejado de los tres lenguajes del código Java típico.
También debo revelar que conozco mejor Scala :)
Nunca tuve tiempo de jugar con clojure. Pero para Scala vs Groovy, estas son palabras de James Strachan, creador de Groovy.
"Aunque mi consejo para el reemplazo a largo plazo de javac es Scala. ¡Estoy muy impresionado con él! Honestamente puedo decir que si alguien me hubiera mostrado el libro Programación en Scala de Martin Odersky, Lex Spoon y Bill Venners en 2003, Probablemente nunca habría creado Groovy."
Puede leer la historia completa aquí
Se pueden diferenciar según su procedencia o a qué desarrolladores se dirigen principalmente.
Groovy es un poco como una versión de secuencias de comandos de Java. Los programadores de Java desde hace mucho tiempo se sienten como en casa cuando crean aplicaciones ágiles respaldadas por grandes arquitecturas. Groovy on Grails es, como su nombre indica, similar al marco Rails. Para personas que no quieren preocuparse por la verbosidad de Java todo el tiempo.
Scala es un lenguaje de programación funcional y orientado a objetos y los programadores de Ruby o Python pueden sentirse más cercanos a este. Emplea muchas buenas ideas comunes que se encuentran en estos lenguajes de programación.
Clojure es un dialecto del lenguaje de programación Lisp por lo que los desarrolladores de Lisp, Scheme o Haskell pueden sentirse como en casa mientras desarrollan con este lenguaje.
Estoy leyendo el libro de Pragmatic Programmers "Groovy Recipes: Greasing the wheels of Java" de Scott Davis, Copyright 2008 e impreso en abril del mismo año.
Está un poco desactualizado pero el libro deja claro que Groovy es literalmente una extensión de Java. Puedo escribir código Java que funcione exactamente como Java y cambiar el nombre del archivo *.groovy y funciona bien. Según el libro, ocurre lo contrario si incluyo las bibliotecas necesarias. Hasta ahora, la experimentación parece confirmarlo.