Racket es un lenguaje de programación multiparadigma de propósito general . El lenguaje Racket es un dialecto moderno de Lisp y descendiente de Scheme . Está diseñado como una plataforma para el diseño e implementación de lenguajes de programación . [ 9 ] Además del lenguaje Racket principal, Racket también se usa para referirse a la familia de lenguajes de programación [ 10 ] y al conjunto de herramientas que apoyan el desarrollo en y con Racket. [ 11 ] Racket también se usa para scripting , enseñanza de ciencias de la computación e investigación.
La plataforma Racket proporciona una implementación del lenguaje Racket, que incluye un sistema de tiempo de ejecución , [ 12 ] bibliotecas y un compilador que admite varios modos de compilación: código máquina , multiplataforma , interpretado y compilación justo a tiempo (JIT) junto con el entorno de desarrollo integrado (IDE) DrRacket escrito en Racket. [ 13 ] Racket es utilizado por el programa de divulgación ProgramByDesign , que tiene como objetivo convertir la informática en "una parte indispensable del currículo de artes liberales ". [ 14 ] [ 15 ]
El lenguaje Racket es conocido por su extenso sistema de macros que permite crear lenguajes embebidos y específicos de dominio , construcciones de lenguaje como clases o módulos , y dialectos separados de Racket con semántica diferente . [ 16 ] [ 17 ] [ 18 ] [ 19 ]
La distribución de la plataforma es software libre y de código abierto distribuido bajo las licencias Apache 2.0 y MIT . [ 20 ] Las extensiones y los paquetes escritos por la comunidad pueden subirse al catálogo de paquetes de Racket .
Historia
Desarrollo
Matthias Felleisen fundó PLT Inc. a mediados de la década de 1990, primero como un grupo de investigación, [ 21 ] poco después como un proyecto dedicado a producir materiales pedagógicos para programadores novatos (conferencias, ejercicios/proyectos, software). En enero de 1995, el grupo decidió desarrollar un entorno de programación pedagógico basado en Scheme . Matthew Flatt creó MrEd, la máquina virtual original para Racket, a partir de libscheme, [ 22 ] wxWidgets y algunos otros sistemas libres. [ 23 ] En los años siguientes, un equipo que incluía a Flatt, Robby Findler , Shriram Krishnamurthi , Cormac Flanagan y muchos otros produjo DrScheme, un entorno de programación para programadores novatos de Scheme y un entorno de investigación para tipado gradual . [ 13 ] El principal lenguaje de desarrollo que DrScheme admitía se llamaba PLT Scheme.
Paralelamente, el equipo comenzó a impartir talleres para profesores de secundaria, capacitándolos en diseño de programas y programación funcional. Las pruebas de campo realizadas con estos profesores y sus alumnos proporcionaron pistas esenciales para orientar el desarrollo.
Durante los años siguientes, PLT añadió lenguajes de enseñanza, un paso algebraico, [ 24 ] un bucle transparente de lectura-evaluación-impresión , una impresora basada en constructores y muchas otras innovaciones a DrScheme, creando un entorno de desarrollo de programas pedagógicos de calidad para aplicaciones. Para 2001, el equipo principal (Felleisen, Findler, Flatt, Krishnamurthi) también había escrito y publicado su primer libro de texto, How to Design Programs , basado en su filosofía de enseñanza.
El Manifiesto de Racket [ 9 ] detalla los principios que impulsan el desarrollo de Racket, presenta el marco de evaluación detrás del proceso de diseño y detalla las oportunidades para futuras mejoras.
Historial de versiones
La primera generación de revisiones de PLT Scheme introdujo características para la programación a gran escala con módulos y clases . La versión 42 introdujo unidades –un sistema de módulos de primera clase– para complementar las clases para el desarrollo a gran escala. [ 25 ] El sistema de clases ganó características (p. ej., interfaces al estilo Java ) y también perdió varias características (p. ej. , herencia múltiple ) a lo largo de estas versiones. [ 16 ] El lenguaje evolucionó a lo largo de varias versiones sucesivas y ganó popularidad en la versión 53, lo que llevó a un trabajo extenso y a la siguiente versión 100, que sería equivalente a una versión "1.0" en los sistemas de versiones populares actuales.
La siguiente revisión importante se denominó Versión 200, que introdujo un nuevo sistema de módulos predeterminado que coopera con las macros. [ 25 ] En particular, el sistema de módulos garantiza que el cálculo en tiempo de ejecución y en tiempo de compilación se separen para admitir una "torre de lenguajes". [ 26 ] A diferencia de las unidades, estos módulos no son objetos de primera clase .
La versión 300 introdujo soporte para Unicode , soporte para bibliotecas extranjeras y mejoras en el sistema de clases. [ 25 ] Posteriormente, la serie 300 mejoró el rendimiento del entorno de ejecución del lenguaje con la adición de un compilador JIT y un cambio a una recolección de basura generacional predeterminada .
Para la siguiente versión principal, el proyecto había cambiado a una numeración de versiones más convencional basada en secuencias . La versión 4.0 introdujo la #langnotación abreviada para especificar el lenguaje en el que está escrito un módulo. Además, la revisión introdujo pares y listas inmutables , soporte para paralelismo de grano fino y un dialecto de tipado estático . [ 27 ]
El 7 de junio de 2010, PLT Scheme pasó a llamarse Racket. [ 28 ] El cambio de nombre coincidió con el lanzamiento de la versión 5.0. Posteriormente, el backend de la interfaz gráfica de usuario (GUI) se reescribió en Racket desde C++ en la versión 5.1 utilizando kits de herramientas de interfaz de usuario nativos en todas las plataformas. [ 23 ] La versión 5.2 incluyó una herramienta de verificación de sintaxis en segundo plano, una nueva biblioteca de trazado , una biblioteca de base de datos y un nuevo REPL extendido. [ 29 ] La versión 5.3 incluyó una nueva función de submódulo para módulos cargados opcionalmente, [ 30 ] nuevas herramientas de optimización , una biblioteca JSON y otras características. [ 31 ] La versión 5.3.1 introdujo mejoras importantes en DrRacket: el verificador de sintaxis en segundo plano se activó por defecto y se añadió una nueva herramienta de vista previa de la documentación. [ 32 ]
En la versión 6.0, Racket lanzó su sistema de gestión de paquetes de segunda generación. Como parte de este desarrollo, el repositorio principal de DrRacket y Racket se reorganizó y dividió en un gran conjunto de paquetes pequeños, lo que permite instalar una versión mínima de Racket e instalar solo los paquetes necesarios. [ 33 ]
La versión 7 de Racket se lanzó con un nuevo expansor de macros escrito en Racket como parte de los preparativos para la migración al sistema de tiempo de ejecución Chez Scheme y la compatibilidad con múltiples sistemas de tiempo de ejecución. [ 34 ] [ 35 ] El 19 de noviembre de 2019, se lanzó Racket 7.5. La licencia de Racket 7.5 era menos restrictiva. Ahora utilizan la licencia Apache 2.0 o la licencia MIT. [ 36 ] [ 37 ]
El 13 de febrero de 2021 se lanzó Racket 8.0. Racket 8.0 es la primera versión en la que Racket con el sistema de ejecución Chez Scheme , conocido como Racket CS, es la implementación predeterminada. Racket CS es más rápido, más fácil de mantener y desarrollar, compatible con versiones anteriores de programas Racket y cuenta con una mejor recolección de basura paralela. [ 38 ]
Características
El lenguaje central de Racket incluye macros , módulos , cierres léxicos , llamadas de cola , continuaciones delimitadas , [ 39 ] parámetros (variables fluidas), contratos de software , [ 40 ] hilos verdes e hilos del sistema operativo , [ 41 ] [ 42 ] [ 43 ] y más. El lenguaje también viene con primitivas, como espacios de eventos y custodios, que controlan la administración de recursos y permiten que el lenguaje actúe como un sistema operativo para cargar y administrar otros programas. [ 12 ] Se crean extensiones adicionales del lenguaje con el potente sistema de macros, que junto con el sistema de módulos y analizadores personalizados puede controlar todos los aspectos de un lenguaje. [ 44 ] La mayoría de las construcciones del lenguaje en Racket se implementan como macros en el lenguaje base. Estas incluyen un sistema de clases mixin , [ 16 ] un sistema de componentes (o módulos) tan expresivo como la adscripción opaca en el sistema de módulos ML , [ 17 ] y coincidencia de patrones .
Además, el lenguaje presenta el primer sistema de contratos para un lenguaje de programación de orden superior . [ 45 ] El sistema de contratos de Racket se inspira en el trabajo de Diseño por Contrato de Eiffel y lo extiende para funcionar con valores de orden superior, como funciones de primera clase , objetos, celdas de referencia , etc. Por ejemplo, se puede garantizar que un objeto que se verifica mediante un contrato realice las comprobaciones del contrato cuando se invoquen sus métodos.
Racket incluye compiladores de código de bytes y compiladores JIT . El compilador de código de bytes genera un formato interno de código de bytes que ejecuta la máquina virtual de Racket , y el compilador JIT traduce el código de bytes a código máquina en tiempo de ejecución.
Desde 2004, el lenguaje también incluye PLANeT, un gestor de paquetes integrado en el sistema de módulos que permite importar y utilizar bibliotecas de terceros de forma transparente. Además, PLANeT cuenta con una política de versionado integrada para evitar problemas de dependencias . [ 46 ]
A finales de 2014, gran parte del código de Racket se trasladó a un nuevo sistema de empaquetado independiente del código base principal. Este nuevo sistema de empaquetado es gestionado por un programa cliente llamado raco . El nuevo sistema de empaquetado ofrece menos funcionalidades que PLANeT; una entrada de blog de Jay McCarthy en el blog de Racket explica el motivo del cambio y cómo replicar el sistema anterior. [ 47 ]
Extensibilidad de lenguaje integrada y macros
Las características que distinguen más claramente a Racket de otros lenguajes de la familia Lisp son sus características de extensibilidad de lenguaje integradas que permiten construir nuevos lenguajes de dominio específico y de propósito general . Las características de extensibilidad de Racket están integradas en el sistema de módulos para permitir un control de la sintaxis sensible al contexto y a nivel de módulo . [ 18 ] Por ejemplo, la #%appforma sintáctica puede ser sobrescrita para cambiar la semántica de la aplicación de funciones . De manera similar, la #%module-beginforma permite un análisis estático arbitrario de todo el módulo. [ 18 ] Dado que cualquier módulo puede usarse como un lenguaje, a través de la #langnotación, esto significa que prácticamente cualquier aspecto del lenguaje puede ser programado y controlado.
Las características de extensibilidad a nivel de módulo se combinan con un sistema de macros higiénicas similar a Scheme , que proporciona más características que el sistema de manipulación de expresiones s de Lisp , [ 48 ] [ 49 ] las macros de sintaxis extendida higiénicas de Scheme 84 o las reglas de sintaxis de R5RS . De hecho, se puede afirmar que el sistema de macros es una interfaz de programación de aplicaciones (API) cuidadosamente ajustada para extensiones de compilador . Mediante esta API de compilador, los programadores pueden añadir características y lenguajes específicos de dominio completos de forma que resulten completamente indistinguibles de las construcciones de lenguaje integradas.
El sistema de macros de Racket se ha utilizado para construir dialectos de lenguajes completos . Esto incluye Typed Racket, que es un dialecto de Racket con tipado gradual que facilita la migración de código sin tipado a código tipado, [ 50 ] Lazy Racket, un dialecto con evaluación perezosa , [ 51 ] y Hackett, que combina Haskell y Racket. [ 52 ] El lenguaje de programación pedagógico Pyret se implementó originalmente en Racket. [ 53 ] [ 54 ]
Otros dialectos incluyen FrTime ( programación reactiva funcional ), Scribble (lenguaje de documentación), [ 55 ] Slideshow ( lenguaje de presentación ), [ 56 ] y varios lenguajes para la educación. [ 57 ] [ 58 ]
La distribución principal de Racket proporciona bibliotecas para facilitar el desarrollo de lenguajes de programación. [ 18 ] Dichos lenguajes no se limitan a la sintaxis basada en expresiones S. Además de las extensiones de sintaxis convencionales basadas en la lectura, la directiva #langpermite la invocación de analizadores sintácticos arbitrarios, que pueden implementarse utilizando la biblioteca de herramientas de análisis sintáctico. [ 59 ] Consulte la programación lógica de Racket para ver un ejemplo de dicho lenguaje.
Entorno de programación
La plataforma de lenguaje proporciona un IDE autoalojado [ 13 ] llamado DrRacket, un servidor web basado en continuación [ 60 ] , una interfaz gráfica de usuario [ 23 ] y otras herramientas. Como una herramienta de scripting viable con bibliotecas como lenguajes de scripting comunes, se puede usar para automatizar la shell de Unix. Puede analizar argumentos de línea de comandos y ejecutar herramientas externas.
IDE DrRacket
DrRacket (antes DrScheme) es ampliamente utilizado en cursos introductorios de informática que enseñan Scheme o Racket, y es elogiado por su simplicidad y atractivo para los programadores principiantes. El IDE se creó originalmente para su uso con el proyecto TeachScheme! (ahora ProgramByDesign ), una iniciativa de divulgación de la Universidad Northeastern y varias universidades afiliadas para atraer a estudiantes de secundaria a cursos de informática a nivel universitario.
El editor ofrece resaltado de sintaxis y errores de ejecución, coincidencia de paréntesis, un depurador y un analizador algebraico paso a paso. Entre sus funciones pensadas para estudiantes se incluye la compatibilidad con varios niveles de lenguaje (principiante, intermedio, etc.). También cuenta con soporte integrado para bibliotecas y sofisticadas herramientas de análisis para programadores avanzados. Además, admite la programación orientada a módulos con un explorador de módulos, una vista de contorno, pruebas integradas , mediciones de cobertura y soporte para refactorización . Proporciona acceso integrado y contextual a un extenso sistema de ayuda con hipervínculos llamado "Mesa de Ayuda".
DrRacket está disponible para Windows , macOS , Unix y Linux con el sistema X Window , y los programas se comportan de manera similar en todas estas plataformas.
Ejemplos de código
Aquí tenéis un programa trivial de "¡Hola, mundo!" :
#lang racket "¡Hola, mundo!"Al ejecutar este programa se obtiene el siguiente resultado:
- "¡Hola Mundo!"
Aquí hay un programa un poco menos trivial:

