Articulo de referencia

GNU Guile

Blandy 1997, p. 102. "},"latest release version":{"wt":"{{wikidata|property|reference|P348}}"},"latest release date":{"wt":"{{start date and age|{{wikidata|qualifier|P348|P577}}...

El lenguaje inteligente ubicuo de GNU para extensiones [ 3 ] ( GNU Guile ) es el sistema de lenguaje de extensión preferido para el Proyecto GNU [ 4 ] y presenta una implementación del lenguaje de programación Scheme . Su primera versión se publicó en 1993. [ 1 ] Además de gran parte de los estándares de Scheme, Guile Scheme incluye extensiones modularizadas para muchas tareas de programación diferentes. [ 5 ] [ 6 ]

Para extender programas, Guile ofrece libguile , que permite integrar el lenguaje en otros programas y estrechamente a través de la interfaz de programación de aplicaciones (API) del lenguaje C ; de manera similar, los nuevos tipos de datos y subrutinas definidos a través de la API de C pueden estar disponibles como extensiones de Guile. [ 7 ]

Guile se utiliza en muchos programas bajo el paraguas del proyecto GNU ( GDB , Make , Guix , GNU TeXmacs , GnuCash , LilyPond , Lepton-EDA ...) [ 8 ] pero también se utiliza fuera de eso, por ejemplo en el schism de Google .

Plan de engaño

Guile Scheme es un lenguaje de programación de alto nivel y propósito general cuya flexibilidad permite expresar conceptos con menos líneas de código que en lenguajes como C. Por ejemplo, su sistema de macros higiénico permite añadir elementos de sintaxis específicos del dominio sin modificar Guile. Guile implementa el estándar Scheme R5RS, la mayor parte de R6RS y R7RS, [ 9 ] varias solicitudes de implementación de Scheme (SRFI) y muchas extensiones propias.

La idea central de Guile Scheme es que "el desarrollador implementa algoritmos y estructuras de datos críticos en C o C++ y exporta las funciones y los tipos para su uso por código interpretado. La aplicación se convierte en una biblioteca de primitivas orquestada por el intérprete, que combina la eficiencia del código compilado con la flexibilidad de la interpretación". [ 10 ] De este modo, Guile Scheme (y otros lenguajes implementados por Guile) pueden ampliarse con nuevos tipos de datos y subrutinas implementados a través de la API de C.

La distribución estándar ofrece módulos para llamadas al sistema de interfaz de sistema operativo portátil ( POSIX ), planificación , una interfaz de función externa , procesamiento XML basado en expresiones S a través de SXML , SXPath y SXSLT, HTTP y otras API de la World Wide Web , continuaciones delimitadas , programación de matrices , [ 11 ] y otras funcionalidades. [ 5 ] [ 6 ] Los programas Guile pueden usar las funciones de SLIB , la biblioteca Scheme portátil. [ 12 ]

Detalles de implementación

Al usar continuaciones con call/cc , un requisito del estándar Scheme, Guile copia la pila de ejecución en el montón y viceversa. [ 13 ] Su manual sugiere usar continuaciones delimitadas en su lugar, porque tienen una implementación más eficiente. [ 14 ]

Debido a que el código externo puede tener punteros a objetos Scheme, Guile utiliza el recolector de basura conservador Boehm–Demers–Weiser (BDW) . [ 15 ]

Historia

El manual de Guile ofrece detalles sobre el origen y la historia temprana del idioma. [ 16 ] A continuación se presenta un breve resumen:

Tras el éxito de Emacs en la comunidad del software libre , como una aplicación altamente extensible y personalizable a través de su lenguaje de extensión (y parcialmente de implementación) Emacs Lisp , la comunidad comenzó a considerar cómo esta estrategia de diseño podría aplicarse al resto del sistema GNU. Tom Lord comenzó inicialmente a trabajar en un entorno de ejecución de lenguaje integrable llamado GNU Extension Language (GEL), que se basaba en la implementación de Scheme de Aubrey Jaffer, SCM (que a su vez se basaba en SIOD de George Carrette ). [ 17 ] [ 18 ] Lord convenció a Richard Stallman para que hiciera de GEL el lenguaje de extensión oficial del proyecto GNU, basándose en el argumento de que Scheme era un dialecto de Lisp más limpio que Emacs Lisp, y que GEL podría evolucionar para implementar otros lenguajes en el mismo entorno de ejecución, a saber, Emacs Lisp. Después de que Lord descubriera que GEL tenía un conflicto de nombres con otro lenguaje de programación, solicitó sugerencias para un nuevo nombre. De varias contribuciones en varios grupos de noticias de Usenet , Lord eligió controvertidamente Guile de una sugerencia de Lee Thomas. [ 19 ] [ 20 ] [ 21 ] [ 22 ]

Durante el desarrollo de Guile (entonces GEL) y antes de su lanzamiento público, el lenguaje de extensión Tcl estaba ganando popularidad y se promovía como un lenguaje de extensión universal. Stallman consideraba que Tcl era poco potente como lenguaje de extensión y publicó una crítica en el grupo de noticias comp.lang.tcl, lo que dio inicio a una acalorada discusión conocida como la "Guerra de Tcl". [ 23 ] Dado que el anuncio público del proyecto Guile coincidió con el debate sobre Tcl, se ha convertido en un error común pensar que Guile surgió como una reacción a este debate.

Tras el lanzamiento inicial de Guile, el desarrollo se estancó durante muchos años, pero entre 2009 y 2010 se produjeron mejoras importantes, [ 24 ] y Guile 2.0 se lanzó en 2011 con una nueva infraestructura de compilación , una implementación de máquina virtual , un cambio al recolector de basura Boehm-Demers-Weiser , muchas mejoras en el lenguaje Scheme de Guile y otros cambios importantes. [ 25 ]

Uno de los objetivos de Guile es permitir el uso de otros lenguajes junto con Scheme, de modo que Guile se convierta en un entorno de ejecución independiente del lenguaje. En versiones anteriores se realizaron varios intentos: un dialecto de Scheme que se diferenciaba esencialmente solo por su sintaxis similar a C, una traducción de Emacs Lisp , un convertidor de Tcl inspirado en tkWWW y algo que se asemejaba vagamente al lenguaje Logo . [ 26 ] Con la versión 2.0, el proyecto logró la transición a un enfoque de torre de compiladores , permitiendo la definición de compiladores de un lenguaje a otro, generalmente de un nivel superior a una representación intermedia de nivel inferior y, finalmente, al código de bytes de la máquina virtual o al código máquina nativo . [ 27 ] [ 28 ]

El 16 de marzo de 2017, se lanzó Guile 2.2.0 con un nuevo compilador optimizador y una máquina virtual de registros de alto rendimiento. Según el anuncio de lanzamiento de Andy Wingo, los programas reales a menudo mostraban una aceleración del 30 % o más con Guile 2.2 en comparación con la serie 2.0 anterior. Guile 2.2.0 también redujo el uso de memoria, aceleró el intérprete "eval", proporcionó un mejor soporte para la programación multinúcleo y eliminó cualquier límite fijo en las llamadas a funciones recursivas. También admitió la creación de mecanismos de concurrencia en el espacio de usuario que multiplexan millones de "fibras" ligeras concurrentes y proporcionó una implementación completa de Elisp compatible con Emacs, implementando todas las características y peculiaridades de Elisp de la misma manera que Emacs. [ 29 ]

El 16 de enero de 2020 se lanzó Guile 3.0.0 con generación de código nativo justo a tiempo ( JIT ) para un rendimiento mucho mayor. En comparación con la versión 2.2, el rendimiento en microbenchmarks es aproximadamente el doble en general, mientras que algunos benchmarks individuales son hasta 32 veces más rápidos. También incluyó soporte para definiciones y expresiones intercaladas en contextos léxicos, soporte nativo para excepciones estructuradas, mejor soporte para los estándares Scheme R6RS y R7RS y muchas optimizaciones. [ 30 ] [ 31 ]

Integración con Emacs

En el pasado, se han realizado varios intentos inconclusos para reemplazar o complementar el lenguaje de extensión Emacs Lisp con Guile, en paralelo a los esfuerzos por brindar soporte a otros lenguajes en Guile.

Con la versión 2.0 de Guile, se ha iniciado un nuevo intento de implementar Elisp en la torre del compilador Guile y reemplazar la implementación de Elisp de Emacs con la de libguile, logrando un progreso significativo a través de los proyectos de Google Summer of Code . [ 32 ] Un Emacs basado en Guile podría ofrecer un mejor rendimiento de ejecución para Emacs Lisp, admitir más fácilmente nuevas características del lenguaje Emacs Lisp, hacer que las bibliotecas de Guile escritas en otros lenguajes de programación estén disponibles para el código Emacs Lisp y permitir escribir extensiones de Emacs en otros lenguajes de programación compatibles con Guile, manteniendo al mismo tiempo una compatibilidad total con las bases de código Emacs Lisp existentes.

A fecha de octubre de 2014 La implementación había alcanzado una etapa en la que Guile Emacs podía ejecutar de forma fiable la mayor parte del código Emacs Lisp. Los problemas restantes o posibles problemas incluyen la diferente representación interna de las cadenas de Emacs Lisp con respecto a las cadenas de Scheme, la diferencia en cómo Emacs Lisp y Scheme tratan los objetos booleanos falso y de lista vacía, la falta de integración de las macros de Emacs Lisp con Scheme, el hecho de que Emacs Lisp no haya sido diseñado para la concurrencia y la portabilidad de Guile a las plataformas compatibles con Emacs. Otras preocupaciones planteadas por la comunidad de Emacs incluyen el tamaño relativo de las comunidades de Emacs y Guile, y si causaría una división en la comunidad si Emacs fuera extensible a lenguajes de programación distintos de Emacs Lisp. [ 33 ]

En EmacsConf 2024 se anunció el relanzamiento de Guile-Emacs. [ 34 ] [ 35 ]

Integración de GNU Make

GNU make se puede compilar con soporte para GNU Guile como lenguaje de extensión integrado. [ 36 ]

Referencias

  1. 1 2 Blandy 1997, pág. 102.
  2. "GNU Guile 3.0.11 lanzado" . Consultado el 2 de diciembre de 2025 .
  3. "GNU Guile (Acerca de Guile)" . Proyecto GNU. Guile es el Lenguaje Inteligente Ubicuo de GNU para Extensiones, el lenguaje de extensión oficial para el sistema operativo GNU.
  4. "Estándares de codificación GNU, ¿Qué lenguajes usar?" . Proyecto GNU.
  5. 1 2 "Manual de Guile, Referencia de la API" . Proyecto GNU.
  6. 1 2 "Manual de Guile, Módulos de Guile" . Proyecto GNU.
  7. "Para fomentar la personalización, Guile proporciona interfaces extensas que permiten que el código C interactúe con el mundo Scheme. El código C puede crear, acceder y modificar libremente objetos Scheme; las funciones C pueden llamar a funciones Scheme y viceversa; el código C puede agregar nuevos tipos al mundo Scheme y aprovechar la recolección de basura de Guile... La mayoría de los procedimientos Scheme estándar se implementan mediante funciones C, visibles para los clientes de Guile; por ejemplo, las aplicaciones pueden llamar a la función Cscm_cons, que es la implementación subyacente de los procedimientos Schemecons." Blandy 1997, págs. 94, 96.
  8. "Aplicaciones que utilizan Guile" . Proyecto GNU. Archivado del original el 24/11/2017.
  9. "Incompatibilidades de R7RS (Manual de referencia de Guile)" . Proyecto GNU . Consultado el 20 de enero de 2020 .
  10. Blandy 1997, pág. 87.
  11. "Manual de Guile, Arreglos" . Proyecto GNU.
  12. "Manual de Guile, SLIB" . Proyecto GNU. SLIB no está incluido en la distribución de Guile, pero se puede instalar por separado.
  13. "Debido a que Guile permite que las funciones externas y las funciones de Scheme se llamen libremente entre sí, una continuación de Guile puede incluir marcos de pila tanto de C como de Scheme. Para simplificar, la implementación de Guilecall/cccopia toda la pila de C en el montón; al invocar una continuación, se copia la pila de vuelta desde el montón y se utiliza lalongjmpfunción para reactivarla. Esta implementación tiene varios inconvenientes...", Blandy 1997, p. 99.
  14. "Manual de Guile, Continuaciones" . Proyecto GNU.
  15. "Manual de Guile, GC conservador" . Proyecto GNU.
  16. "Manual de Guile, Historia" .
  17. "Es difícil determinar quién diseñó Guile. Gran parte del mérito sin duda corresponde a Aubrey Jaffer, cuyo excelente intérprete de Scheme, SCM, constituye el núcleo de la implementación. El sistema de módulos fue diseñado y construido por Miles Bader…" "An Anatomy of Guile, The Interface to Tcl/Tk", 1995
  18. "Aquí tenéis una breve historia de este intérprete. Espero que quienes participaron en su desarrollo aporten más información a este documento. SIOD: George Carrette escribió SIOD, la primera versión. Aunque la mayor parte de este código se ha reescrito o reemplazado con el tiempo, el recolector de basura de SIOD sigue siendo una parte importante de Guile. SIOD continúa desarrollándose activamente y está disponible gratuitamente. Ocupa muy poco espacio." Guile Scheme 1995.
  19. "El nombre Guile fue sugerido por primera vez en una discusión de Usenet por Lee Thomas." Guile Scheme 1995.
  20. Lee Thomas (1994-11-04). "El nombre de la rosa" . Grupo de noticias : gnu.misc.discuss . 
  21. "GUILE: dos razones más para preferirlo" .
  22. "GEL: Cambio de nombre importante" .
  23. Archivos de la Guerra de Tcl
  24. Wingo, Andy (16 de julio de 2023). "Entradas antiguas del blog de wingo (a partir de la número 328)" . Advogato.
  25. "Noticias de Guile" . Proyecto GNU. Archivado del original el 28 de marzo de 2014.
  26. Lord, Thomas (julio de 1995). "An Anatomy of Guile The Interface to Tcl/Tk" ( PostScript ) . Tercer Taller Anual de Tcl/Tk . Toronto, Ontario, Canadá: Usenix . Recuperado el 23 de noviembre de 2010 .
  27. "Manual de Guile, Otros Lenguajes" . Proyecto GNU. Guile sigue siendo fundamentalmente un Scheme, pero intenta admitir una amplia variedad de bloques de construcción de lenguajes, de modo que se puedan implementar otros lenguajes sobre Guile.
  28. "Manual de Guile, Torre de Compiladores" . Proyecto GNU. Guile define una torre de lenguajes, comenzando con Scheme y simplificándose progresivamente hasta llegar a lenguajes que se asemejan al conjunto de instrucciones de la máquina virtual.
  29. "GNU Guile 2.2.0 lanzado" . 16 de marzo de 2017. Consultado el 20 de enero de 2020 .
  30. "GNU Guile 3.0.0 lanzado" . 16 de enero de 2020. Consultado el 20 de enero de 2020 .
  31. "GNU Guile 3.0.0 lanzado" . 16 de enero de 2020. Consultado el 20 de enero de 2020 .
  32. "¿Respecto a la implementación de Elisp?" . BT Templeton.
  33. "El futuro de Emacs, Guile y Emacs Lisp" . Consultado el 23 de febrero de 2025 .
  34. "Emacs seductor: ¡Guile-Emacs relanzado!" . EmacsConf . Consultado el 24 de febrero de 2025 .
  35. "Usando Guile para Emacs" . lwn.net . Consultado el 24 de febrero de 2025 .
  36. "12.1 Integración de GNU Guile" . gnu.org . Consultado el 16 de marzo de 2020 .

Lecturas adicionales

  • "Anatomía de Guile, la interfaz con Tcl/Tk" (1995)
  • Blandy, Jim (1998). Peter H. Salus (ed.). «Guile: Un núcleo intérprete para aplicaciones completas» . Manual de lenguajes de programación . IV: Lenguajes de programación funcional y lógica (1.ª  ed.). Macmillan Technical Publishing: 87–104 . ISBN 1-57870-011-6.
  • Sitio web oficial
  • Manual de referencia de Guile en una sola página web extensa.
  • Código fuente en la plataforma de software GNU Savannah
  • ¿Qué es la astucia?
  • "Una breve historia de la astucia" (del manual de la astucia)
  • Entrevista de 2003 con Marius Vollmer, mantenedor de GNU Guile.