# GNU Guile

GNU Ubiquitous Intelligent Language for Extensions (GNU Guile) és el sistema de llenguatge d'extensió preferit per al Projecte GNU i inclou una implementació del llenguatge de programació Scheme. La seva primera versió es va publicar el 1993. A més de grans parts dels estàndards de Scheme, Guile Scheme inclou extensions modularitzades per a moltes tasques de programació diferents.
Per ampliar programes, Guile ofereix libguile que permet que el llenguatge s'incrusti en altres programes i s'integri de prop a través de la interfície de programació d'aplicacions (API) del llenguatge C; de la mateixa manera, els nous tipus de dades i subrutines definits mitjançant l'API C es poden posar a disposició com a extensions de Guile.
Guile s'utilitza en molts programes sota el paraigua del projecte GNU (GDB, Make, Guix, GNU TeXmacs GnuCash, LilyPond Lepton-EDA...) però també veu ús fora d'això, per exemple en el cisma de Google.

## Esquema Guile

Guile Scheme és un llenguatge de programació d'alt nivell de propòsit general, la flexibilitat del qual permet expressar conceptes en menys línies de codi de les que seria possible en llenguatges com C. Per exemple, el seu sistema de macros higiènic permet afegir elements de sintaxi específics del domini sense modificar Guile. Guile implementa l'estàndard Scheme R5RS, la majoria de R6RS i R7RS, diverses sol·licituds d'implementació de Scheme (SRFI) i moltes extensions pròpies.
La idea bàsica de Guile Scheme és que "el desenvolupador implementa algorismes crítics i estructures de dades en C o C++ i exporta les funcions i els tipus per utilitzar-los amb codi interpretat. L'aplicació es converteix en una biblioteca de primitives orquestrada per l'intèrpret, combinant l'eficiència de la compilació. codi amb la flexibilitat d'interpretació". Així, el Guile Scheme (i altres llenguatges implementats per Guile) es poden estendre amb nous tipus de dades i subrutines implementades mitjançant l'API C.
La distribució estàndard ofereix mòduls per a trucades al sistema d'interfície de sistema operatiu portàtil (POSIX), programació, una interfície de funció estrangera, processament XML basat en expressions S mitjançant SXML, SXPath i SXSLT, HTTP i altres API World Wide Web, continuacions delimitades, programació de matrius, i altres funcionalitats. Els programes Guile poden utilitzar les instal·lacions de SLIB, la biblioteca portàtil Scheme.

## Detalls de la implementació

Quan s'utilitzen continuacions amb call/cc, un requisit de l'estàndard Scheme, Guile copia la pila d'execució al munt i enrere. El seu manual suggereix utilitzar continuacions delimitades, perquè tenen una implementació més eficient.
Com que el codi estranger pot tenir punters a objectes Scheme, Guile utilitza el conservador col·lector d'escombraries Boehm–Demers–Weiser (BDW).

## Història