#lang racket ( requiere 2htdp/imagen )( dejar sierpinski ([ n 8 ]) ( si ( cero? n ) ( triángulo 2 ' sólido ' rojo ) ( dejar ([ t ( sierpinski ( -n 1 ) )]) ( congelar ( arriba t ( al lado de t t ))))))Este programa, tomado del sitio web de Racket, dibuja un triángulo de Sierpinski , anidado hasta una profundidad de 8.
Mediante esta #langdirectiva, se puede escribir un archivo fuente en diferentes dialectos de Racket. Aquí hay un ejemplo del programa factorial en Typed Racket, un dialecto de Racket con tipado estático :
#lang typed/racket( : hecho ( Entero -> Entero )) ( define ( hecho n ) ( si ( cero? n ) 1 ( * n ( hecho ( - n 1 )))))Implementaciones
Racket cuenta actualmente con dos implementaciones. Ambas son compatibles con Linux, Windows y macOS en diversas arquitecturas y reciben soporte hasta la versión 8.8 (2023). La implementación predeterminada utiliza el compilador incremental y el entorno de ejecución Chez Scheme . La implementación alternativa genera código de bytes independiente de la plataforma y utiliza compilación justo a tiempo para generar código máquina a medida que se carga. [ 61 ]
Además, existen implementaciones experimentales:
- RacketScript es un compilador experimental de Racket a JavaScript (ES6). Permite a los programadores usar tanto el ecosistema de JavaScript como el de Racket y busca que esta interoperabilidad sea lo más fluida posible. [ 62 ]
- Pycket es una implementación de Racket generada utilizando el framework RPython. [ 63 ]
Aplicaciones y uso práctico
Además de tener una base en la teoría de lenguajes de programación , Racket fue diseñado como un lenguaje de propósito general para sistemas de producción. Por lo tanto, la distribución de Racket presenta una extensa biblioteca que cubre programación de sistemas y redes, desarrollo web, [ 60 ] una interfaz uniforme para el sistema operativo subyacente, una interfaz dinámica de funciones externas , [ 64 ] varios tipos de expresiones regulares , generadores de analizadores léxicos/sintácticos, [ 59 ] programación lógica y un marco de trabajo GUI completo .
Racket cuenta con varias características útiles para un lenguaje comercial, entre ellas la capacidad de compilar ejecutables independientes en Windows, macOS y Unix, un generador de perfiles y un depurador incluidos en el entorno de desarrollo integrado (IDE), y un marco de pruebas unitarias .
Racket se ha utilizado para proyectos comerciales y aplicaciones web. Un ejemplo notable es el sitio web Hacker News , que funciona con Arc , desarrollado en Racket. Naughty Dog lo ha utilizado como lenguaje de scripting en varios videojuegos. [ 65 ]
Racket se utiliza para enseñar álgebra a los estudiantes a través del diseño de juegos en el programa Bootstrap . [ 66 ]
Véase también
Referencias
- ↑ "Versión 9.2" . 28 de mayo de 2026. Consultado el 28 de mayo de 2026 .
- ↑ Tobin-Hochstadt, Sam; Gerard, Sage; Dueck, Joel; Flatt, Matthew ; Software Freedom Conservancy ; Chestek, Pamela (15 de noviembre de 2019). "Completando el esfuerzo de renovación de licencias de Racket" . Recuperado el 27 de diciembre de 2019 .
- ↑ "Archivos DrRacket" . Consultado el 21 de julio de 2019.
La extensión de archivo estándar para un archivo de programa Racket es ".rkt". Las extensiones ".ss", ".scm" y ".sch" también son populares históricamente.
- ↑ Strickland, TS; Fellesisen, Matthias (2010). "DLS 2010: Contratos para clases de primera clase" (PDF) .
- ↑ Bonnaire-Sergeant, Ambrose (2012). Un sistema práctico de tipos opcionales para Clojure (Tesis). Universidad de Australia Occidental.
- ↑ "Preguntas sobre Planet2" .
- ↑ "Bibliografía de Rust" . GitHub . 23 de noviembre de 2022.
- ↑ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. (agosto de 2007). "Informe revisado 6 sobre el esquema de lenguaje algorítmico (R6RS)" . Comité directivo del esquema . Recuperado el 13 de septiembre de 2011 .
- 1 2 Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S.; Barzilay, E.; McCarthy, J.; Tobin-Hochstadt, S. (2015). "El Manifiesto Racket" (PDF) . Actas de la Primera Cumbre sobre Avances en Lenguajes de Programación : 113–128 .
- ↑ "Dialectos de estafa y engaño" . Consultado el 15 de agosto de 2011 .
- ↑ "Bienvenido a Racket" . Consultado el 15 de mayo de 2019 .
- 1 2 Flatt; Findler; Krishnamurthi; Felleisen (1999). Lenguajes de programación como sistemas operativos (o, La venganza del hijo de la máquina Lisp) . Conferencia internacional sobre programación funcional.
- 1 2 3 Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). "DrScheme: Un entorno de programación para Scheme" (PDF) . Journal of Functional Programming .
- ↑ Felleisen; Findler; Flatt; Krishnamurthi (2004). "El proyecto TeachScheme!: Informática y programación para todos los estudiantes" . Revista de Educación en Ciencias de la Computación .
- ↑ "Descripción general" . Programa por diseño. Archivado del original el 20 de mayo de 2013. Consultado el 17 de agosto de 2011 .
- 1 2 3 Flatt, M.; Findler, RB; Felleisen, M. (2006). "Scheme con clases, mixins y rasgos" (PDF) . Simposio asiático sobre lenguajes y sistemas de programación .
- 1 2 Flatt, M.; Felleisen, M. (1998). "Unidades: Módulos geniales para lenguajes populares" . Diseño e implementación de lenguajes de programación .
- 1 2 3 4 Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Lenguajes como bibliotecas" (PDF) . Diseño e implementación de lenguajes de programación .
- ^ Felleisen, Matías; Findler, Robert Bruce; Flatt, Mateo; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (2018). "Un lenguaje de programación programable" . Comunicaciones de la ACM . 61 (3): 62– 71. doi : 10.1145/3127323 . S2CID 3887010 .
- ↑ "Racket: Licencia de software" . Consultado el 20 de octubre de 2015 .
- ↑ "Equipo" . Raqueta . Consultado el 25 de abril de 2026 .
- ↑ Benson, Brent W. Jr. (26–28 de octubre de 1994). «libscheme: Scheme como una biblioteca de C» . Escrito en Santa Fe, NM. Actas del Simposio USENIX sobre Lenguajes de Muy Alto Nivel . Berkeley, CA: Asociación USENIX. págs. 7–19 . ISBN 978-1880446652. Consultado el 7 de julio de 2013 .
- 1 2 3 "Reconstruyendo la capa gráfica de Racket" . 8 de diciembre de 2010. Consultado el 11 de diciembre de 2017 .
- ↑ Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modelado de un paso algebraico" (PDF) . Simposio Europeo sobre Lenguajes de Programación .
- 1 2 3 "Notas de la versión de Racket Core" . Archivado del original el 5 de julio de 2013. Recuperado el 15 de abril de 2012 .
- ↑ Flatt, M. (2002). "Macros componibles y compilables". Conferencia internacional sobre programación funcional .
- ↑ "PLT Scheme versión 4.0" . 12 de junio de 2008. Archivado del original el 2 de febrero de 2013. Consultado el 7 de agosto de 2012 .
- ↑ "De PLT Scheme a Racket" . Racket-lang.org . Consultado el 17 de agosto de 2011 .
- ↑ "Racket 5.2" . PLT, Inc. 09/11/2011 . Consultado el 16/06/2012 .
- ↑ "Submódulos" . 3 de junio de 2012. Consultado el 7 de agosto de 2012 .
- ↑ "Racket 5.3" . PLT, Inc. 2012-08-07 . Consultado el 2012-08-07 .
- ↑ "Racket 5.3.1" . PLT, Inc. 2012-11-07 . Consultado el 2012-11-07 .
- ↑ "Racket 6.0" . PLT, Inc. 26 de febrero de 2014. Consultado el 23 de febrero de 2016 .
- ↑ "Estado de Racket-on-Chez: enero de 2018" . 5 de enero de 2018. Archivado del original el 28 de junio de 2018. Consultado el 13 de abril de 2018 .
- ↑ Flatt, Matthew; Derici, Caner; Dybvig, R. Kent; Keep, Andrew W.; Massaccesi, Gustavo E.; Spall, Sarah; Tobin-Hochstadt, Sam; Zeppieri, Jon (26 de julio de 2019). "Reconstrucción de Racket en Chez Scheme (Informe de experiencia)" . Actas de la ACM sobre lenguajes de programación . 3 (ICFP): 1–15 . doi : 10.1145/3341642 . ISSN 2475-1421 .
- ↑ "Lanzamiento de Rack 7.5" . Packt Hub . 22 de noviembre de 2019. Consultado el 28 de noviembre de 2019 .
- ↑ "Racket v7.5" . Racket | Blog . Consultado el 28 de noviembre de 2019 .
- ↑ "Racket v8.0" .
- ↑ Flatt, M.; Yu, G.; Findler, RB; Felleisen, M. (2007). "Adding Delimited and Composable Control to a Production Programming Environment" (PDF) . International Conference on Functional Programming .
- ↑ "Contratos" .
- ↑ "Hilos" .
- ↑ "Futuros" .
- ↑ "Lugares" .
- ↑ Flatt, Matthew (2012). "Creating Languages in Racket" . Communications of the ACM . Recuperado el 8 de abril de 2012 .
- ↑ Findler, RB; Felleisen, M. (2002). "Contratos para funciones de orden superior" (PDF) . Conferencia internacional sobre programación funcional .
- ↑ Matthews, J. (2006). "Despliegue de componentes con PLANeT: ¿Dónde lo quieres?". Taller de programación funcional y de esquemas .
- ↑ "El sistema de paquetes Racket y Planet" .
- ↑ Flatt, Matthew (2002). "Macros componibles y compilables, ¿cuándo las necesitas?" (PDF) . Conferencia Internacional sobre Programación Funcional .
- ↑ Flatt, Culpepper, Darais, Findler, Macros que funcionan juntas; Enlaces en tiempo de compilación, expansión parcial y contextos de definición
- ↑ Tobin-Hochstadt, S.; Felleisen, M. (2008). "El diseño e implementación de esquemas tipados". Principios de lenguajes de programación .
- ↑ Barzilay, E.; Clements, J. (2005). "Pereza sin todo el trabajo duro: Combinando lenguajes perezosos y estrictos para la enseñanza". Programación funcional y declarativa en la educación .
- ↑ "El lenguaje de programación Hackett" . Blog de Alexis King . Consultado el 16 de junio de 2019 .
- ↑ The Pyret Crew (24 de mayo de 2011). "El código Pyret; o una justificación para el lenguaje de programación Pyret" . Pyret . Consultado el 16 de junio de 2019 .
- ↑ "Programación y lenguajes de programación" . Índice de / . 20 de septiembre de 2017. Consultado el 16 de junio de 2019 .
- ↑ Flatt, M.; Barzilay, E.; Findler, RB (2009). "Scribble: Cerrando el libro sobre las herramientas de documentación ad hoc". Conferencia Internacional sobre Programación Funcional .
- ↑ Findler, RB; Flatt, M. (2004). "Presentación de diapositivas: Presentaciones funcionales". Conferencia internacional sobre programación funcional .
- ↑ Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S. (2009). "Un sistema de E/S funcional (o diversión para estudiantes de primer año)" (PDF) . Conferencia Internacional sobre Programación Funcional .
- ↑ Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S. (2004). "La estructura e interpretación del currículo de informática" (PDF) . Journal of Functional Programming . 14 (4): 365– 378. doi : 10.1017/S0956796804005076 .
- 1 2 "Herramientas de análisis sintáctico: análisis sintáctico estilo lex y yacc" . Consultado el 16 de agosto de 2011 .
- 1 2 Krishnamurthi, Hopkins; McCarthy; Graunke; Pettyjohn; Felleisen (2007). "Implementación y uso del servidor web PLT Scheme" (PDF) . Journal of Higher-Order and Symbolic Programming . 20 (4): 431– 460. doi : 10.1007/s10990-007-9008-y . S2CID 17731194 .
- ↑ Implementaciones
- ↑ RacketScript
- ↑ Pycket
- ↑ Barzilay, E.; Orlovsky, D. (2004). "Interfaz externa para PLT Scheme" (PDF) . Scheme y programación funcional .
- ↑ "DSLs funcionales de mzScheme en el desarrollo de juegos" . Consultado el 8 de mayo de 2012 .
- ↑ "Bootstrap" . bootstrapworld.org . Consultado el 11 de agosto de 2015 .
Lecturas adicionales
- Felleisen et al. , 2013. Reino de la Raqueta . Sin prensa de almidón.
- Felleisen et al. , 2003. Cómo diseñar programas . MIT Press.
Enlaces externos
- Sitio web oficial
- Lenguajes funcionales
- Lenguajes de programación orientados a objetos
- Lenguajes de programación con sintaxis extensible
- Implementaciones de Scheme (lenguaje de programación)
- Compiladores de Scheme (lenguaje de programación)
- Intérpretes de Scheme (lenguaje de programación)
- Esquema R6RS
- Lenguajes de programación académica
- Lenguajes de programación educativa
- Entornos de desarrollo pedagógico integrado
- Software libre multiplataforma
- Compiladores libres y de código abierto
- Lenguajes de programación creados en 1995
- Lenguajes de programación que coinciden con patrones
- Scheme (lenguaje de programación)
- Desarrollo de software
- banco de trabajo de lenguaje
- Familia de lenguajes de programación Lisp