Guile (GNU Ubiquitous Intelligent Language for Extensions) est un interpréteur du langage de programmation Scheme développé dans le cadre du projet GNU pour servir de langage d'extension officiel au système d'exploitation GNU.

Guile est utilisé dans un certain nombre de programmes liés au projet GNU, ainsi qu'en dehors.

Historique

En 1994, Richard Stallman exposa ses idées sur la conception d'un langage d'extension pour le projet GNU. Une des idées principales était que les utilisateurs devaient avoir le choix du langage de programmation. Le langage principal envisagé était une variante de Scheme, mais d'autres langages pouvaient être supportés par l'intermédiaire de traducteursLes discussions sur les défauts du langage Tcl : http://www.vanderburg.org/OldPages/Tcl/war/ et http://www.vanderburg.org/OldPages/Tcl/war2/.

Tom Lord commença à travailler immédiatement sur le projet. En 1995, deux premières versions de travail furent mises à disposition. La société Cygnus Support ajouta de nombreuses fonctionnalités et sortit ses propres versions Cygnus Guile r0.3 et r0.4. La première version officielle du projet GNU sortit en 1997.

Le projet est notamment maintenu par Andy Wingo .

Caractéristiques techniques Guile peut être utilisé comme un interpréteur Scheme classique. Mais il a été conçu dès le début pour être intégré comme langage d'extension dans les programmes écrits en langage C Manuel de Guile, section 2.1 http://www.gnu.org/software/guile/manual/html_node/What-is-Guile_003f.html#What-is-Guile_003f.

Guile supporte de nombreuses extensions au langage Scheme, ainsi que différents modules systèmes, la programmation réseau et le multithreading.

Il fonctionne soit comme un interpréteur, soit comme un compilateur Scheme pour bytecode sur machine virtuelle Un projet de compilation à la volée est par ailleurs en cours de développement..

Infrastructure de compilation et Machine virtuelle Guile 2.0 compile du code scheme en bytecode, lequel est ensuite interprété par une machine virtuelle. Cela donne une amélioration notable des performances par rapport aux anciennes versions de Guile.

Le code source est compilé automatiquement par défaut une fois trouvé, et ce sans intervention manuelle. La commande de compilation guile-tools fournit cependant une interface en ligne de commande, avec en plus des procédures Scheme pour gérer le compilateur.

Outre Scheme, le compilateur est livré avec un frontal pour les langages ECMAScript et Emacs Lisp.

REPL et Débogueur

Un nouveau est disponible depuis la version 2.0 avec des caractéristiques simplifiant ce type de programmation interactive. Le REPL est par ailleurs fourni avec des possibilités de déboguage.

Historique des versions Version Date de sortie Principaux changements 2.0.3 Nouveau module (client web synchrone), optimisation avec un nouvel évaluateur partiel pour programmes scheme appelé peval. 2.0.2 Version de maintenance (expression while, compilateur plus rapide, gain en performance de la machine virtuelle, etc) 2.0.1 Version de maintenance (REPL, unicode du standard R6RS, etc) 2.0.0 Ajout d'un compilateur et d'une machine virtuelle. Support de l'Unicode. Migration vers le ramasse-miettes de Boehm-Demers-Weiser. Support SXML et outils pour le traitement XML. Support partiel du standard Scheme R6RS The Revised6 Report on the Algorithmic Language Scheme. Sixième révision du rapport sur le langage algorithmique Scheme. Module web, support URI et traitement Http.2.2.0 Améliorations de performance, souvent +30 % de performance par rapport à la version 2.0. Réduction de l’usage mémoire et accélération de l’interpréteur eval. Meilleur support du multi-cœur. Suppression de la limite fixe sur les appels récursifs. Support de la concurrence légère avec des millions de “fibers”. Implémentation complète et compatible de Emacs Lisp (Elisp).3.0.0 Ajout d'un compilateur JIT générant du code natif à la volée. Entre deux et trente-deux fois plus rapides que la version 2.2. Introduction du support des définitions et expressions entremêlées dans des contextes lexicaux. Support natif des exceptions structurées. Amélioration du support des standards Scheme R6RS et R7RS. Diverses optimisations supplémentaires.

Projet GNU Guile est le langage d’extension officiel du projet GNU. Guile peut ainsi être utilisé comme langage d’extension embarqué dans plusieurs outils du projet GNU, notamment GNU Make. Dans certains outils, d’autres langages peuvent toutefois être privilégiés selon les besoins spécifiques : ainsi, le 8 octobre 2010 Support de Guile dans GDB non maintenu., Tom Tromey, alors mainteneur du GNU Debugger, annonce préférer l’usage de Python comme langage d’extension pour GDB.

Intégration avec Emacs Plusieurs tentatives ont été menées par le passé pour remplacer ou compléter le compilateur Elisp, le langage d’extension de GNU Emacs par GNU Guile, en parallèle des efforts visant à prendre en charge d’autres langages dans Guile.

