Java and the Duke logo are trademarks of Sun Microsystems, Inc.
Lenguajes de Scripting en ambientes Java (Scala y Groovy) PDF Imprimir E-Mail
Escrito por Martin Cabrera   
viernes, 01 de febrero de 2008

No hay que ser muy audaz para darse cuenta que gran parte de la comunidad está poniendo todos sus esfuerzos en incorporar lenguajes de mejor productividad que Java.
En este enfoque tenemos varias opciones que no se apartan de Java (temas estratégicos, de ambiente, comunidad, popularidad, etc.). Estos lenguajes utilizan a la JVM como interprete de su bytecode generado. Los dos lenguajes más populares con este enfoque son: groovy y scala
Si bien existen otras opciones que adecuan otros lenguajes generando .class como JRuby su origen (Ruby) no tiene ese enfoque.

Este post no pretende comparar groovy y scala, simplemente la idea es introducirlos comentando mis impresiones. A mi entender este tema (lenguajes de alta productividad en Java) es uno de los puntos que debemos atacar en este 2008.

Groovy (http://groovy.codehaus.org/)
Muy popular en la Web y en Uruguay. Particularmente conozco empresas que desarrollan utilizando este lenguaje. Tuvimos una de ellas en el evento de octubre del año pasado.
El gran atractivo que encuentro en este lenguaje es la facilidad que tiene un desarrollador Java de comenzar a crear código groovy. Podemos escribir código groovy exactamente igual al código Java y a partir de que comenzamos a conocerlo utilizamos las ventajas sintácticas de este lenguaje.

Scala (http://www.scala-lang.org/)
Groovy no es la única opción de un lenguaje de gran productividad basado en Java que genera bytecode Java (*.class).
Scala es otro lenguaje con similares características. Si bien encuentro en scala un lenguaje un tanto más complejo que groovy, los pocos ejemplos que generé los hice con tiempos realmente bajos.
La sintaxis de scala es muy simple y para mi gusto más productiva que groovy (claro que depende en gran medida de mi y no es un dato para tener en cuenta).
Mirando en la Web encontré muchos lugares que analizan la performance de código groovy y scala sobre JVM. Los rendimientos (por poco) son mejores en scala que en groovy.

En posteriores post pretendo desarrollar este tema como se merece. Si hay algún interesado en trabajar este tema conmigo … bienvenido!!! Me puede enviar un mail a: Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla

Comentarios
Ańadir nuevoBuscarRSS
barspi IP:190.64.217.66 | 11-02-2008 11:36:59
Hola Martin.

En lo personal, mi mayor experiencia es en Groovy (ya hace como dos años).

Algunas opiniones/observaciones sobre lo que decis:

Primero hay que tener cuidado con la palabra scripting pues en mucha gente da una idea equivocada de "Lenguaje interpretado para hacer programas cortitos". En realidad Groovy cumple muy bien esa funcion (podes hacer "scripts" utiles y poderosos en unas pocas lineas), pero es un lenguaje compilado, no interpretado. Siempre es compilado aunque sea on the fly y de la impresion de que podes ejecutar scripts .groovy directamente. Tambien puede ser embebido en Java usando las especificaciones del JSR-223 (la verdad, nunca lo use asi). Sin embargo se pueden hacer perfectamente aplicaciones standalone grandes en Groovy, y siempre compilado y metido adentro de un jar si queres. En cuanto a Scala, no se si cae en esta categoria o no. Lo poco que lei hace tiempo me parecio mas bien lo que Java deberia haber sido al principio si no lo hubieran amputado aqui y alla para salir rapido al mercado con un lenguaje y plataforma sencilla :-). Hay mucha gente que critica Java por esas cosas, y seguira criticando eternamente, pero tampoco me parece una mala decision en su momento y ha permitido mas de una decada de explosion de software, open source, etc.

Otros pensamientos. A pesar de que Groovy y Scala compartan algunas cosas a nivel de lenguaje, donde se diferencian de Java, creo que pertenecen a dos categorias distintas. Scala, hasta donde se, es un lenguaje estaticamente tipado, y sin capacidades reales de metaprogramacion. Pero por medio de una sintaxis bastante extensa y variada (no estoy de acuerdo con que es simple sino que produce codigo relativamente limpio, pero la sintaxis es mucho mas grande que Java), Scala permite hacer varios trucos de expresividad que un lenguaje muy restringido tenaza como Java no permite. Pero sigue siendo un lenguaje estatico, donde el compilador te va a avisar de todo, lo cual es bueno. El problema es que si Scala hubiera salido en 1995 lo habrian usado aun menos personas que ahora :-)

