Raqueta (lenguaje de programación)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 16 de marzo de 2022; las comprobaciones requieren 5 ediciones .
raqueta
clase de idioma multiparadigma :
orientado a objetos , procedimental ,
reflexivo ,
funcional ,
lógico ,
meta ,
orientado al lenguaje
Apareció en 1994
Autor plt inc.
extensión de archivo .rkt, .rktl, .rktd, .scrbl, .plt, .sso.scm
Liberar 8.4 [1]  (9 de febrero de 2022 ) ( 2022-02-09 )
sistema de tipos dinámico , estricto , estático
Dialectos Raqueta mecanografiada , Raqueta perezosa , Scribble , FrTime , etc.
sido influenciado Esquema , Eiffel [2]
influenciado esquema [3]
Licencia LGPL
Sitio web racket-lang.org
Plataforma multiplataforma

Racket (anteriormente PLTScheme) es un lenguaje de programación multiparadigma de propósito general que pertenece a la familia Lisp / Scheme . Proporciona un entorno para la programación orientada al lenguaje : uno de los propósitos de la raqueta es la creación, el desarrollo y la implementación de lenguajes de programación [4] [5] . El lenguaje se utiliza en varios contextos: como lenguaje de secuencias de comandos , como lenguaje de propósito general, en la enseñanza de la informática, en la investigación científica.

