Groovy

Fiche logiciel validé
  • Création ou MAJ importante : 24/07/12
  • Correction mineure : 04/06/19
Mots-clés
Pour aller plus loin
  • Fiches logiciel PLUME connexes : ,

Groovy : langage dynamique sur la machine virtuelle Java

Description
Fonctionnalités générales

Groovy est un langage et un écosystème destinés à s’exécuter sur la machine virtuelle Java. Introduisant des concepts inspirés de Ruby et Python tout en conservant continuité et cohérence au sein de l’environnement Java, il est totalement interopérable avec lui.

L’objectif avoué de Groovy n’est pas de supplanter Java, mais de fournir un outil complémentaire plus simple et plus productif aux utilisateurs de l’univers Java.

Langage

Groovy est, tout comme Java,  un langage orienté objet.

La syntaxe

La syntaxe de Groovy repose volontairement sur celle de Java, afin de faciliter la courbe d’apprentissage des développeurs Java. Elle s’enrichie de simplifications ou des raccourcis syntaxiques (dit «syntactic sugar» ou «sucres syntaxiques») dictés par le pragmatisme et la lisibilité.

Parmi les éléments remarquables, citons :

  • les listes ou dictionnaires sont nativement symbolisés comme élément de langage 
  • le point-virgule de fin d’instruction ou les try/catch sont facultatifs
  • Les importations des bibliothèques java les plus utilisées sont implicites
  • Les classes java usuelles (String, File, Date…) sont complétées par des méthodes pragmatiques

Dynamisme

Groovy est un langage dynamique dont les instructions sont interprétées à l’exécution permettant une plus grande souplesse d’usage que le typage statique. Groovy utilise la méta programmation, il est ainsi possible de faire évoluer en cours d’exécution des définitions ou des comportements de classes ou d’objets sans avoir à recompiler le programme. Par exemple on peut ajouter contextuellement ou durablement des méthodes à des classes ou des objets. Il est aussi possible de l'utiliser pour écrire des scripts.

Les invocations de méthode dynamiques autorisent l’utilisation du typage canard (duck typing), fournissant une approche polymorphique plus souple que l’application stricte des mécanismes de typage par héritage ou implémentation d’interface.

Approche statique

Depuis la version 2.0, il est possible d'utiliser une approche statique sur certaines portions de code pour bénéficier de la sureté de fonctionnement ou des performances associées.

Ceci est réalisé à l'aide d'annotation:

  • La vérification statique de code via l'annotation @TypeChecked
  • La compilation statique via l'annotation @CompileStatic

Langage fonctionnel

Groovy permet d’utiliser le paradigme de programmation fonctionnel par le biais des fermetures (closures).
Une fermeture est une entité prenant des paramètres en entrée et fournissant un résultat en sortie. Une fermeture étant un bloc d’instructions manipulable comme un objet, elle peut être passée en paramètre à une fonction, appliquée à des collections.

Eléments de langage propres à un domaine

Groovy permet de définir des éléments de langage propres à un domaine métier  (Domain Specific Language)  en s’appuyant sur les possibilités offertes.

Citons :

  • la faculté de modéliser des structures arborescentes complexes,
  • la faculté de surcharger les opérateurs courants, globalement ou contextuellement ,
  • d’utiliser des fermetures,
  • la faculté de capturer des appels de méthodes manquantes et y répondre pour implémenter des conventions de nommage.

Intégration dans l’univers Java

Groovy est dédié à l’univers Java et s’y intègre parfaitement sans effort particulier.

Indifférenciation au niveau JVM

Au niveau de la Machine Virtuelle Java, un code Groovy ne peut être distingué d’un code Java, les deux sont exécutés sous forme de bytecode Java. En effet, Groovy utilise les mêmes outils que Java en insérant des étapes supplémentaires de compilation pour honorer ses fonctionnalités, et son résultat est un ensemble de fichiers .class similaires. De même que Groovy utilise des classes Java, il est possible d’utiliser des classes issues de code Groovy dans un code Java.

