Le
projet Jackpot vise à fournir de nouvelles fonctionnalités
aux développeurs Java dans la gestion pure de leur code. Deux
grands types d'outils sont mis à leur disposition: des outils
d'analyse statique du code ayant comme but principal de donner des
éléments objectifs de mesure
de complexité et donc de fragilité potentielle des
choix de programmation et d'autres outils dits de refactoring.
Cette dernière technique vise à permettre des
changements globaux du code (noms de classes, redéfinition de
l'arbre d'héritage, ...) tout en conservant un source à
la fois correct (dans le sens javac
du terme) et plus solide (à partir des constations faites
précédemment). C'est au cours de cette session,
que j'ai découvert que le paragdime de base du refactoring est
la règle de production si chère à mon passé
dans l'intelligence artificielle. Voici un exemple de règle
autorisant la correction des clauses conditionnelles un peu trop vite
écrites:
(a==b
? 0 : // Values are equal
(a<b ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
1));
// (0.0, -0.0) or (NaN, !NaN)
Ceci n'est pas sans me rappeler le langage Prolog et son système d'unification, à la différence près que Jackpot permet un matching des parties gauche incluant la totalité de la syntaxe Java. De quoi faire pâlir Alain Colmerauer, mon ancien professeur.
factorial(0,1).
factorial(N,F) :-
N>0,
N1 is N-1,
factorial(N1,F1),
F is N * F1.