La plataforma proporciona al usuario una implementación del lenguaje Racket, que incluye un entorno de ejecución desarrollado ( sistema de tiempo de ejecución en inglés  ) [6] , varias bibliotecas, un compilador JIT , etc., así como el entorno de desarrollo DrRacket (anteriormente conocido como DrScheme ) escrito en Raqueta [ 7] . Este entorno de programación se utiliza en el curso MIT ProgramByDesign [en] [ 8 [ 9] . El lenguaje principal de Racket presenta un poderoso sistema de macros que le permite crear lenguajes de programación integrados y específicos de dominio , construcciones de lenguaje (por ejemplo, clases y módulos ) y dialectos de Racket con diferentes semánticas [10] [11] [12] [13] .

El sistema es software libre y de fuente abierta distribuido bajo los términos de la LGPL . Las extensiones y los paquetes escritos por la comunidad están disponibles en PLANeT [14] , la distribución basada en web del sistema [15] .

Historia

Creación

Matthias Felleisen fundó PLT Inc. a mediados de la década de 1990, inicialmente como un grupo de investigación y luego como un proyecto para desarrollar y producir materiales educativos para programadores novatos (conferencias, ejercicios/proyectos, software). En enero de 1995, se decidió desarrollar un entorno de aprendizaje para programar en el lenguaje Scheme . Matthew Flatt creó MrEd, la máquina virtual original de Racket , utilizando libscheme, wxWidgets y algunos otros sistemas gratuitos [16] . Durante los años siguientes, un equipo que incluía, entre otros, a Flatt, Robert Bruce Findler , Sriram Krishnamurti , Cormac Flanagan y muchos otros, lanzó el entorno DrScheme, diseñado para programadores de circuitos novatos e investigación en el campo. de tipeo suave (combinaciones de tipeo estático y dinámico ) [7] . El principal lenguaje de programación soportado por el entorno se llamaba PLT Scheme.

Paralelamente a esto, el equipo comenzó a realizar talleres para profesores de secundaria, enseñándoles sobre diseño de programas y programación funcional . Las pruebas de campo con estos profesores y sus alumnos determinaron las direcciones principales para el desarrollo de productos.

DrScheme se ha complementado con idiomas de aprendizaje , un paso algebraico  [17] , un bucle REPL transparente , un subsistema de impresión basado en contras y muchas otras innovaciones que han hecho de DrScheme un producto educativo de calidad. En 2001, How to Design Programs fue escrito y publicado por los desarrolladores del lenguaje , basado en su filosofía de enseñanza de la programación.

Desarrollo de DrScheme

Las versiones de primera generación de DrScheme introdujeron herramientas para " programar en grande " usando módulos y clases . En la versión 42, se agregaron unidades: un sistema de módulos - objetos de primera clase , que permite complementar los módulos durante el desarrollo de grandes sistemas [18] . Por un lado, se complementó el sistema de clases (en particular, con interfaces al estilo Java ), y por otro lado, se redujo (en particular, se eliminó la herencia múltiple ) [11] . El lenguaje evolucionó a lo largo de varias versiones sucesivas y ganó popularidad en la versión 53, lo que aceleró aún más el trabajo en él y la siguiente versión 100 se convirtió en el equivalente de "1.0".

La siguiente revisión importante, la número 200, introdujo un nuevo sistema de módulos predeterminado integrado con macros [18] . En particular, el sistema modular garantiza que los cálculos en tiempo de ejecución y los cálculos en tiempo de compilación estén separados para admitir la "torre de idiomas" [19] . A diferencia de las unidades, estos módulos no son objetos de primera clase .

La versión 300 introdujo soporte para Unicode , una biblioteca de interfaz con funciones externas y cambió el sistema de clases [18] . Posteriormente, para los lanzamientos de la versión 300, se mejoró el rendimiento mediante la adición de un compilador JIT y recolección de elementos no utilizados con soporte para generación de objetos .

Para la próxima versión importante, DrScheme cambió al sistema de numeración de versiones generalmente aceptado basado en fracciones decimales . La versión 4.0 introduce una abreviatura #langpara el [sub]idioma en el que está escrito el módulo. También se introdujeron en esta versión pares y listas inmutables , compatibilidad con paralelismo detallado y un dialecto tipificado estáticamente [20] .

Raqueta

El 7 de junio de 2010, PLT Scheme pasó a llamarse Racket [21] , coincidiendo con el lanzamiento de la versión 5.0. Posteriormente, en la versión 5.1, el programa GUI subyacente se reescribió de C++ a Racket utilizando su propio conjunto de herramientas de interfaz de usuario en todas las plataformas [16] . La versión 5.2 incluye un verificador de sintaxis en segundo plano , una nueva biblioteca de trazador, bibliotecas de bases de datos y un nuevo REPL mejorado [22] . La versión 5.3 incluye nuevas funciones: submódulos para módulos cargados opcionalmente [23] , nuevas herramientas de optimización , una biblioteca JSON y otras funciones [24] . La versión 5.3.1 ha mejorado significativamente DrRacket: se ha agregado un nuevo visor de documentación, la verificación de sintaxis en segundo plano está habilitada de manera predeterminada [25] .

La principal innovación de la versión 6.0, lanzada el 24 de febrero de 2014, fue un nuevo sistema de paquetes, el kit de distribución de Racket se volvió modular, consta de más de 200 paquetes. Ahora puede instalar Minimal Racket, donde estos paquetes no están preinstalados. También se ha agregado soporte para la compilación JIT para la arquitectura ARM , se ha mejorado significativamente el rendimiento de Typed Racket, etc. [26] .

Las principales novedades de la versión 7.0, lanzada a fines de julio de 2018, están relacionadas con la preparación para reemplazar la máquina virtual propia de Racket con Chez Scheme [27] .

Raqueta Chez Esquema

Desde principios de 2017, el sistema de macros y módulos de Racket se ha reescrito para reemplazar la máquina virtual C con Chez Scheme , además de mejorar la portabilidad y la facilidad de soporte para Racket. Esta bifurcación de Racket se conoce como Racket CS [28] . En enero de 2019, se anunció que Racket on Chez Scheme sería completamente funcional. Aunque el código compilado de Racket CS generalmente se ejecuta tan rápido como el código clásico de Racket y, a veces, incluso más rápido, aún no se ha encontrado que el rendimiento general sea suficiente para hacer de Racket CS la implementación predeterminada de Racket. En particular, la velocidad de compilación y el tiempo de inicio del sistema Racket se redujeron [29] A partir de la versión de Racket 7.4, lanzada el 8 de agosto de 2019, la variante de RacketCS recibió el estado de una versión beta disponible para descargar desde la página oficial de el lenguaje de programación [30] .

Ejemplos de código

Un programa trivial de " hola mundo " se vería así:

# lang racket "¡Hola, mundo!"

Cuando se ejecuta, generará:

"¡Hola Mundo!"

Aquí hay un programa un poco menos trivial:

# lang racket ( requiere 2 htdp/image ) ( let sierpinski ([ n 8 ]) ( if ( zero? n ) ( Triangle 2 'solid 'red ) ( let ([ t ( sierpinski ( - n 1 ))]) ( congelar ( por encima de t ( al lado de t t ))))))

Este programa, tomado del sitio web de Racket, dibujará un triángulo de Sierpinski con una profundidad de anidamiento de 8.

Un ejemplo de uso de un generador:

# lang racket ( requiere racket/generator ) ( define fib ( generator () ( let loop (( x 1 ) ( y 1 )) ( yield x ) ( loop y ( + x y )))))

Usando la directiva #lang, puede escribir programas en dialectos alternativos de Racket. Aquí hay un ejemplo de un factorial en Typed Racket, un dialecto tipificado estáticamente :

# lang typed/racket ( : fact ( Integer -> Integer )) ( define ( fact n ) ( cond [( zero? n ) 1 ] [ else ( * n ( fact ( - n 1 )))]))

El modo de compatibilidad con el estándar de lenguaje Scheme es seleccionado por la directiva o , respectivamente. #lang R6RS#lang R5RS

Notas

  1. Raqueta v8.4 . Archivado desde el original el 12 de mayo de 2022. Consultado el 5 de abril de 2022.
  2. Strickland, TS; Fellesisen, Matthias DLS 2010: Contratos para clases de primera clase (2010). Archivado desde el original el 23 de mayo de 2013.
  3. Sperber, Michael; Dybvig, R. Kent; Flatt, Mateo; Van Straaten, Anton, et al. Informe revisado 6 sobre el esquema de lenguaje algorítmico (R6RS) . Comité Directivo del Esquema (agosto de 2007). Consultado el 13 de septiembre de 2011. Archivado desde el original el 23 de mayo de 2013.
  4. Bienvenido a Raqueta . Consultado el 15 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  5. Dialectos de Racket y Scheme . Consultado el 15 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  6. Plano; buscador; krishnamurthi; Felleisen (1999). Lenguajes de Programación como Sistemas Operativos (o, La Venganza del Hijo de la Máquina Lisp) . Congreso Internacional de Programación Funcional.
  7. 1 2 Buscador; Clemente; Flanagan; plano; krishnamurthi; Steckler; Felleisen. DrScheme: un entorno de programación para Scheme  //  Revista de programación funcional : diario. — 2001.
  8. ¡El esquema de enseñanza! Proyecto: Computación y Programación para Todos los Estudiantes . Archivado desde el original el 1 de mayo de 2012. Consultado el 22 de mayo de 2013.
  9. Resumen . Programa por Diseño. Consultado el 17 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  10. Las macros importan (3 de mayo de 2007). Consultado el 8 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  11. 12 Flatt , M.; Findler, RB; Felleisen, M. (2006). “Esquema con clases, mezclas y rasgos” (PDF) . Simposio Asiático sobre Lenguajes y Sistemas de Programación . Archivado el 10 de mayo de 2012 en Wayback Machine .
  12. Flatt, M.; Felleisen, M. (1998). "Unidades: Cool Modules para Hot Languages" . Diseño e Implementación de Lenguajes de Programación . Archivado el 4 de noviembre de 2011 en Wayback Machine .
  13. 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 . Archivado el 10 de marzo de 2012 en Wayback Machine .
  14. PLANETA . Consultado el 22 de mayo de 2013. Archivado desde el original el 30 de mayo de 2013.
  15. Matthews, J. (2006). “Despliegue de componentes con PLANeT: ¿Lo quieres dónde?”. Taller de Esquemas y Programación Funcional .
  16. 1 2 Reconstrucción de la capa de gráficos de Racket (8 de diciembre de 2010). Consultado el 23 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  17. Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modelado de un Stepper algebraico" (PDF) . Simposio Europeo sobre Lenguajes de Programación . Archivado el 10 de mayo de 2012 en Wayback Machine .
  18. 1 2 3 "Notas de la versión de Racket Core" . Consultado el 15 de abril de 2012. Archivado desde el original el 23 de mayo de 2013.
  19. Flatt, M. (2002). Macros componibles y compilables. Congreso Internacional de Programación Funcional .
  20. PLT Scheme versión 4.0 (12 de junio de 2008). Consultado el 7 de agosto de 2012. Archivado desde el original el 23 de mayo de 2013.
  21. De PLT Scheme a Racket . racket-lang.org. Consultado el 17 de agosto de 2011. Archivado desde el original el 23 de mayo de 2013.
  22. Raqueta 5.2 (9 de noviembre de 2011). Consultado el 16 de junio de 2012. Archivado desde el original el 23 de mayo de 2013.
  23. Submódulos (3 de junio de 2012). Consultado el 7 de agosto de 2012. Archivado desde el original el 23 de mayo de 2013.
  24. Raqueta 5.3 (7 de agosto de 2012). Consultado el 7 de agosto de 2012. Archivado desde el original el 23 de mayo de 2013.
  25. Raqueta 5.3.1 (7 de noviembre de 2012). Consultado el 7 de noviembre de 2012. Archivado desde el original el 23 de mayo de 2013.
  26. Ryan Culpepper. Raqueta v6.0  (inglés) . blog.racket-lang.org (26 de febrero de 2014). Consultado el 3 de febrero de 2019. Archivado desde el original el 11 de noviembre de 2020.
  27. Vincent St Amour. Raqueta v7.0  (inglés) . blog.racket-lang.org (27 de julio de 2018). Consultado el 3 de febrero de 2019. Archivado desde el original el 10 de marzo de 2019.
  28. Mateo Flatt. Estado de Racket-on-Chez: enero de  2018 . blog.racket-lang.org (5 de enero de 2018). Consultado el 26 de junio de 2018. Archivado desde el original el 28 de junio de 2018.
  29. Mateo Flatt. Estado de Racket-on-Chez: enero de 2019  (inglés) . blog.racket-lang.org (29 de enero de 2019). Consultado el 3 de febrero de 2019. Archivado desde el original el 3 de febrero de 2019.
  30. John Clements. Raqueta v7.4 . blog.racket-lang.org. Consultado el 7 de octubre de 2019. Archivado desde el original el 8 de octubre de 2019.

Literatura

Lecciones

Guía de estilo

Enlaces