Re: FreeMarker vs Velocity

Rémi Forax <[email protected]>
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
On 12/21/2010 12:17 PM, Jean-Baptiste BRIAUD -- Novlog wrote:
> On 21 déc. 2010, at 11:08, Rémi Forax wrote:
>
>> On 12/21/2010 11:03 AM, Jean-Baptiste BRIAUD -- Novlog wrote:
>>> Bonjour à tous,
>>>
>>> Nous utilisons Velocity et je sais que certaines personnes de la liste utilisent FreeMarker.
>>> Ce lien compare les deux produits :
>>> http://freemarker.sourceforge.net/fmVsVel.html
>>>
>>> ... bien que tenté je ne suis pas vraiment convaincu.
>>>
>>> Quels sont les éléments qui vous ont fait choisir FreeMarker ?
>>> Qu'en pensez-vous avec un peu de recul ?
>>>
>>> Utilisez-vous la partie template metaprogramming de FreeMarker ?
>>> l'API permet-elle de récupérer toutes les variables de template par exemple ?
>>>
>>> Merci !
>>>
>>>
>> La vrai question c'est pourquoi pas utiliser groovy:
>> http://groovy.codehaus.org/Groovy+Templates
>>
>> Au moins tu peux appeler du Java au milieu d'un template sans aucun problème.
>>
>> Rémi
> Ah oui, Groovy ... mais c'est tout un langage, non ?

oui, FreeMarker ou Velocity sont aussi des langages.
Le principe est le suivant, a partir d'un template on crée un arbre de 
syntax abstrait (AST)
qui correspond au code du genre 2 + 3
est codé:
    BinaryOp +
      ConstantExpression 2
      ConstantExpression 3

Instantié un template revient à parcourir l'AST et remplacer les noeuds 
correspondant à $(...)
par leurs valeurs.
Ici, intervient la principale différence entre Groovy et 
Velocity/FreeMarker, Groovy génére
à runtime le bytecode correspondant au template au lieu d'interpreter 
l'arbre,
donc ça va beucoup plus vite.

> Je ne suis pas sur de comprendre : je n'envisage pas de passer de Java à un autre langage, mais seulement de faire évoluer le "composant ou librairie de template".
> Est-ce possible avec Groovy ?

oui.
On appel Groovy en Java et à l'intérieur d'un script groovy, il est 
facile d'appeler du Java.

> Puis-je utiliser Groovy pour faire des templates, comme j'utilise aujourd'hui Velocity, au sein d'un programme Java ?

oui,
http://groovy.codehaus.org/Groovy+Templates

> Si oui, même question que pour FreeMarker, pourquoi migrer ?
> Quels seraient les avantages par rapport à Velocity ?
>
> Y a t-il un accès au métamodel du template ?
> Par exemple récupérer a liste complète des variables utilisées dans un template (attention aux IF et ELSE du template, il me faut toutes les variables).

C'est là que cela devient intéressant, en Groovy on peut obtenir l'AST 
du template/programme
pour effectuer des transformations ou simplement aller chercher des 
types particulier
de noeuds de l'arbre.
http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations

Pour moi l'intérêt de Groovy reside dans cette capacité à faire de la 
meta-programmation,
à compile time ou à runtime.

Maintenant, leur seul problème est la lenteur, c'est plus rapide que 
Velocity ou FreeMarker de loin
mais c'est aussi loin de la vitesse de Java. Donc utiliser Groovy pour 
tout un programme me semble pas
encore jouable à part si c'est pour faire des petits scripts ou alors 
dans le cas où Groovy offre quelque chose
que Java ne sait pas faire.

Rémi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.