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 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 ejemplos se ofrecen como ejemplos de sintaxis. Hasta que Red tenga compatibilidad con 64 bits , el ejemplo de entero desbordará un entero de 32 bits muy rápidamente. Cambiarlo a `float!` será más útil, pero estos ejemplos son simplemente 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 0.6.4 es lo que llamamos GC simple (recolector de basura). Se planea un GC más avanzado para el futuro