Diferencia entre revisiones de «GNU Guile»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
InternetArchiveBot (discusión · contribs.)
Rescatando referencia 1 y marcando 0 como roto #IABot (v1.6beta)
m →‎sección inicial: «que» sobrante
(No se muestran 12 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
{{Ficha de software
{{Ficha de software
| última_versión = 2.2.2
| última_versión = 2.2.2
| fecha_última_versión = {{fecha|21|04|2017}}<ref name="v2_2_2">{{cita web |url=https://www.gnu.org/software/guile/news/gnu-guile-222-released.html |título=GNU Guile 2.2.2 released |nombre=Andy |apellido=Wingo |website=GNU Guile |editorial=Free Software Foundation, Inc. |fecha=21 de abril de 2017 |fechaacceso=21 de abril de 2017}}</ref>
| fecha_última_versión = {{fecha|1|12|2017}}<ref name="v2_2_2">{{cita web |url=https://www.gnu.org/software/guile/news/gnu-guile-223-released.html |título=GNU Guile 2.2.3 released |nombre=Andy |apellido=Wingo |website=GNU Guile |editorial=Free Software Foundation, Inc. |fecha=21 de abril de 2017 |fechaacceso=21 de abril de 2017}}</ref>
}}
}}


'''GNU Guile''' es el [[intérprete (informática)|intérprete]] preferido para el [[proyecto GNU]], cuenta con una implementación del [[lenguaje de programación]] [[Scheme]].<ref name="gnuLanguages">{{Cita web |url=https://www.gnu.org/prep/standards/html_node/Source-Language.html |título=GNU Coding Standards: 3.1 Which Languages to Use |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref> Su primera versión fue lanzada en [[1993]].{{sfn|Blandy|1997|p=102}} Guile incluye extensiones modulares para muchas tareas de programación diferentes, como las llamadas a sistemas [[POSIX]], entre otras.<ref name="guileModules">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Guile-Modules.html |título=Guile Reference Manual: Guile Modules |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>
'''GNU Guile''' es el [[intérprete (informática)|intérprete]] preferido para el [[proyecto GNU]], cuenta con una implementación del [[lenguaje de programación]] [[Scheme]].<ref name="gnuLanguages">{{Cita web |url=https://www.gnu.org/prep/standards/html_node/Source-Language.html |título=GNU Coding Standards: 3.1 Which Languages to Use |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref> Su primera versión fue lanzada en [[1993]].{{sfn|Blandy|1997|p=102}} Guile incluye extensiones modulares para muchas tareas de programación diferentes, como las llamadas a sistemas [[POSIX]], entre otras.<ref name="guileModules">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Guile-Modules.html |título=Guile Reference Manual: Guile Modules |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>


Para ampliar los programas, Guile cuenta con ''libguile'', una biblioteca que permite que incrustarlo en otros programas e integrarlo estrechamente mediante la C API. De manera similar, los nuevos tipos y subrutinas definidas a través de la API C pueden estar disponibles como extensiones de Guile.{{harvnp|Blandy|1997|pp=94, 96|ps=«To encourage customization, Guile provides extensive interfaces, allowing C code to interact with the Scheme world. C code can freely create, access, and mutate Scheme objects; C functions may call Scheme functions and vice versa; C code may add new types to the Scheme world and take advantage of Guile's garbage collection... Most of the standard Scheme procedures are implemented by C functions, visible to Guile clients; for example, applications can call the C function <code>scm_cons</code>, which is the underlying implementation of the Scheme procedures [[cons]].»}}
Para ampliar los programas, Guile cuenta con ''libguile'', una biblioteca que permite incrustarlo 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 estar disponibles como extensiones de Guile.{{harvnp|Blandy|1997|pp=94, 96|ps=«To encourage customization, Guile provides extensive interfaces, allowing C code to interact with the Scheme world. C code can freely create, access, and mutate Scheme objects; C functions may call Scheme functions and vice versa; C code may add new types to the Scheme world and take advantage of Guile's garbage collection... Most of the standard Scheme procedures are implemented by C functions, visible to Guile clients; for example, applications can call the C function <code>scm_cons</code>, which is the underlying implementation of the Scheme procedures [[cons]].»}}


== Guile Scheme ==
== 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 exportar 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 C API.{{sfn|Blandy|1997|p=87}}
La idea principal de Guile Scheme es que el desarrollador implemente algoritmos críticos y estructuras de datos en C o [[C++]], y exportar las funciones y [[Tipo de dato|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 [[subrutina]]s implementadas a través de la API de C.{{sfn|Blandy|1997|p=87}}


La distribución estándar ofrece módulos para llamadas de sistemas POSIX, [[planificador]]es, una [[interfaz de funciones foráneas]], [[expresión S]] basadas en un procesamiento XML a partir de [[SXML]], SXPath y SXSLT, [[HTTP]] y otras APIs [[World Wide Web|web]], [[continuación delimitada]], [[programación de arrays]],<ref name="guileManule">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Arrays.html |título=Guile Reference Manual: Arrays |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref><ref name="guileModules" /> y otras funciones. Los programas Guile pueden usar las instalaciones de [[SLIB]], la biblioteca portable de Scheme.<ref name="guileSLIB">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/SLIB.html |título=Guile Reference Manual: SLIB |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>
La distribución estándar ofrece módulos para llamadas de sistemas POSIX, [[planificador]]es, 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 [[World Wide Web|web]], [[continuación delimitada]], [[programación de arrays]],<ref name="guileManule">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Arrays.html |título=Guile Reference Manual: Arrays |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref><ref name="guileModules" /> y otras funciones. Los programas escritos en Guile pueden usar las instalaciones de [[SLIB]], la biblioteca portable de Scheme.<ref name="guileSLIB">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/SLIB.html |título=Guile Reference Manual: SLIB |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>


== Historia ==
== 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]], la comunidad comenzó a plantearse como esta estrategia de diseño podría aplicarse al resto del sistema GNU.
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]], la comunidad comenzó a plantearse como esta estrategia de diseño podría aplicarse al resto del sistema GNU.


Tom Lord comenzó a trabajar inicialmente en un lenguaje llamado ''GNU Extensión Language'' (GEL), basado en [[SCM]], una implementación Scheme en C escrita por [[Aubrey Jaffer]] ―a su vez basado en [[SIOD|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, argumentando que [[Scheme]] era un [[dialecto (programación)|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.<ref name="guileTutorial">{{Cita web |url=http://www.delorie.com/gnu/docs/guile/guile-tut_4.html |título=Guile Tutorial: 2.2 History of Guile and its motivations |fechaacceso=28 de julio de 2017 |sitioweb=www.delorie.com}}</ref>
Tom Lord comenzó a trabajar inicialmente en un lenguaje llamado ''GNU Extensión Language'' (GEL), basado en [[SCM]], una implementación de Scheme en escrita en C por [[Aubrey Jaffer]] ―a su vez basado en ''[[SIOD|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, argumentando que [[Scheme]] era un [[dialecto (programación)|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.<ref name="guileTutorial">{{Cita web |url=http://www.delorie.com/gnu/docs/guile/guile-tut_4.html |título=Guile Tutorial: 2.2 History of Guile and its motivations |fechaacceso=28 de julio de 2017 |sitioweb=www.delorie.com}}</ref>


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 [[grupo de noticias|grupos de noticias]], Lord eligió Guile, una sugerencia realizada por Lee Thomas y que causó controversia.<ref name="nameGuile">{{Cita web |url=https://groups.google.com/forum/#!search/%2522Integrated$20Measurement$20Systems%2522$2BGUILE/gnu.misc.discuss/0VtEf1fgEJk/IMBs2o-ftrgJ |título=The Name of the Rose |fechaacceso=28 de julio de 2017 |apellido=Thomas |nombre=Lee |sitioweb=groups.google.com}}</ref><ref name="nameGuile2">{{Cita web |url=https://groups.google.com/forum/#!search/%2522Integrated$20Measurement$20Systems%2522$2BGUILE/gnu.misc.discuss/9pD9yVoRYFw/0z7SLYbx8loJ |título=Google Groups: Guile - two more reasons to prefer it |fechaacceso=28 de julio de 2017 |apellido=Thomas |nombre=Lee |sitioweb=groups.google.com}}</ref><ref name="guileNamechange">{{Cita web |url=https://groups.google.com/forum/#!msg/comp.lang.scheme/X5GrLVAvGLU/Xk11xCrbzCcJ;context-place=msg/comp.lang.scheme/pa8qtbJHFgA/PsscMKOkvRcJ |título=Google Groups: G*L: Important Name Change |fechaacceso=28 de julio de 2017 |apellido=Lord |nombre=Tom |sitioweb=groups.google.com}}</ref>
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 [[grupo de noticias|grupos de noticias]], Lord eligió Guile, una sugerencia realizada por Lee Thomas, aunque causó controversia.<ref name="nameGuile">{{Cita web |url=https://groups.google.com/forum/#!search/%2522Integrated$20Measurement$20Systems%2522$2BGUILE/gnu.misc.discuss/0VtEf1fgEJk/IMBs2o-ftrgJ |título=The Name of the Rose |fechaacceso=28 de julio de 2017 |apellido=Thomas |nombre=Lee |sitioweb=groups.google.com}}</ref><ref name="nameGuile2">{{Cita web |url=https://groups.google.com/forum/#!search/%2522Integrated$20Measurement$20Systems%2522$2BGUILE/gnu.misc.discuss/9pD9yVoRYFw/0z7SLYbx8loJ |título=Google Groups: Guile - two more reasons to prefer it |fechaacceso=28 de julio de 2017 |apellido=Thomas |nombre=Lee |sitioweb=groups.google.com}}</ref><ref name="guileNamechange">{{Cita web |url=https://groups.google.com/forum/#!msg/comp.lang.scheme/X5GrLVAvGLU/Xk11xCrbzCcJ;context-place=msg/comp.lang.scheme/pa8qtbJHFgA/PsscMKOkvRcJ |título=Google Groups: G*L: Important Name Change |fechaacceso=28 de julio de 2017 |apellido=Lord |nombre=Tom |sitioweb=groups.google.com}}</ref>


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'' ({{lang-es|guerras Tcl}}).<ref name="tclWar">{{Cita web |url=http://vanderburg.org/old_pages/Tcl/war/ |título=The Tcl War |fechaacceso=28 de julio de 2017 |apellido=Vanderburg |nombre=Glenn |sitioweb=Glenn Vanderburg |idioma=en-US}}</ref> El anuncio público del proyecto Guile coincidió con el debate Tcl, esto fomentó la idea equivocada de que Guile se comenzó a desarrollar como una reacción a esto.<ref name="guileTutorial" />
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'' ({{lang-es|guerras Tcl}}).<ref name="tclWar">{{Cita web |url=http://vanderburg.org/old_pages/Tcl/war/ |título=The Tcl War |fechaacceso=28 de julio de 2017 |apellido=Vanderburg |nombre=Glenn |sitioweb=Glenn Vanderburg |idioma=en-US}}</ref> 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.<ref name="guileTutorial" />


Después de la publicación inicial de Guile, su desarrollo decayó durante muchos años, pero en entre 2009 y 2010 comenzó a experimentar grandes mejoras.<ref name="oldWingo">{{Cita web |url=http://www.advogato.org/person/wingo/diary.html?start=328 |título=Older blog entries for wingo (starting at number 328) |fechaacceso=28 de julio de 2017 |fecha=30 de junio de 2017 |sitioweb=Advogato: Blog for wingo |urlarchivo=https://web.archive.org/web/20170630101632/http://www.advogato.org/person/wingo/diary.html?start=328 |fechaarchivo=30 de junio de 2017 }}</ref> Guile 2.0 se publicó en 2011 con una nueva infraestructura de [[compilación]], una [[máquina virtual]] implementada, un [[conmutador (dispositivo de red)|conmutador]] para el [[recolector de basura]] [[Boehm-Demers-Weiser]], muchas mejoras del lenguaje en sí mismo y otras cambios mayores.<ref name="newsGuile">{{Cita web |url=http://www.gnu.org/software/guile/news.html |título=GNU Guile (News) |fechaacceso=28 de julio de 2017 |fecha=28 de marzo de 2014 |sitioweb=www.gnu.org |urlarchivo=https://web.archive.org/web/20140328123925/http://www.gnu.org/software/guile/news.html |fechaarchivo=28 de marzo de 2014}}</ref>
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.<ref name="oldWingo">{{Cita web |url=http://www.advogato.org/person/wingo/diary.html?start=328 |título=Older blog entries for wingo (starting at number 328) |fechaacceso=28 de julio de 2017 |fecha=30 de junio de 2017 |sitioweb=Advogato: Blog for wingo |urlarchivo=https://web.archive.org/web/20170630101632/http://www.advogato.org/person/wingo/diary.html?start=328 |fechaarchivo=30 de junio de 2017 }}</ref> Guile 2.0 se publicó en 2011 con una nueva infraestructura de [[compilación]], una [[máquina virtual]] implementada, un [[conmutador (dispositivo de red)|conmutador]] para el [[recolector de basura]] [[Boehm-Demers-Weiser]], muchas mejoras del núcleo del lenguaje y otras cambios mayores.<ref name="newsGuile">{{Cita web |url=http://www.gnu.org/software/guile/news.html |título=GNU Guile (News) |fechaacceso=28 de julio de 2017 |fecha=28 de marzo de 2014 |sitioweb=www.gnu.org |urlarchivo=https://web.archive.org/web/20140328123925/http://www.gnu.org/software/guile/news.html |fechaarchivo=28 de marzo de 2014}}</ref>


Uno de los objetivos de Guile es ofrecer un entorno de lenguaje neutral permitiendo el uso de otros lenguaje 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 fomentado por [[tkWWW]].{{sfn|Lord|1995|pp=2-3}} Con la versión 2.0, el proyecto se convirtió exitosamente en algo parecido a una "torre compilador", permitiendo la definición de compiladores de un lenguaje para otro, normalmente desde uno de nivel más alto a otro de [[lenguaje intermedio]] de nivel más bajo y, ocasionalmente, una máquina virtual [[bytecode]] y [[lenguaje de máquina]].<ref name="guileOtherLang">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Other-Languages.html |título=Guile Reference Manual: Other Languages |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref><ref>{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Compiler-Tower.html |título=Guile Reference Manual: Compiler Tower |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>
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]].{{sfn|Lord|1995|pp=2-3}} 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]].<ref name="guileOtherLang">{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Other-Languages.html |título=Guile Reference Manual: Other Languages |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref><ref>{{Cita web |url=https://www.gnu.org/software/guile/manual/html_node/Compiler-Tower.html |título=Guile Reference Manual: Compiler Tower |fechaacceso=28 de julio de 2017 |sitioweb=www.gnu.org}}</ref>


=== Integración de Emacs ===
=== Integración de Emacs ===
Con la versión 2.0 de Guile se vuelve a intentar implementar [[Emacs Lisp|Elisp]] en la torre compilador y reemplazar la implementación Elisp de Emacs con el comienzo ''libguile''. Se produjeron avances significativos a partir de los proyectos del [[Google Summer of Code]].<ref name="googleSummer">{{Cita web |url=https://lists.gnu.org/archive/html/guile-devel/2011-07/msg00054.html |título=Re: ELisp Implementation? |fechaacceso=28 de julio de 2017 |apellido=Templeton |nombre=BT |fecha=21 de julio de 2011 |sitioweb=lists.gnu.org}}</ref>
Con la versión 2.0 de Guile se comienza a desarrollar ''libguile'', biblioteca con la que se intenta implementar [[Emacs Lisp|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]]''.<ref name="googleSummer">{{Cita web |url=https://lists.gnu.org/archive/html/guile-devel/2011-07/msg00054.html |título=Re: ELisp Implementation? |fechaacceso=28 de julio de 2017 |apellido=Templeton |nombre=BT |fecha=21 de julio de 2011 |sitioweb=lists.gnu.org}}</ref>


A partir de octubre de 2014, la implementación alcanzó una fase en la que Guile Emacs está capacitado para ejecutar la mayor parte del código Emacs Lisp. Los problemas que aún quedan o que se podrían producir implican la representación interna diferente de las cadenas de Emacs Lisp de las cadenas de Scheme, la diferencia entre ambos al utilizar el booleano ''false'' y las listas de objetos vacíos, las macros de Emacs Lisp que no están integradas aún, 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.<ref name="futureEmacs">{{Cita web |url=https://lwn.net/Articles/615220/ |título=The future of Emacs, Guile, and Emacs Lisp |fechaacceso=28 de julio de 2017 |apellido=Willis |nombre=Nathan |sitioweb=lwn.net}}</ref>
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.<ref name="futureEmacs">{{Cita web |url=https://lwn.net/Articles/615220/ |título=The future of Emacs, Guile, and Emacs Lisp |fechaacceso=28 de julio de 2017 |apellido=Willis |nombre=Nathan |sitioweb=lwn.net}}</ref>


== Véase también ==
== Véase también ==

Revisión del 04:16 20 dic 2017

GNU Guile
Información general
Tipo de programa lenguaje de programación
Desarrollador Proyecto GNU
Lanzamiento inicial 1993
Licencia
Información técnica
Programado en C
Interfaz gráfica predeterminada Ncurses
Versiones
Última versión estable 2.2.2 ( 1 de diciembre de 2017[1]​)
Última versión en pruebas 2.9.2
Enlaces

GNU Guile es el intérprete preferido para el proyecto GNU, cuenta con una implementación del lenguaje de programación Scheme.[2]​ Su primera versión fue lanzada en 1993.[3]​ Guile incluye extensiones modulares para muchas tareas de programación diferentes, como las llamadas a sistemas POSIX, entre otras.[4]

Para ampliar los programas, Guile cuenta con libguile, una biblioteca que permite incrustarlo 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 estar disponibles como extensiones de Guile.[5]

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 exportar 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.[6]

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 arrays,[7][4]​ y otras funciones. Los programas escritos en Guile pueden usar las instalaciones de SLIB, la biblioteca portable de Scheme.[8]

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, la comunidad comenzó a plantearse como esta estrategia de diseño podría aplicarse al resto del sistema GNU.

Tom Lord comenzó a trabajar inicialmente en un lenguaje llamado GNU Extensión Language (GEL), basado en SCM, 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, argumentando 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.[9]

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.[10][11][12]

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).[13]​ 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.[9]

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.[14]​ 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.[15]

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.[16]​ 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.[17][18]

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

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

Véase también

Bibliografía

  • Blandy, Jim (1998). «Guile: An Interpreter Core for Complete Applications». En Peter H. Salus, ed. Handbook of Programming Languages (1st edición) (Macmillian Technical Publishing). IV: Functional and Logic Programming Languages: 87-104. ISBN 1-57870-011-6. 
  • Lord, Thomas (1995). «An Anatomy of Guile, The Interface to Tcl/Tk». USENIX Third Annual Tcl/Tk Workshop (Toronto): 21. Consultado el 28 de julio de 2017. 

Referencias

  1. Wingo, Andy (21 de abril de 2017). «GNU Guile 2.2.3 released». GNU Guile. Free Software Foundation, Inc. Consultado el 21 de abril de 2017. 
  2. «GNU Coding Standards: 3.1 Which Languages to Use». www.gnu.org. Consultado el 28 de julio de 2017. 
  3. Blandy, 1997, p. 102.
  4. a b «Guile Reference Manual: Guile Modules». www.gnu.org. Consultado el 28 de julio de 2017. 
  5. Blandy, 1997, pp. 94, 96. «To encourage customization, Guile provides extensive interfaces, allowing C code to interact with the Scheme world. C code can freely create, access, and mutate Scheme objects; C functions may call Scheme functions and vice versa; C code may add new types to the Scheme world and take advantage of Guile's garbage collection... Most of the standard Scheme procedures are implemented by C functions, visible to Guile clients; for example, applications can call the C function scm_cons, which is the underlying implementation of the Scheme procedures cons
  6. Blandy, 1997, p. 87.
  7. «Guile Reference Manual: Arrays». www.gnu.org. Consultado el 28 de julio de 2017. 
  8. «Guile Reference Manual: SLIB». www.gnu.org. Consultado el 28 de julio de 2017. 
  9. a b «Guile Tutorial: 2.2 History of Guile and its motivations». www.delorie.com. Consultado el 28 de julio de 2017. 
  10. Thomas, Lee. «The Name of the Rose». groups.google.com. Consultado el 28 de julio de 2017. 
  11. Thomas, Lee. «Google Groups: Guile - two more reasons to prefer it». groups.google.com. Consultado el 28 de julio de 2017. 
  12. Lord, Tom. «Google Groups: G*L: Important Name Change». groups.google.com. Consultado el 28 de julio de 2017. 
  13. Vanderburg, Glenn. «The Tcl War». Glenn Vanderburg (en inglés estadounidense). Consultado el 28 de julio de 2017. 
  14. «Older blog entries for wingo (starting at number 328)». Advogato: Blog for wingo. 30 de junio de 2017. Archivado desde el original el 30 de junio de 2017. Consultado el 28 de julio de 2017. 
  15. «GNU Guile (News)». www.gnu.org. 28 de marzo de 2014. Archivado desde el original el 28 de marzo de 2014. Consultado el 28 de julio de 2017. 
  16. Lord, 1995, pp. 2-3.
  17. «Guile Reference Manual: Other Languages». www.gnu.org. Consultado el 28 de julio de 2017. 
  18. «Guile Reference Manual: Compiler Tower». www.gnu.org. Consultado el 28 de julio de 2017. 
  19. Templeton, BT (21 de julio de 2011). «Re: ELisp Implementation?». lists.gnu.org. Consultado el 28 de julio de 2017. 
  20. Willis, Nathan. «The future of Emacs, Guile, and Emacs Lisp». lwn.net. Consultado el 28 de julio de 2017. 

Enlaces externos