Scala vs Groovy vs Clojure [cerrado]


¿Puede alguien explicar las principales diferencias entre Scala, Groovy y Clojure? Sé que cada uno de estos compilados se ejecutan en la JVM, pero me gustaría una comparación simple entre ellos.

Author: James Fassett, 2009-08-22

6 answers

Groovy es un lenguaje dinámicamente escrito, cuya sintaxis es muy cercana a Java, con una serie de mejoras sintácticas que permiten un código más ligero y menos repetitivo. Se puede ejecutar a través de un intérprete, así como 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 soporte creciente para compilación estática. Groovy soporta cierres y tiene soporte para 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 Memoria Transaccional de Software. Si te gusta Lisp y te gustaría usar algo así bajo la 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 más fuerte énfasis en inmutabilidad que otros dialectos Lisp, lo que lo lleva más cerca del corazón de los entusiastas del lenguaje funcional.

Scala es un lenguaje completamente orientado a objetos, más que Java, con uno de los sistemas de tipos más avanzados disponibles en lenguajes no investigativos, 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 en las características funcionales del lenguaje desalentaron a algunos entusiastas de este último.

Groovy tiene 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 hacer incursiones en la tierra de JVM, en comparación con los otros.

Clojure, incluso descontando algunas características muy interesantes, tiene un fuerte atractivo solo por ser un dialecto Lisp en JVM. Podría 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 carrera por su dinero en casi todos los aspectos. No puede competir en popularidad en este momento, 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 el perspectiva del lenguaje, eso es algo bueno. Desde la perspectiva de los usuarios que planean tener miles de líneas de código escritas en él, no es así.

Como revelación final, estoy muy familiarizado con Scala, y solo con los otros dos.

 874
Author: Daniel C. Sobral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-25 10:35:39

Scala

Scala evolucionó a partir de un lenguaje funcional puro conocido como Embudo y representa una implementación de sala limpia de casi toda la sintaxis de Java, que difiere solo donde se podría hacer una mejora clara o donde comprometería la naturaleza funcional del lenguaje. Tales diferencias incluyen objetos singleton en lugar de métodos estáticos, e inferencia de tipos.

Gran parte de esto se basó en el trabajo previo de Martin Odersky con el lenguaje Pizza. El OO / FP la integración va mucho más allá de los meros 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 aspectos. 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 que debe integrarse muy estrechamente con Java.

Groovy

Groovy aborda explícitamente dos de las mayores críticas de Java por

  • se escribe dinámicamente, lo que elimina una gran cantidad de y
  • añadiendo cierres al lenguaje.

Es quizás sintácticamente más cercano a Java, no ofreciendo algunas de las construcciones funcionales más ricas que proporcionan Clojure y Scala, pero aún ofreciendo una mejora evolutiva definida, especialmente para escribir programas script - syle.

Groovy tiene el respaldo comercial más fuerte de los tres idiomas, principalmente a través de springsource.

Clojure

Clojure es un lenguaje funcional en el Familia LISP, también se escribe dinámicamente.

Características como el soporte STM le dan algunos de los mejores 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 tengo que revelar que estoy más familiarizado con Scala:)

 219
Author: Kevin Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-01 18:57:14

Nunca tuve tiempo de jugar con Clojure. Pero para scala vs groovy, estas son palabras de James Strachan-Groovy creator

"Aunque mi consejo para el reemplazo a largo plazo de javac es Scala. Estoy muy impresionado con él! Honestamente puedo decir si alguien me hubiera mostrado la programación en Scala libro de Martin Odersky, Lex Spoon & Bill Venners en 2003 probablemente nunca habría creado Groovy."

Puedes leer toda la historia aquí

 68
Author: Thai Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-27 13:36:38

Se pueden diferenciar con su procedencia o con los desarrolladores a los que se dirigen principalmente.

Groovy es un poco como la versión de scripting de Java. Los programadores de Java desde hace mucho tiempo se sienten como en casa cuando construyen aplicaciones ágiles respaldadas por grandes arquitecturas. Groovy on Grails es, como su nombre indica, similar al framework Rails. Para las personas que no quieren molestarse con la verbosidad de Java todo el tiempo.

Scala es un objeto orientado y funcional el lenguaje de programación y los programadores de Ruby o Python pueden sentirse más cerca de este. Emplea una gran cantidad de 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.

 30
Author: Mehmet Duran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-22 15:28:40

Estoy leyendo el libro de Programadores Pragmáticos "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 funciona 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 soportar esto fuera.

 8
Author: Jim Collings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-18 19:18:54

Obviamente, la sintaxis es completamente diferente (Groovy es la más cercana a Java), pero supongo que eso no es lo que estás pidiendo.

Si está interesado en usarlos para crear scripts en 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.

 4
Author: Thilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:48