¿Cuáles son las principales diferencias entre Scala y Groovy? [cerrado]


En la superficie, Groovy y Scala se ven bastante similares, aparte de que Scala se escribe estáticamente y Groovy dynamic.

  • ¿Cuáles son las otras diferencias clave, y las ventajas que cada uno tiene sobre el otro?
  • ¿Qué tan similares son realmente?
  • hay competencia entre los dos?
    • Si es así, ¿quién crees que ganará a largo plazo?
 122
Author: Leif, 2009-04-03

7 answers

Ambos son lenguajes orientados a objetos para la JVM que tienen lambdas y closures e interoperan con Java. Aparte de eso, son extremadamente diferentes.

Groovy es un lenguaje "dinámico" no solo en el sentido de que se escribe dinámicamente, sino que soporta la meta-programación dinámica.

Scala es un lenguaje "estático" en el sentido de que está escrito estáticamente y prácticamente no tiene metaprogramación dinámica más allá de las cosas incómodas que se pueden hacer en Java. Nota, el tipo estático de Scala el sistema es sustancialmente más uniforme y sofisticado que el de Java.

Groovy está sintácticamente influenciado por Java pero semánticamente influenciado más por lenguajes como Ruby.

Scala está sintácticamente influenciado por Ruby y Java. Está semánticamente influenciado más por Java, SML, Haskell, y un lenguaje OO muy oscuro llamado gBeta.

Groovy tiene un envío múltiple "accidental" debido a la forma en que maneja la sobrecarga de Java.

Scala es un solo despacho, pero tiene SML inspirado patrón de coincidencia para hacer frente a algunos de los mismos tipos de problemas que múltiples despacho está destinado a manejar. Sin embargo, donde el envío múltiple solo puede enviarse en el tipo de tiempo de ejecución, la coincidencia de patrones de Scala puede enviarse en tipos de tiempo de ejecución, valores o ambos. Pattern matching también incluye encuadernación variable sintácticamente agradable. Es difícil exagerar lo agradable que esta sola característica hace que la programación en Scala.

Tanto Scala como Groovy admiten una forma de múltiples herencia con mixins(aunque Scala los llama rasgos).

Scala soporta tanto la aplicación de funciones parciales como el currying a nivel de lenguaje, Groovy tiene un método "curry" incómodo para hacer la aplicación de funciones parciales.

Scala realiza una optimización de recursión de cola directa. No creo que Groovy lo haga. Eso es importante en la programación funcional pero menos importante en la programación imperativa.

Tanto Scala como Groovy se evalúan con entusiasmo por defecto. Sin embargo, Scala soporta parámetros de llamada por nombre. Groovy does not-call-by-name debe ser emulado con cierres.

Scala tiene "for comprehensions", una generalización de las comprensiones de listas que se encuentran en otros lenguajes (técnicamente son comprensiones de mónadas más un poco - en algún lugar entre do de Haskell y LINQ de C#).

Scala no tiene el concepto de campos "estáticos", clases internas, métodos, etc. - usa objetos singleton en su lugar. Groovy utiliza el concepto estático.

Scala no tiene incorporado selección de operadores aritméticos de la misma manera que lo hace Groovy. En Scala puede nombrar métodos de manera muy flexible.

Groovy tiene el operador de elvis para tratar con null. Los programadores de Scala prefieren usar tipos de opciones a usar null, pero es fácil escribir un operador de elvis en Scala si lo desea.

Finalmente, hay mentiras, hay malditas mentiras, y luego hay puntos de referencia. El juego computer language benchmarks clasifica a Scala como sustancialmente más rápido que Groovy (que van de dos veces a 93 veces más rápido) manteniendo aproximadamente el mismo tamaño de fuente. puntos de referencia.

Estoy seguro de que hay muchas, muchas diferencias que no he cubierto. Pero espero que esto te dé una idea.

Hay una competencia entre ellos? Sí, por supuesto, pero no tanto como podrías pensar. La verdadera competencia de Groovy es JRuby y Jython.

Quién va a ganar? Mi bola de cristal está tan agrietada como la de cualquier otro.

 218
Author: James Iry,
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-04-03 00:09:48

Scala está destinado a ser un lenguaje híbrido oo/funcional y es muy bien planificado y diseñado. groovy es más como un conjunto de mejoras que a mucha gente le encantaría usar en Java. eché un vistazo más de cerca a ambos, así que puedo decir:)

Ninguno de ellos es mejor o peor que el otro. groovy es muy bueno en meta-programación, scala es muy bueno en todo lo que no necesita meta-programación, así que...tiendo a usar ambos.

 12
Author: hamsterofdeath,
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-01-14 19:57:49

Scala tiene actores, que hacen que la concurrencia sea mucho más fácil de implementar. Y los rasgos que dan verdadera, typesafe herencia múltiple.

 11
Author: jasonnerothin,
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-04-03 02:40:06

Has dado en el clavo con la escritura estática y dinámica. Ambos forman parte de la nueva generación de lenguajes dinámicos, con cierres, expresiones lambda, etc. Hay un puñado de diferencias sintácticas entre los dos también, pero funcionalmente, no veo una gran diferencia entre Groovy y Scala.

Scala implementa Listas un poco diferentes; en Groovy, casi todo es una instancia de java.útil.List, mientras que Scala usa tanto Listas como arrays primitivos. Groovy tiene (creo) una mejor interpolación de cadenas.

Scala es más rápido, parece, pero la gente Groovy realmente están empujando el rendimiento para la versión 2.0. 1.6 dio un gran salto en velocidad sobre la serie 1.5.

No creo que ninguno de los dos idiomas realmente "gane", ya que se dirigen a dos clases diferentes de problemas. Scala es un lenguaje de alto rendimiento que es muy similar a Java sin tener el mismo nivel de repetición que Java. Groovy es para la creación rápida de prototipos y el desarrollo, donde la velocidad es menos importante que el tiempo que les toma a los programadores implementar el código.

 7
Author: Don Werve,
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-04-02 22:56:51

Hemos utilizado ampliamente Groovy y podemos decir con confianza que es extremadamente bueno en el desarrollo de aplicaciones web de calidad de producción, no solo para la creación de prototipos. Es muy fácil de usar y permite un desarrollo rápido, tanto que es difícil alejar a los desarrolladores de Groovy para planificar Java después de que lo hayan usado por algún tiempo, en mi experiencia.

No he usado mucho Scala, así que no puedo decir mucho al respecto.

 6
Author: Angsuman Chakraborty,
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-05-25 01:06:38

Scala tiene una curva de aprendizaje mucho más pronunciada que Groovy. Scala tiene mucho más soporte para la programación funcional con su coincidencia de patrones y recursión basada en cola, lo que significa más herramientas para FP puro.

 5
Author: More Than Five,
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
2014-04-07 21:38:42

Scala también tiene compilación dynamica y lo he hecho usando twitter eval lib ( https://github.com/twitter/util ). Mantuve el código scala en un archivo plano (sin ninguna extensión) y usando la clase scala creada por eval en tiempo de ejecución. Yo diría que scala es meta programación y tiene característica de complicación dinámica

 0
Author: Veerbhan Tahlani,
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-07-14 12:20:37