Groovy por otra parte es un lenguaje de tipos dinamicos opcionales, porque tambien podes declarar tus tipos estaticamente:

def a= 3
int b= 4

Solo que el compilador practicamente no te va a avisar de nada, sino que la
informacion de tipo se usa recien en el runtime (y ahi te saltaran excepciones). Tambien esto da, por ahora, un poco menos de performance al declarar tipos, puesto que el runtime debe estar verificando si son compatibles. Pero el hecho de que se puedan declarar los tipos permite que Groovy sea el lenguaje dinamico para la JVM que mejor se integra con el universo de librerias Java (con metodos sobrecargados, etc.) Es natural y transparente interactuar con Java desde Groovy. Tambien Groovy es un lenguaje dinamico, con amplias capacidades de metaprogramacion, donde podes hacer muchas cosas en el runtime, como agregar o modificar metodos a una clase, o a un objeto en particular, o solo dentro del contexto de este Thread. Y podes interceptar invocaciones a metodos, o a metodos que no existen, dando la apariencia de que si existen. Podes agregar propiedades dinamicamente a un objeto. Todo eso (junto con mucha "syntactic sugar" que permite obviar parentesis, puntos y comas, crear closures tan solo abriendo y cerrando llaves, crear mapas y listas literales, etc.) permite inventar DSLs muy facilmente, al nivel de facilidad que permite Ruby, pero siempre siendo Java al fin y al cabo.

Para ir cerrando, el mayor "problema" que tal vez tenga Groovy por ahora es la performance. Esto se debe sencillamente a las prestaciones dinamicas del lenguaje. Cada vez que invocas a un metodo o usas practicamente cuaquier operador en Groovy, se disparan un monton de cosas que verifican otro monton de cosas hasta encontrar realmente cual es el metodo. Pero eso tambien esta mejorando. Desde Groovy 1.0 que salio hace 1 año, hasta el 1.5 (1.5.4) que acaba de salir hace menos de dos meses, la performance mejoro *muchisimo*. Y en el Groovy 1.6 que esta en beta, el otro dia estuve haciendo tests y la performance vuelve a mejorar entre 2 y 4 veces. Todo esto manteniendo las capacidades de metaprogramacion que obviamente lo hacen mas lento. Como siempre, es un trade-off. (Los planes para Groovy 2.0 incluyen reescribir todo el meta-object protocol, con muchos trucos que mejorarian aun mas la performance).

Bueno, disculpen si esto salio entreverado pero en esta ventanita de 2x2 no puedo escribir muy coherentemente jeje..

P.D. Todavia les debo la version actualizada de la presentacion de Groovy!
gerardo - Muy buen aporte Super Administrator | 11-02-2008 18:22:07
Muchas gracias por el aporte, además de muchas explicaciones y conceptos teóricos que vienen bien, la experiencia que tenés en el uso del lenguaje es un plus importante!!!!!!!!
martin - caiste Barzilai Super Administrator | 12-02-2008 04:58:11
Me encantan tus comentarios, obviamente no conozco Groovy como lo conces vos. Sobre Scala tengo el gusto de conocerlo por medio de ejemplos simples y medianos (no hice una aplicación real).

Mi idea en el post era subir mi primera impresión para ver el eco en el grupo y ver si alguien quería aportar sus inquietudes (tal cual como lo hiciste vos ... aunque un poco extenso ;) )

Este es un tema que me llama la atención y me apasiona. Si les parece y te parece Barzilai, podriamos armar algo para presentar en algún taller del grupo.

Saludos,
Martin
barspi Registered | 12-02-2008 06:34:57
Releyendo lo que escribi, no me entiendo ni la mitad de lo que puse jeje. E73staba trabajando desde la noche anterior y me faltaba dormir.

Tal vez lo que podemos hacer para una proxima reunion de Juguy (mas pequeña e informal que el evento anual), es que vos te estudies Scala y yo actualizo lo de Groovy, con mas ejemplos y al ser menos se puede hacer mas interactivo.
ˇSólo los usuarios registrados pueden escribir comentarios!
Modificado el ( jueves, 07 de febrero de 2008 )
 
Siguiente >

Ingresar






¿Recuperar clave?
¿Quiere registrarse? Regístrese aquí

Usuarios conectados

Hay 1 invitado y 2 usuarios en línea
  • lscasso
  • canario1616

Cuestionario

¿Que tema elegirías para tratar en el próximo evento del jug?
 

Syndicate

joomla templates by dezinedepot
© 2008 Juguy - Grupo de Usuarios Java del Uruguay
Joomla! es Software Libre distribuido bajo licencia GNU/GPL.