GNU Guile — Wikipédia

Guile
Description de l'image GNU-Guile-logo.svg.

Informations
Développé par Projet GNU
Première version
Dernière version 3.0.9 ()[1]Voir et modifier les données sur Wikidata
Dépôt git.savannah.gnu.org/cgit/guile.gitVoir et modifier les données sur Wikidata
Écrit en CVoir et modifier les données sur Wikidata
Interface NcursesVoir et modifier les données sur Wikidata
Système d'exploitation GNU/Linux, BSD, macOS et Microsoft WindowsVoir et modifier les données sur Wikidata
Environnement GNU, GNU/Linux
Type Langage de programmation
Licence GNU LGPL
Documentation www.gnu.org/software/guile/manualVoir et modifier les données sur Wikidata
Site web (en) Site officiel

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[n 1].

Historique[modifier | modifier le code]

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 traducteurs[2].

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[3].

Caractéristiques techniques[modifier | modifier le code]

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[4].

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[5].

Infrastructure de compilation et Machine virtuelle[modifier | modifier le code]

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[modifier | modifier le code]

Un nouveau REPL (en) 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[modifier | modifier le code]

Version Date de sortie Principaux changements
2.0.3
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[6].
  • Module web, support URI et traitement Http.

Projet GNU[modifier | modifier le code]

Guile est le langage d'extension officiel du projet GNU. Tom Tromey, mainteneur du projet GNU Debugger, annonce cependant son retrait de GDB le 8 octobre 2010[7], lui préférant Python comme seul et unique langage d'extension.

Scénarios d'utilisation[modifier | modifier le code]

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[réf. nécessaire], Anubis, GnuCash, LilyPond, MDK, Robots, Serveez, TeXmacs ou Scwm

Des hackers du projet GNU Guile travaillent par ailleurs, depuis 2010, dans la migration totale de GNU Emacs vers Guile, l’Emacs Lisp étant désormais implémenté par Guile.

Bibliographie[modifier | modifier le code]

  • [PDF] (en) Tom Lord, Mark Galassi, Jim Blandy, Thien-Thi Nguyen, Kevin Ryde, Mikael Djurfeldt, Christian Lynbech, Julian Graham, Gary Houston, Tim Pierce, etc., Marius Vollmer, Martin Grabmueller, Ludovic Courtès et Andy Wingo, Guile Reference Manual : Edition 2.0.7, FSF, , 841 p. (lire en ligne) ;

Compléments[modifier | modifier le code]

GNU Guile-Ncurses[modifier | modifier le code]

Guile-Ncurses[8] 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[9] est toujours maintenu par le dénommé Mike Gran, son créateur.

Autres projets liés[modifier | modifier le code]

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[10],[11], une collection de modules pour Guile permettant l'accès à des bases de données PostgreSQL à partir de programmes écrits en Scheme.
  • Guile-WWW[12], 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[13], une bibliothèque et un outil de génération de fonctions wrapper fournissant à Guile un binding de langage.
  • Guile-SDL[14], modules fournissant des « bindings » pour SDL permettant aux développeurs Guile d'en exploiter ses possibilités.
  • Mixp[15],[16], une collection de modules pour Guile permettant l'utilisation de la bibliothèque expat (en) de James Clark à partir de programmes écrits en Scheme.

Notes et références[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (en) Ludovic Courtès (d), « GNU Guile 3.0.9 released », (consulté le )
  2. Les discussions sur les défauts du langage Tcl : http://www.vanderburg.org/OldPages/Tcl/war/ et http://www.vanderburg.org/OldPages/Tcl/war2/
  3. (en) « site personnel du mainteneur », sur wingolog.org, (consulté le )
  4. (en) Manuel de Guile, section 2.1 http://www.gnu.org/software/guile/manual/html_node/What-is-Guile_003f.html#What-is-Guile_003f
  5. (en) Un projet de compilation à la volée est par ailleurs en cours de développement.
  6. (en) The Revised6 Report on the Algorithmic Language Scheme. Sixième révision du rapport sur le langage algorithmique Scheme
  7. (en) Support de Guile dans GDB non maintenu.
  8. (en) « GNU Guile-Ncurses », sur directory.fsf.org, FSF,
  9. (en) GNU guile-ncurses 1.0 réalisé le 4 octobre 2010.
  10. (en) nongnu.org, « Guile-PG » (consulté le )
  11. (en) Thien-Thi Nguyen, Guile-PG 0.43 available, guile-sources, (lire en ligne).
  12. (en) Thien-Thi Nguyen, Guile-WWW 2.35 available, guile-sources, (lire en ligne)..
  13. (en) « G-Wrap », nongnu.org, 16 décembre 2011.
  14. (en) « Guile-SDL 0.4.1 available », Liste de diffudion guile-sources, 16 novembre 2012.
  15. (en) « Mixp », nongnu.org, 22 août 2011.
  16. (en) « Mixp 0.6 available », lists.gnu.org, 25 janvier 2012.

Notes[modifier | modifier le code]

  1. La version 2.0 reste basée sur le standard Scheme R5RS tout en implémentant partiellement le nouveau standard R6RS. Guile est la principale implémentation Scheme du projet GNU, la seconde étant MIT/GNU Scheme.

Liens externes[modifier | modifier le code]