Groovy 1.8 publicado al fin
Ha sido publicada la nueva versión del lenguaje Groovy, la 1.8, que es una versión que los comitters del proyecto han estado trabajando por varios meses. En esta versión se incluyen importantes mejoras, que puedes leer en las Release Notes, entre ellas destacan:
Cadenas de comando para mejores DSL.
En Groovy, se pueden omitir los paréntesis para invocar a un método; lo que facilita la creación de DSLs. Sin embargo, no se podía hacer si se encadenaban invocaciones a métodos. En la 1.8 ya es posible, así podemos pasar de esto:
check(that: margarita).tastes(good)
a un DSL mucho más legible:
check that: margarita tastes good
Un ejemplo completo de las Release Notes:
show = { println it }
square_root = { Math.sqrt(it) }
def please(action) {
[the: { what ->
[of: { n -> action(what(n)) }]
}]
}
please show the square_root of 100
Mejor performance
La desventaja que la mayoría señalan de Groovy es sin duda el performance, lento en comparación a Java. En esta versión se ha mejorado el soporte a Integers. Las operaciones con este tipo de datos es tan rápida como en Java y se ha mejorado la parte de invocación directa a métodos. Además se ha creado un branch en el proyecto donde se irán incorporando poco a poco otras mejoras, como el uso de primitivos donde sea posible.
Soporte a JSON nativo
Ahora tenemos un JSONBuilde y un JSONSluper que nos ayudan a generar y leer documentos en ese formato
GPars es parte de la distribución oficial
El proyecto de Paul King: GPars, ahora vendrá en la distribución oficial. Este proyecto permite construir aplicaciones concurrentes, asíncronas y distribuidas con Groovy. Para ello tiene soporte para ejecutar closures de forma asíncrona, trabajar con colecciones de forma paralela y Actores para procesamiento concurrente.
Transformaciones AST.
Para mi, lo que más he esperado de Groovy 1.8. Los que pudistéis asistir al Spring I/O, Andrés Almiray dio una charla donde explicaba el gran número de transformaciones AST que se han agregado a esta versión. Estas transformaciones permiten mediante anotaciones indicarle al compilador de Groovy que haga modificaciones en el Abstract Syntax Tree para agregar comportamiento a una clase que antes no tenía. Por lo que tienen mejor performance que usar el antiguo método de modificar la meta clase y además este comportamiento vendrá en el bytecode logrando que desde otros lenguajes de la JVM puedan "verlo".
Entre las más interesantes:
@Log, @Log4j, @Commons, @SLF4J -> agrega un logger a tu clase con la implementación que hayas puesto.
@EqualsAndHashCode -> construye el método equals y el hashcode basado en los atributos de tu clase
@ToString -> autoexplicativo
@WithReadLock, @WithWriteLock -> simplica el uso de java.util.concurrent.locks.ReentrantReadWriteLock para construir el típico mapa para cache thread safe:
class ResourceProvider {
private final Map data = new HashMap<>()
@WithReadLock
String getResource(String key) {
return data.get(key)
}
@WithWriteLock
void refresh() {
//reload the resources into memory
}
}
Enhorabuena al equipo de Groovy que han seguido trabajando en mejorar uno de los lenguajes más populares de la JVM.
Los que estáis interesados en aprender Groovy aquí podéis acceder a dos videos- tutoriales introductorios (en español). Y los que cree saber más sobre DSL en Groovy podéis ver estos otros dos videos (también en español).
Reader Comments