Une première initiative a vu le jour avec la version 2.0 de Guile : implémenter Emacs Lisp au sein de l’infrastructure de compilation de Guile et remplacer l’implémentation actuelle d’Emacs par celle de libguile. Ce projet a connu des avancées significatives, notamment grâce à des travaux réalisés dans le cadre du Google Summer of Code.

Un GNU Emacs basé sur GNU Guile offrirait de meilleures performances pour l’exécution d’Emacs Lisp, et faciliterait l’ajout de nouvelles fonctionnalités au langage. Il permettrait également de rendre accessibles à Emacs les bibliothèques Guile écrites dans d’autres langages, ainsi que d’écrire des extensions Emacs dans plusieurs langages pris en charge par Guile sans casser la compatibilité avec le code existant.

En octobre 2014, le projet a atteint un stade où Guile Emacs pouvait exécuter de manière fiable la plupart des scripts Elisp. Des difficultés subsistaient néanmoins, en particulier les différences de représentation interne des chaînes entre Scheme et Emacs Lisp, ainsi que des divergences dans la gestion des valeurs booléennes et des listes vides. S’y ajoutaient une intégration encore limitée des macros Emacs Lisp avec Scheme, l’absence de prise en charge native de la concurrence dans Emacs Lisp, ainsi que des enjeux de portabilité de GNU Guile sur l’ensemble des plateformes prises en charge par GNU Emacs.

D’autres préoccupations ont également été soulevées par la communauté Emacs, notamment la différence de taille entre les communautés Emacs et Guile, ainsi que le risque de fragmentation si Emacs devenait extensible dans d’autres langages que son langage historique.

Lors de EmacsConf 2024, la relance du projet Guile-Emacs a été annoncée.

Scénarios d'utilisation Utiliser Guile dans une application permet aux programmeurs d'écrire des plugins et aux utilisateurs d'avoir une application correspondant mieux à leurs besoins.

Guile peut en effet s'intégrer dans des logiciels tiers sous la forme d'une bibliotheque logicielle dont l'interface leur confère les fonctionnalités du langage Scheme et des modules associés. Guile est ainsi utilisé comme un langage d'extensions dans de nombreuses applications, parmi lesquelles Gimp, Anubis, GnuCash, LilyPond, MDK, Robots, Serveez, TeXmacs ou Scwm. Certains projets écrits en Scheme peuvent également interagir avec Guile ou l’utiliser comme outil de bootstrap, tel que Google Schism.

Bibliographie

Compléments GNU Guile-Ncurses Guile-Ncurses est une implémentation Ncurses permettant la création d’interfaces textuelles en langage Scheme/Guile. Elle confère à l’interpréteur Scheme de GNU Guile la capacité d’interagir à l’entrée de caractères dans des environnements en mode texte, indépendamment du terminal. C’est un paquetage des bibliothèques Ncurses sous-jacentes. Ce projet dont la première version stable remonte à 2010 GNU guile-ncurses 1.0 réalisé le 4 octobre 2010. est toujours maintenu par le dénommé Mike Gran, son créateur.

Autres projets liés Il existe de nombreux projets périphériques indépendants du projet GNU, mais dédiés à GNU Guile sous la forme de modules, parmi lesquels: Guile-PG , une collection de modules pour Guile permettant l'accès à des bases de données PostgreSQL à partir de programmes écrits en Scheme. Guile-WWW ., une collection de modules Scheme pour effectuer des requêtes URL côté client, la configuration de l'écoute des sockets INET et UNIX, l'analyse des requêtes HTTP, la recherche de contenus définis par le standard MIME, le traitement des cookies, l'empaquetage des en-têtes des réponses HTTP, l'historique côté serveur. G-Wrap « G-Wrap », nongnu.org, 16 décembre 2011., une bibliothèque et un outil de génération de fonctions wrapper fournissant à Guile un binding de langage. Guile-SDL « Guile-SDL 0.4.1 available », Liste de diffudion guile-sources, 16 novembre 2012., modules fournissant des « bindings » pour SDL permettant aux développeurs Guile d'en exploiter ses possibilités. Mixp « Mixp », nongnu.org, 22 août 2011. « Mixp 0.6 available », lists.gnu.org, 25 janvier 2012., une collection de modules pour Guile permettant l'utilisation de la bibliothèque de James Clark à partir de programmes écrits en Scheme.

Notes et références Références

Notes

Liens externes Code source sur la forge logicielle GNU Savannah. Vidéo sur le blog d'Andy Wingo, le mainteneur du projet Guile.

Catégorie:Logiciel du projet GNU Catégorie:Outil de développement logiciel Catégorie:Logiciel libre sous licence LGPL Catégorie:Logiciel pour Unix Catégorie:Langage Lisp