# GNU Guile

GNU Guile es el intérprete preferido para el proyecto GNU, cuenta con una implementación del lenguaje de programación Scheme. Su primera versión fue lanzada en 1993. Guile incluye extensiones modulares para muchas tareas de programación diferentes, como las llamadas a sistemas POSIX, entre otras.
Para ampliar los programas, Guile cuenta con libguile, una biblioteca que permite insertarlo en otros programas e integrarlo con exactitud mediante la interfaz de programación de aplicaciones (API) del lenguaje de programación C. De manera similar, los nuevos tipos y subrutinas definidas a través de esta API pueden ponerse a disposición del usuario como extensiones de Guile.
El acrónimo Guile significa GNU Ubiquitous Intelligent Language for Extensions. Se utiliza en programas como GnuCash, GNU Guix, GuixSD, GNU Debugger, Lepton-EDA y LilyPond.

## Guile Scheme

La idea principal de Guile Scheme es que el desarrollador implemente algoritmos críticos y estructuras de datos en C o C++, y exporte las funciones y tipos para que sean usados por el código interpretado. Por lo tanto, Guile Scheme, y otros lenguajes implementados por Guile, puede ampliarse con nuevos tipos y subrutinas implementadas a través de la API de C.
La distribución estándar ofrece módulos para llamadas de sistemas POSIX, planificadores, una interfaz de funciones foráneas, expresiones S basadas en el procesamiento de XML a partir de SXML, SXPath y SXSLT. También incluye el protocolo HTTP y otras APIs web, continuación delimitada, programación de vectores, y otras funciones. Los programas escritos en Guile pueden usar las instalaciones de SLIB, la biblioteca portable de Scheme.

## Historia

Después del éxito de Emacs en la comunidad del software libre como una aplicación con alta capacidad de extensión y personalización a partir de su lenguaje de extensión Emacs Lisp, comenzó a plantearse como esta estrategia de diseño podría aplicarse al resto del sistema GNU. Tom Lord, programador de Lisp y Scheme de la Free Software Foundation, comenzó a trabajar inicialmente en un lenguaje llamado GNU Extensión Language (GEL), basado en SCM (una implementación de Scheme), una implementación de Scheme en escrita en C por Aubrey Jaffer ―a su vez basado en Scheme In One Defun, desarrollado por George J. Carrete—. Lord convenció a Richard Stallman para que GEL fuese el lenguaje de extensión del proyecto GNU, argumentó que Scheme era un dialecto de Lisp más limpio que Emacs Lisp, y que GEL podría evolucionar para implementar otros idiomas al mismo tiempo, como Emacs Lisp.
Lord solicitó sugerencias para renombrar GEL después de que descubriese que el nombre estaba registrado por Sybase Incorporate. Después de varias contribuciones en diferentes grupos de noticias, Lord eligió Guile, una sugerencia realizada por Lee Thomas, aunque causó controversia.
Durante el desarrollo de Guile y antes de su publicación, el lenguaje de extensión Tcl comenzó a ganar popularidad, lo que lo impulsó como lenguaje de extensión universal. Richard Stallman pensaba que Tcl era un lenguaje con poca potencia como para ser un lenguaje de extensión universal, por lo que publicó una crítica en el grupo de noticias comp.lang.tcl, lo que inició las denominadas Tcl Wars (en español: guerras Tcl). El anuncio público del proyecto Guile coincidió con el debate sobre Tcl, lo que fomentó la idea equivocada de que Guile se comenzó a desarrollar como una reacción a esto.
Después de la publicación inicial de Guile, su desarrollo decayó durante muchos años, hasta que entre 2009 y 2010 comenzó a experimentar grandes mejoras. Guile 2.0 se publicó en 2011 con una nueva infraestructura de compilación, una máquina virtual implementada, un conmutador para el recolector de basura Boehm-Demers-Weiser, muchas mejoras del núcleo del lenguaje y otras cambios mayores.
Uno de los objetivos de Guile es ofrecer un entorno de lenguaje neutral que permita el uso de otros lenguajes junto a Scheme. Esto se ha aplicado progresivamente: un dialecto de Scheme que solo se diferencia debido a su sintaxis al estilo de C, una implementación de Emacs Lisp y un conversor Tcl inspirando en el navegador web y editor WYSIWYG tkWWW. Con la versión 2.0, el proyecto comenzó su transición hacia el concepto «torre compiladora», ya que permite la definición de compiladores de un lenguaje en otro, normalmente desde uno de nivel más alto a otro de lenguaje intermedio de nivel más bajo y, ocasionalmente, a una máquina virtual bytecode y a lenguaje de máquina.

### Integración de Emacs

Con la versión 2.0 de Guile se comienza a desarrollar libguile, biblioteca con la que se intenta implementar Elisp en la torre compiladora y reemplazar la implementación Elisp de Emacs. Se produjeron avances significativos a partir de los proyectos elaborados durante el Google Summer of Code.
A partir de octubre de 2014, la implementación alcanzó una fase en la que Guile Emacs ya está capacitado para ejecutar la mayor parte del código Elisp. Los problemas que aún quedan, o que se podrían producir, implican la diferencia entre la representación interna de las cadenas de Elisp y las de Scheme, la diferencia entre ambos al utilizar el booleano false y las listas de objetos vacíos, las macros de Elisp que aún no están integradas, y la portabilidad de Guile a plataformas soportadas por Emacs. Otras preocupaciones planteadas por la comunidad de Emacs son las referidas a los tamaños relativos de ambas comunidades, Emacs y Guile, y si causaría división de la comunidad que Emacs fuese extensible a otros lenguajes de programación.