Groovy 2.5 på gaden - og 3'er på vej med flere kode-transformationer

Makroer i Groovy 2.5 kan give endnu mere knald på metagprogrammeringen.

Groovy 2.5 er fornylig blevet frigivet, og Groovy 3.0 er så småt på vej. Alpha 3 har været tilgængelig siden slutningen af ​​juni, og beta-versioner er planlagt til senere i år. Det færdige produkt forventes færdigt i starten af næste år.

Blandt nyhederne er en ny parser, med navnet Parrot.

Paul King, som er en central person i Groovy-miljøet, forklarer således om den nye parser til teknologibloggen Infoq:

»Groovys parser gør sit arbejde i flere faser. De første faser omskaber kildekoden til et abstrakt syntakstræ (AST). De senere faser konverterer AST til bytecode, som kører på JVM'en på næsten samme måde, som bytecode produceret fra en Java-compiler gør.«

Med Parrot-parseren er der tale om en helt ny måde at håndtere de tidlige kompileringstrin. Det skulle gøre miljøet mere fleksibelt og gøre det nemmere at inkorporere ændringer fra Java, så Groovy kan opnå 'cut-n-paste'-kompatibilitet med Java.

Læs også: Produktivitet fik konsulentfirma til at fravælge Java

I Groovy 2.5 er nyhederne blandt andet en makro-facilitet, der gør det nemmere at foretage metaprogrammering med AST-transformationer.

Det uddybes således i udgivelsesnoterne:

Hvis udvikleren eksempelvis vil skabe en @Info-transformation, som skaber en getInfo()-metode, når den indsættes i en klasse, har den traditionelle fremgangsmåde været noget i denne stil:

...
def clazz = new MethodCallExpression(new VariableExpression("this"), "getClass", EMPTY_ARGUMENTS)
def body = new ExpressionStatement(new MethodCallExpression(clazz, "getName", EMPTY_ARGUMENTS))
classNode.addMethod('getInfo', ACC_PUBLIC, STRING_TYPE, EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, body)
...

Med den nye makro-facilitet kan de to første linjer se sådan ud:

def body = macro(true) { getClass().name }

Det er også muligt at parametrisere makroerne, som med $v herunder :

def date = new ConstantExpression(new Date().toString())
def version = new ConstantExpression(GroovySystem.version)
def body = macro(true) {
    """\
    Name: ${getClass().name}
    Compiled: ${$v{ date }}
    Using Groovy version: ${$v{ version }}""".stripIndent()
}

Der er mere information om Groovy 2.5 i udgivelsesnoterne.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (0)
Log ind eller Opret konto for at kommentere
Pressemeddelelser

Welcome to the Cloud Integration Enablement Day (Bring your own laptop)

On this track, we will give you the chance to become a "Cloud First" data integration specialist.
15. nov 2017

Silicom i Søborg har fået stærk vind i sejlene…

Silicom Denmark arbejder med cutting-edge teknologier og er helt fremme hvad angår FPGA teknologien, som har eksisteret i over 20 år.
22. sep 2017

Conference: How AI and Machine Learning can accelerate your business growth

Can Artificial Intelligence (AI) and Machine Learning bring actual value to your business? Will it supercharge growth? How do other businesses leverage AI and Machine Learning?
13. sep 2017
Jobfinder Logo
Job fra Jobfinder