Prec.Bas prec.BasNiv. sup.

2.4 Giac: une librairie de calcul formel en développement 

L'article ci-dessous a été soumis sur la liste calcul-formel-libre par Bernard Parisse.

Présentation rapide de Giac/Xcas 

Giac est un projet de librairie C++ de logiciel libre de calcul formel (sous licence GPL) que j'ai démarré en 2000 à la suite du développement du logiciel de calcul formel intégré aux calculatrices graphiques HP49 et HP401 effectué pendant une délégation au sein de Hewlett Packard en 1998/99, xcas est le nom du programme avec interface graphique correspondant. J'ai écrit l'essentiel du code, Renée de Graeve ayant codé le reste et documenté l'essentiel de la documentation en-ligne, R. Kreckel a écrit la première version de l'autoconfiguration.

Giac a pour objectif de coordonner les efforts de développement libres en vue de créer un logiciel de calcul formel et géométrie dynamique utilisable aussi bien en recherche qu'en enseignement. Il existe un logiciel libre de calcul formel généraliste aujoud'hui: c'est maxima (en fait pas tout-à-fait libre car maxima utilise gnuplot pour la visualisation de fonctions et gnuplot contrairement à ce que le gnu de son nom pourrait laisser croire n'est pas un logiciel libre). Mais mon opinion est que son avenir n'est pas clair: il n'a malheureusement plus de maintainer officiel, mais ce qui est plus grave c'est qu'une grande partie de son code source est écrit en lisp peu ou pas commenté (sans parler des problèmes de taille, j'y reviendrai en parlant de financement plus loin). Il existe aussi une offre commerciale importante. Mais il me semble qu'on ne peut pas raisonnablement baser un résultat mathématique sur un calcul utilisant un logiciel dont les sources ne sont pas libres. D'autre part, les performances de certaines librairies libres par rapport aux logiciels formels généralistes sont très souvent bien meilleures dans leur domaine mais il manque à ces librairies une interface graphique unifiée et les assembler nécessite des compétences d'administration système pas forcément accessible dans tous les laboratoires de recherche et à fortiori pour un individu plus isolé.

De plus, la France dispose d'une importante communauté de recherche en calcul formel et est un des pays ou il est le plus utilisé dans l'enseignement (en particulier dans les lycées grace aux calculatrices graphiques symboliques). Pourtant nous n'avons jamais développé de logiciel de calcul formel (mettons à part PARI qui n'est pas généraliste). On a en effet l'habitude en France de considérer l'implémentation d'un logiciel comme n'étant pas de la recherche. Or les choix techniques sont aussi des choix politiques. Il faut garantir notre indépendance dans ce domaine (à défaut de pouvoir le faire aussi dans le domaine du matériel informatique mais cela s'écarte des compétences de mathématiciens...)

L'état actuel de Giac 

Giac est disponible au téléchargement à partir de ma page web http://www-fourier.ujf-grenoble.fr/~parisse sous forme de code source dans les mêmes conditions que les logiciels du projet GNU (ce qui permet en principe de le compiler sur n'importe quel Unix, y compris Darwin en utilisant le trio configure, make, make install, mais aussi sous Windows avec cygwin), ou sous forme de binaires compilés pour Linux PC (binaires statiques pour processeur compatible "Intel" x86), Linux Familiar (distribution Linux produite par Compaq pour processeur ARM tournant sur des Pocket PC) et Windows (95, NT et au-delà). Il n'existe pas de portage sous Windows CE pour l'instant mais le portage de PARI et maxima sur cet OS laisse penser que cela est possible.

Le répertoire check du répertoire source contient les tests automatisés effectués pour détecter l'introduction accidentelle de bugs, il donne une idée des capacités actuelles de Giac (pour tester les performances de giac, on peut utiliser la commande cas en mode console après avoir défini la variable d'environnement SHOW_TIME).

Actuellement, giac est composé des briques extérieures logicielles suivants (sous licence LGPL ou GPL):

