Red es un lenguaje de programación diseñado para superar las limitaciones del lenguaje de programación Rebol . [3] Red fue presentado en 2011 por Nenad Rakočević, [4] y es un lenguaje de programación tanto imperativo como funcional . Su sintaxis y uso general se superponen con los del lenguaje interpretado Rebol. [5]
Las opciones de implementación de Red tienen como objetivo crear un lenguaje de programación de pila completa : [4] [6] Red se puede utilizar para programación de nivel extremadamente alto ( DSL y GUI ) así como para programación de nivel bajo ( sistemas operativos y controladores de dispositivos ). La clave del enfoque es que el lenguaje tiene dos partes: Red/System y Red . [7]
if x > y [print "Hello"]
if (x > y) {printf("Hello\n");}
Red busca permanecer independiente de cualquier otra cadena de herramientas ; realiza su propia generación de código. [3] Por lo tanto, es posible compilar de forma cruzada [6] programas Red desde cualquier plataforma que admita a cualquier otra, mediante un interruptor de línea de comandos. Tanto Red como Red/System se distribuyen como software de código abierto bajo la licencia BSD modificada . La biblioteca de tiempo de ejecución se distribuye bajo la licencia Boost Software License , más permisiva .
A partir de la versión 0.6.4, Red incluye un recolector de basura "Simple GC". [9]
Red fue presentado en los Países Bajos en febrero de 2011 en la conferencia Rebol & Boron [10] por su autor Nenad Rakočević. En septiembre de 2011, el lenguaje de programación Red fue presentado a una audiencia más amplia durante el Día de la Libertad del Software 2011. [11] [12] Rakočević es un desarrollador de Rebol desde hace mucho tiempo conocido como el creador del servidor HTTP Cheyenne . [13]
La sintaxis y semántica de Red son muy similares a las de Rebol . [4] [14] Al igual que Rebol, admite firmemente la metaprogramación y los lenguajes específicos del dominio ( DSL ) y, por lo tanto, es una herramienta muy eficiente para la dialectización (creación de DSL integrados). Red incluye un dialecto llamado Red/System, un lenguaje de nivel C que proporciona facilidades de programación del sistema. [7] Red es fácil de integrar con otras herramientas y lenguajes como una DLL (libRed) y muy liviano (alrededor de 1 MB). También puede compilarse de forma cruzada en varias plataformas (consulte la sección Compilación cruzada a continuación) y crear paquetes para plataformas que los requieran (por ejemplo, .APK en Android). [7] Red también incluye un sistema de GUI multiplataforma completamente reactivo basado en un motor de flujo de datos reactivo subyacente, un dialecto de dibujo 2D comparable a SVG, soporte de macros en tiempo de compilación y tiempo de ejecución y más de 40 tipos de datos estándar.
La siguiente es la lista de los objetivos de Red tal como se presentaron en el Día de la Libertad del Software de 2011: [11] [12]
Actualmente se desarrollan en Red las siguientes aplicaciones comerciales:
Está previsto que el desarrollo de Red se realice en dos fases:
Actualmente, Red admite los siguientes objetivos de compilación cruzada: [4]
(Nota: Actualmente, las aplicaciones Red son de 32 bits, pero está previsto cambiar a 64 bits en el futuro. [4] )
El programa "¡Hola, mundo!" en rojo:
Rojo [ Título: "Script simple de Hola Mundo" ] imprimir "¡Hola, Mundo!"
IMPORTANTE: Estos son ejemplos de sintaxis. Hasta que Red tenga soporte para 64 bits , el ejemplo de entero desbordará un entero de 32 bits muy rápidamente. Cambiarlo a `float!` será más útil, pero estos son solo para mostrar la sintaxis del lenguaje.
El siguiente es un ejemplo factorial en rojo:
Rojo [ Título: "Un script factorial" ] ; Nota: El título es opcional.factorial: func [ x [ entero! ] ; Dar el tipo de un argumento en Rojo es opcional ][ o x = 0 [ 1 ][ x * factorial x - 1 ] ]
El siguiente es el mismo ejemplo factorial en Red/System (en este caso muy simple, el código fuente es muy similar a la versión de Red):
Rojo /Sistema [ Título: "Un script factorial" ]factorial: func [ x [ entero! ] ; Esto es obligatorio en Red/System return: [ entero! ] ; Esto es obligatorio en Red/System ][ o x = 0 [ 1 ][ x * factorial x - 1 ] ]
La característica principal de la versión 0.6.4 es lo que llamamos GC simple (recolector de basura). Se planea un GC más avanzado para el futuro