El manual Guile dona detalls de l'inici i la història primerenca de la llengua. A continuació es fa un breu resum:
Després de l'èxit d'Emacs a la comunitat de programari lliure, com a aplicació altament extensible i personalitzable mitjançant el seu llenguatge d'extensió (i en part d'implementació) Emacs Lisp, la comunitat va començar a plantejar-se com aquesta estratègia de disseny podria aplicar-se a la resta del sistema GNU. Tom Lord va començar inicialment a treballar en un temps d'execució de llenguatge incrustable anomenat GNU Extension Language (GEL), que es basava en la implementació de Scheme SCM d'Aubrey Jaffer (que al seu torn es basava en el SIOD de George Carrette). Lord va convèncer Richard Stallman perquè fes de GEL l'idioma d'extensió oficial del projecte GNU, basant-se en l'argument que Scheme era un dialecte Lisp més net que Emacs Lisp, i que GEL podria evolucionar per implementar altres llenguatges al mateix temps d'execució, és a dir, Emacs Lisp. Després que Lord va descobrir que GEL tenia un conflicte de noms amb un altre llenguatge de programació, va demanar suggeriments per a un nou nom. D'entre diverses contribucions a diversos grups de notícies d'Usenet, Lord va triar de manera controvertida Guile a partir d'un suggeriment de Lee Thomas.
Durant el desenvolupament de Guile (aleshores GEL) i abans del seu llançament públic, el llenguatge d'extensió Tcl estava guanyant popularitat i s'impulsava com a llenguatge d'extensió universal. Stallman va veure que Tcl tenia poc poder com a llenguatge d'extensió i va publicar una crítica al grup de notícies comp.lang.tcl, que va iniciar una guerra de flama coneguda com la "Guerra Tcl". Des que l'anunci públic del projecte Guile va coincidir amb el debat de Tcl, s'ha convertit en un error comú que Guile va començar com una reacció a això.
Després del llançament inicial de Guile, el desenvolupament va languir durant molts anys, però 2009–2010 va veure millores importants, i Guile 2.0 es va llançar el 2011 amb una nova infraestructura de compilador, una implementació de màquina virtual, un canvi al col·lector d'escombraries Boehm–Demers–Weiser, moltes millores al llenguatge Guile Scheme i altres canvis importants.
Un dels objectius de Guile és permetre que s'utilitzin altres idiomes juntament amb Scheme, de manera que Guile seria efectivament un entorn d'execució neutre per a l'idioma. S'han fet diversos intents d'això en versions passades: un dialecte de Scheme que es diferencia essencialment només en la seva sintaxi semblant a C, una traducció d'Emacs Lisp, un convertidor Tcl motivat per tkWWW i alguna cosa que s'assembla aproximadament a l'idioma Logo. Amb la versió 2.0, el projecte va passar amb èxit a un enfocament de torre de compilador, que va permetre la definició de compiladors d'un llenguatge a un altre, normalment d'un de nivell superior a una representació intermèdia de nivell inferior i, finalment, el codi de bytes de la màquina virtual o el codi de màquina nadiu.
El 16 de març de 2017, Guile 2.2.0 es va llançar amb un nou compilador d'optimització i una màquina virtual de registre d'alt rendiment. Segons l'anunci de llançament d'Andy Wingo, els programes del món real sovint mostraven una acceleració del 30% o més amb Guile 2.2 en comparació amb la sèrie 2.0 anterior. Guile 2.2.0 també va reduir l'ús de memòria, va accelerar l'intèrpret "eval", va proporcionar un millor suport per a la programació multinúcli i va eliminar qualsevol límit fix a les trucades de funcions recursives. També va donar suport a la creació d'instal·lacions de concurrència d'espai d'usuari que multiplexen milions de "fibres" lleugeres simultàniament i va proporcionar una implementació completa d'Elisp compatible amb Emacs, implementant totes les característiques i peculiaritats d'Elisp de la mateixa manera que Emacs.
El 16 de gener de 2020, Guile 3.0.0 es va llançar amb la generació de codi nadiu just-in-time (JIT) per obtenir un rendiment molt més gran. En comparació amb el 2.2, el rendiment del microbenchmark és al voltant del doble de bo en conjunt, mentre que alguns benchmarks individuals són fins a 32 vegades més ràpids. També comptava amb suport per a definicions i expressions intercalades en contextos lèxics, suport nadiu per a excepcions estructurades, millor suport per als estàndards R6RS i R7RS Scheme i moltes optimitzacions.

## Referències

* 1 2 «GNU Guile - CodeDocs» (en anglès). [Consulta: 22 gener 2024].
* ↑ «Tutorial Introduction to Guile» (en anglès). [Consulta: 22 gener 2024].
* ↑ «GNU Guile is a weird Lisp variant. Nobody is switching from Python to that; be r... | Hacker News» (en anglès). [Consulta: 22 gener 2024].
* ↑ «guile(1) — Arch manual pages» (en anglès). [Consulta: 22 gener 2024].