¿Cuáles son las diferencias clave entre Scala y Groovy?
(7)
Ambos son lenguajes orientados a objetos para la JVM que tienen lambdas y cierres e interoperan con Java. Aparte de eso, son extremadamente diferentes.
Groovy es un lenguaje "dinámico" no solo en el sentido de que está tipeado dinámicamente, sino que también admite metaprogramación dinámica.
Scala es un lenguaje "estático" en el sentido de que está tipado estáticamente y prácticamente no tiene una meta-programación dinámica más allá de las cosas torpes que puede hacer en Java. Tenga en cuenta que el sistema de tipo estático de Scala es sustancialmente más uniforme y sofisticado que el de Java.
Groovy está influenciado sintácticamente por Java pero influenciado semánticamente más por idiomas como Ruby.
Scala está influenciado sintácticamente por Ruby y Java. Semánticamente está influenciado por Java, SML, Haskell y un lenguaje OO muy oscuro llamado gBeta.
Groovy tiene un despacho múltiple "accidental" debido a la forma en que maneja la sobrecarga de Java.
Scala solo es un despacho único, pero tiene una coincidencia de patrones inspirada en SML para lidiar con algunos de los mismos tipos de problemas que el despacho múltiple debe manejar. Sin embargo, cuando 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. La coincidencia de patrones también incluye un enlace variable sintácticamente agradable. Es difícil sobreestresar lo agradable que es esta característica única que hace que la programación en Scala.
Tanto Scala como Groovy admiten una forma de herencia múltiple con mixins (aunque Scala los llama rasgos).
Scala admite la aplicación de funciones parciales y el currying en el nivel del idioma. Groovy tiene un método incomodo de "curry" para realizar una aplicación de función parcial.
Scala dirige la optimización de recursividad de cola. 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 son evaluados con impaciencia por defecto. Sin embargo, Scala admite parámetros de llamada por nombre. Groovy no lo hace: la llamada por nombre debe emularse con cierres.
Scala tiene "para las comprensiones", una generalización de la lista de comprensiones que se encuentran en otros idiomas (técnicamente son mónadas de comprensión más un poco - en algún lugar entre Haskell''s do y C # ''s LINQ).
Scala no tiene concepto de campos "estáticos", clases internas, métodos, etc. En su lugar, utiliza objetos singleton. Groovy usa el concepto estático.
Scala no ha incorporado una selección de operadores aritméticos de la misma manera que Groovy. En Scala puedes nombrar los métodos de manera muy flexible.
Groovy tiene el operador elvis para tratar con null. Los programadores de Scala prefieren usar los tipos de Opción para usar null, pero es fácil escribir un operador elvis en Scala si lo desea.
Finalmente, hay mentiras, hay malditas mentiras, y luego hay puntos de referencia. El juego de puntos de referencia del lenguaje de la computadora clasifica a Scala entre sustancialmente más rápido que Groovy (variando de dos a 93 veces más rápido) mientras conserva aproximadamente el mismo tamaño de fuente. benchmarks
Estoy seguro de que hay muchas, muchas diferencias que no he cubierto. Pero espero que esto te de una idea.
¿Hay una competencia entre ellos? Sí, por supuesto, pero no tanto como podría 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 otra persona.
En la superficie, Groovy y Scala se ven bastante similares, aparte de que Scala está tipado estáticamente y Groovy dynamic.
- ¿Cuáles son las otras diferencias clave y 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 va a ganar a largo plazo?
Has golpeado el clavo en la cabeza con el tipado estático y dinámico. Ambos son 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 las listas de forma un poco diferente; en Groovy, casi todo es una instancia de java.util.List, mientras que Scala usa listas y arreglos primitivos. Groovy tiene (creo) una mejor interpolación de cuerdas.
Parece que Scala es más rápido, pero la gente de Groovy realmente está presionando el rendimiento para la versión 2.0. 1.6 dio un gran salto de velocidad en la serie 1.5.
No creo que ninguno de los dos idiomas realmente "gane", ya que se enfocan en dos clases diferentes de problemas. Scala es un lenguaje de alto rendimiento que es muy similar a Java sin tener el mismo nivel de repetitivo que Java. Groovy es para prototipos rápidos y desarrollo, donde la velocidad es menos importante que el tiempo que les lleva a los programadores implementar el código.
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 desviar a los desarrolladores de Groovy para planear Java después de que lo hayan usado por algún tiempo, en mi experiencia.
No he usado mucho Scala y por eso no puedo decir mucho al respecto.
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 el uso de eval creó la clase scala en tiempo de ejecución. Yo diría que scala es meta programación y tiene características de complicación dinámica
Scala tiene Actores, que hacen que la concurrencia sea mucho más fácil de implementar. Y Rasgos que dan herencia múltiple verdadera y segura.
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 recursividad basada en la cola, lo que significa más herramientas para FP pura.
scala está destinado a ser un lenguaje híbrido oo / funcional y está muy bien planificado y diseñado. Groovy es más como un conjunto de mejoras que a muchas personas les 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.