La conséquence, c’est qu’aux niveaux organisationnel et opérationnel, il n’y a aucun différence entre du Java et du Groovy : tous les deux s’organisent en archive JAR, se déploient et s’exécutent de la même façon.

Facilitation des standards

Groovy propose un certain nombre de fonctionnalités pour faciliter l’utilisation de standards de fait :

  • Les bases de données 
  • Tests unitaires
  • XML
  • Ant (équivalent de Make dans l’univers Java, outil très puissant et très répandu)
  • Expressions régulières
Autres fonctionnalités

Groovy, de par son écosystème, propose un ensemble de fonctionnalités étoffées à travers différentes frameworks ou modules. La liste complète peut être consultée ici.

Parmi ceux-ci, citons les plus remarquables ou les plus pertinents pour la communauté ESR.

Grails

Grails est un framework de développement agile d’application web reprenant les principes validés par le framework RubyOnRails tels que :

Grails s’appuie sur des frameworks industriels et constitue un écosystème particulièrement riche en soi, comptant plus de 400 extensions.

Gorm

Bibliothèque permettant d’appliquer le pattern ORM (« Object-Relation Mapping ») : http://grails.org/GORM

Gldapo

Equivalent de GORM dans l’univers LDAP, mais surtout facilite l’utilisation de LDAP dans l’univers Java : http://gldapo.codehaus.org/

GroovyLab

Utilisation de bibliothèques de type Mathlab en Groovy : http://code.google.com/p/groovylab/

Groosh

Module permettant d’interagir avec le système d’exploitation à travers son shell : http://groovy.codehaus.org/Groosh

Contexte d'utilisation dans mon laboratoire/service

Nous utilisons groovy à la DSI du CNRS depuis plusieurs années. Le langage groovy est utilisé comme "couteau suisse" dans plusieurs tâches qui bénéficient de l’écosystème Java.

Modélisation des règles de gestion d’une entrée LDAP

En utilisant la fonction de builder et une bibliothèque LDAP, nous avons modélisé les règles de gestion des entrées LDAP de nos annuaires d’authentification sous une forme lisible et compréhensible.

Scripts d’administration et maintenance des annuaires LDAP

Des scripts d’administration et maintenance d’annuaires LDAP sont entièrement écrits en groovy, ce qui, de par sa nature, permet de les écrire ou les adapter directement sur des serveurs, à l’aide d’un simple éditeur de texte (vi) et sans avoir besoin d’un éditeur spécialisé (comme Eclipse), avec une très grande aisance.

Reprise et extraction de données

De nombreux programmes d’extraction ou reprise de données sont écrits en groovy. L’usage natif des dictionnaires (Map), des listes et des fermetures associés à la facilité d’évolution sont parfaitement adaptés à ce genre d’opérations à la fois itératives dans leur constructions et jetables par nature.

Limitations, difficultés, fonctionnalités importantes non couvertes

La principale limitation est la vitesse de lancement. Il y a déjà la lenteur propre au démarrage de la Machine Virtuelle Java qui recharge et revalide l'ensemble des classes avant d'exécuter le programme appelé. Ensuite, si Groovy est utilisé en mode script (régénération des classes à partir des sources), le temps de compilation s'ajoute au précédent, entrainant des latences pouvant aller jusqu'à plus d'une dizaine de secondes.

Environnement du logiciel
Plates-formes

Toutes les plates-formes supportant Java

Environnement de développement
Type de structure associée au développement

Le projet de développement du langage Groovy est lancé par James Strachan en 2003, puis repris fin 2004 par Guillaume Laforge. Doté d’une forte communauté, la structure de développement est maintenant semblable à celle des projets d'une fondation, basé sur la méritocratie et la mise à disposition de développeurs par des éditeurs professionnels.

Eléments de pérennité

Groovy bénéficie d'une forte communauté d'utilisateur et de contributeurs. Il est logistiquement et financièrement soutenu par des sociétés majeures et pérennes de l’univers Java Spring Source, division du géant VMWare.

 

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur

La documentation utilisateur est référencée dans http://groovy.codehaus.org/Documentation