Pregunta Scala vs. Groovy vs. Clojure [cerrado]


¿Puede alguien 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 simple comparación entre ellas.


676
2017-08-22 00:08


origen


Respuestas:


Groovy es un lenguaje de tipado dinámico, cuya sintaxis es muy similar a 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 y también compilarse, lo que lo hace ideal para prototipos rápidos, scripts y 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 apoyo creciente para compilación estática. Groovy admite cierres y tiene soporte para programar 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 parecido en JVM, Clojure es para ti. Es posiblemente el más Idioma funcional corriendo en la JVM, y ciertamente la más famosa. Además, tiene un énfasis más fuerte en inmutabilidad que otros dialectos Lisp, 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 más avanzados tipo de sistemas disponible en idiomas que no son de investigación, y sin duda el sistema de tipo 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 desanima a algunos entusiastas de este último.

Groovy tiene buena aceptación y un marco web popular en Grails. También impulsa el sistema de compilación Gradle, que se está convirtiendo en una alternativa popular a Maven. Personalmente, creo que es un lenguaje de utilidad limitada, sobre todo porque Jython y JRuby comienzan a incursionar en el JVM-land, 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. Podría limitar su popularidad, concedida, pero espero que tenga una comunidad leal a su alrededor durante mucho tiempo.

Scala puede competir directamente con Java y correr 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 obstaculizar 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 una revelación final, estoy muy familiarizado con Scala, y solo estoy familiarizado con los otros dos.


874
2017-08-22 02: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 en los casos en que se podría realizar una mejora clara o en caso de comprometer la naturaleza funcional del lenguaje. Tales diferencias incluyen objetos singleton en lugar de métodos estáticos, y type inference.

Gran parte de esto se basó en el trabajo previo de Martin Odersky con el Pizza idioma. La integración OO / FP va más allá de los simples cierres y ha llevado a que el lenguaje se describa como post-funcional.

A pesar de esto, es el más cercano a Java en muchos aspectos. Principalmente debido a una combinación de compatibilidad con OO y tipado estático, 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

  • ser tipeado dinámicamente, lo que elimina una gran cantidad de texto repetitivo y
  • agregando cierres al lenguaje.

Es quizás sintácticamente el más cercano a Java, que no ofrece algunos de los constructos funcionales más ricos que proporcionan Clojure y Scala, pero que aún ofrece una mejora evolutiva definitiva, especialmente para escribir programas de guiones.

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 la familia LISP, también está tipado dinámicamente.

Las características como el soporte STM le brindan la mejor compatibilidad de simultaneidad lista 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 :)


219
2017-09-16 22:01



Nunca tuve tiempo de jugar con Clojure. Pero para Scala vs Groovy, estas son las palabras de James Strachan - creador de Groovy

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

Puedes leer toda la historia aquí


68
2018-04-03 13:59



Se pueden diferenciar de dónde provienen o sobre qué desarrolladores se dirigen principalmente.

Groovy es un poco como la versión de scripting de Java. Los programadores de Java de mucho tiempo se sienten como en casa al desarrollar aplicaciones ágiles respaldadas por grandes arquitecturas. Groovy en Grails es, como su nombre lo sugiere, similar al framework 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 cercanos a este. Emplea bastantes ideas buenas comunes encontradas 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 este lenguaje.


30
2017-11-18 19:18



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 funciona exactamente como Java y renombrar el 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.


8
2017-08-22 00:33



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

Si está interesado en usarlos para programar una aplicación Java, Scala probablemente no sea una buena opción, ya que no es una manera fácil de evaluar es de Java, mientras que Groovy es especialmente adecuado para ese propósito.


4