¿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.
¿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.
Respuestas:
Groovy es un lenguaje de tipo dinámico, cuya sintaxis está muy cerca 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 ser compilado, 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 la 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 similar en JVM, Clojure es para ti. Es posiblemente el lenguaje más funcional que se ejecuta en la JVM, y ciertamente el más famoso. Además, tiene un mayor énfasis en la inmutabilidad que otros dialectos de 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 ciertamente el sistema de tipos más avanzado en la JVM. También combina muchos conceptos y características de lenguajes funcionales, sin comprometer la orientación del objeto, pero su compromiso con las características del lenguaje funcional desanimó a algunos entusiastas de este último.
Groovy tiene una buena aceptación y un marco web popular en Grails. También alimenta el sistema de construcción Gradle, que se está convirtiendo en una alternativa popular a Maven. Personalmente, creo que es un lenguaje con una utilidad limitada, particularmente cuando Jython y JRuby comienzan a incursionar en la tierra 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 de Lisp en JVM. Puede limitar su popularidad, por supuesto, pero espero que tenga una comunidad leal a su alrededor durante mucho tiempo.
Scala puede competir directamente con Java y darle una oportunidad por su dinero en casi todos los aspectos. Por el momento, no puede competir en popularidad, por supuesto, 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 lenguaje, 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 a los otros dos.
Scala evolucionó a partir de un lenguaje funcional puro conocido como Funnel y representa una implementación de sala limpia de casi toda la sintaxis de Java, que difiere solo donde se puede hacer una mejora clara o donde se compromete la naturaleza funcional del lenguaje. Dichas diferencias incluyen objetos singleton en lugar de métodos estáticos, y la inferencia de tipos.
Gran parte de esto se basó en el trabajo previo de Martin Odersky con el lenguaje Pizza . La integración OO / FP va mucho más allá de los simples cierres y ha llevado al lenguaje a ser descrito como post-funcional.
A pesar de esto, es el más cercano a Java en muchos sentidos. Principalmente debido a una combinación de soporte OO y tipeo estático, pero también debido a un objetivo explícito en el diseño del lenguaje que debería integrarse muy estrechamente con Java.
Groovy aborda explícitamente dos de las mayores críticas de Java al
Quizás sea sintácticamente más cercano a Java, 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 script-syle.
Groovy tiene el respaldo comercial más sólido de los tres idiomas, principalmente a través de springsource.
Clojure es un lenguaje funcional en la familia LISP, también se escribe dinámicamente.
Las características como el soporte 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 idiomas del código Java típico.
También tengo que revelar que estoy más familiarizado con Scala :)
Nunca tuve tiempo de jugar con clojure. Pero para scala vs groovy, estas son palabras de James Strachan - Creador maravilloso
"Aunque mi consejo para el reemplazo a largo plazo de javac es Scala. ¡Estoy muy impresionado con eso! Puedo decir honestamente que si alguien me hubiera mostrado el libro de Programación en Scala de Martin Odersky, Lex Spoon y Bill Venners en 2003 I probablemente nunca habría creado Groovy ".
Puedes leer la historia completa aquí
Se pueden diferenciar de dónde provienen o a qué desarrolladores se dirigen principalmente.
Groovy es un poco como la versión de Java de secuencias de comandos. Los programadores Java desde hace mucho tiempo se sienten como en casa al crear aplicaciones ágiles respaldadas por grandes arquitecturas. Groovy on Grails es, como su nombre indica, similar al marco de Rails. Para las personas que no quieren molestarse con 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 cerca de 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 para que los desarrolladores de Lisp, Scheme o Haskell se sientan como en casa mientras desarrollan con este lenguaje.
Estoy leyendo el libro 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 en 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, lo contrario es cierto si incluyo las bibliotecas necesarias. Hasta ahora, la experimentación parece confirmar esto.
Obviamente, la sintaxis es completamente diferente (Groovy es la más cercana a Java), pero supongo que eso no es lo que está pidiendo.
Si está interesado en usarlos para ejecutar una aplicación Java, Scala probablemente no sea una buena opción, ya que no hay una manera fácil de evaluarlo desde Java, mientras que Groovy es especialmente adecuado para ese propósito.
eval
requiere.