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 ) |
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] .
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.
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] .
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] .
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] .
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
Ceceo | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Características |
| ||||||||||||||
Implementaciones |
| ||||||||||||||
Hardware |
| ||||||||||||||
Comunidad |
| ||||||||||||||
|