Les principales fonctionnalité implémentées sont du point de vue non mathématique: interface de type "calculatrice graphique symbolique" (style TI89/92 et HP49 mais sans éditeur d'équation ni de matrice), langage de programmation (on peut choisir une syntaxe de type C++ non typé ou Maple ou Mupad ou HP49 en mode polonaise inversé) avec possibilité de mise au point interactive (débuggeur, ne fonctionne que sur plateforme Unix/Linux et en mode algébrique). L'interpréteur du langage est écrit en lex/yacc et est donc facile à maitenir (flex et bison sont nécessaires pour compiler Giac). Le reste des sources est écrit en C++ (il s'agit essentiellement de C utilisant les facilités de C++ comme la gestion de mémoire transparente pour le programmeur via new/delete et constructeurs/destructeurs, les conteneurs de la Standard Template Library en particulier vector pour les listes et la progammation générique). On peut facilement porter un programme écrit en langage formel de type Maple en langage compilé (C++), en fait, contrairement à Maple ou Mupad, j'ai l'intention d'écrire toute la librairie standard de Giac en C++. La gestion de la compilation est faite par automake/make. La reconnaissance de la plateforme et l'utilisation optionnelle de briques logicielles extérieures est gérée par autoconf (AC_CHECK_LIB). Tout repose donc sur des programmes du projet GNU très répandus et utilisés ce qui devrait assurer la pérennité.

Du point de vue mathématique: polynômes (dense et creux à une variable, creux à plusieurs variables), PGCD (heuristique, modulaire, sous-résultant), Bézout (note pour Marie-Françoise: j'utilise bien les sous-résultants dans le cas non modulaire!), factorisation (sqff, ddf, Cantor-Zassenhauss, Hensel, manque LLL+knapsack) y compris avec extensions algébriques, dérivation, intégration formelle (méthodes heuristiques), sommes discrètes de fractions rationnelles, équations différentielles numérique (GSL), solveur d'équations de type polynomiale à une variable, développement en série et limités (algorithme mrv), algèbre linéaire (Gauss-Bareiss, valeurs propres, vecteurs propres et cycles de Jordan, formes quadratiques), représentation graphique de fonctions (fonction, paramétrique, polaire) en interaction avec la géométrie plane.

Les principaux manques actuels:

Le dernier item requiert des compétences à la fois en mathématique et en programmation.

Les autres librairies mathématiques interfaçable avec Giac que j'ai examinées:

Il en existe d'autres potentiellement intéressantes que je n'ai pas encore examinées en détails (jacal: me parait peu probable car écrit en scheme, zen: ?, ...)

En ce qui concerne les interfaces: il peut et devrait s'en développer plusieurs (on peut imaginer des interfaces de type langage de script comme xmaxima, de type navigateur, pour KDE/Qt, pour Gnome/GTK, à l'intérieur d'un traitement de texte TeXmacs ou lyx ou ..., etc.). Il faudra imaginer un abstraction des types graphiques manipulés (point, courbes représentatives, etc.) qui puisse s'adapter à différents toolkits graphiques. Il est pour l'instant essentiel d'avoir une interface compatible avec les projets de PDA sous Linux (qui utilisent en particulier la distribution Familiar avec XWindows ou son remplacement Microwindows)

Projet de développement collaboratif 

D'ici la fin de l'année 2001, j'espère pouvoir ouvrir Giac au développement collaboratif en complétant la documentation et en travaillant sur la conformité du code aux standards. Il faudra ensuite ouvrir une base CVS, je pense (bien que le projet soit en C++ et pas en C) qu'on pourrait discuter avec www.savannah.org le site de développement de projets de la FSF.

Ensuite il faut s'interroger sur la suite du projet:

Je termine par mon opinion sur la stratégie à développer pour obtenir des financements privés sans déroger au principe du logiciel libre. Actuellement le marché éducatif mathématique est dominé par quelques acteurs: les calculatrices graphiques (avec la consitution à brève échéance d'un monopole de Texas Instruments comme c'est le cas aux États-Unis), les logiciels Maple, Cabri Géomètre et Sketchpad et les éditeurs de manuels (qui de plus en plus lient leur manuels à ces logiciels). Si l'on veut réussir un projet de logiciel libre de calcul formel il doit être utilisé dès le lycée sinon il sera cantonné à la recherche et son financement serait fragilisé. Il faut donc être présent sur les 3 segments à la fois. L'avenir de la calculatrice graphique est je pense un engin hybride entre le téléphone portable et l'assisant numérique type Pocket PC (PDA avec stylet). Il faut donc avoir un logiciel tournant sur ce type de plateforme (il y a donc contraintes de taille du programme et de vitesse d'exécution au moins comparable à Maple dans les situations rencontrées en enseignement) et proposant du calcul formel et de la géométrie dynamique (j'ai appris hier que Cabri-Géomètre se lancerait dans un projet d'intégration de calcul formel). Il faut essayer rapidement de convaincre des constructeurs concurrents de TI (Casio, Sharp, HP/Compaq) qu'il y a un marché qu'ils peuvent conquérir. Il faut faire vite, la prévalence des calculatrices de type actuel ne va probablement pas durer plus de 2-3 ans, le temps pour les PDA d'atteindre un prix inférieur à 1000F. Faute de quoi, le logiciel de calcul formel utilisé dans l'enseignement sera un logiciel propriétaire pour encore pas mal d'années.  

Prec.Bas prec.HautNiv. sup.