Rebol ( / r ɛ b əl / REB -əl ; históricamente REBOL ) es una multiplataforma [6] lenguaje de intercambio de datos y una multi-paradigma lenguaje de programación dinámico diseñado por Carl Sassenrath para comunicaciones de red y computación distribuida . Introduce el concepto de dialección : lenguajes pequeños, optimizados y de dominio específico para código y datos, [6] [7] que es también la propiedad más notable del lenguaje según su diseñador.Carl Sassenrath :
Paradigma | programación orientada al lenguaje , intercambio de datos , funcional , basada en prototipos , imperativa |
---|---|
Diseñada por | Carl Sassenrath |
Desarrollador | Tecnologías REBOL |
Apareció por primera vez | 1997 |
Lanzamiento estable | 2.7.8 / enero de 2011 |
Versión de vista previa | 2.101.0 / diciembre de 2012 |
Disciplina de mecanografía | dinámico , fuerte |
SO | multiplataforma |
Licencia | 2.7.8 es software de libre distribución , [1] 2.101.0 tiene licencia Apache 2.0 [2] |
Extensiones de nombre de archivo | .r, .reb [3] |
Sitio web | www |
Influenciado por | |
Self , Forth , Lisp , Logo [4] | |
Influenciado | |
JSON , [5] rojo | |
|
Aunque se puede utilizar para programar, escribir funciones y realizar procesos, su mayor fortaleza es la capacidad de crear fácilmente lenguajes o dialectos específicos del dominio.
- Carl Sassenrath [8]
Douglas Crockford , conocido por su participación en el desarrollo de JavaScript , ha descrito a Rebol como "un lenguaje más moderno, pero con algunas ideas muy similares a Lisp, en el sentido de que todo se basa en una representación de datos que luego se pueden ejecutar como programas" y como una de las influencias de JSON . [5]
Originalmente, el lenguaje y su implementación oficial eran propietarios y de código cerrado, desarrollados por REBOL Technologies. Tras la discusión con Lawrence Rosen , [9] el intérprete Rebol versión 3 fue lanzado bajo la licencia Apache 2.0 el 12 de diciembre de 2012. [10] Las versiones más antiguas solo están disponibles en forma binaria, y no se planea la publicación de la fuente para ellas.
Rebol se ha utilizado para programar aplicaciones de Internet (tanto del lado del cliente como del servidor ), aplicaciones de bases de datos , utilidades y aplicaciones multimedia . [6]
Etimología
Rebol era inicialmente un acrónimo de R elative E Xpression B asándose O bject L anguage escrito en todos los casquillos. [6] [8] Para alinearse con las tendencias modernas en la denominación de lenguajes representadas, por ejemplo, por el cambio que reemplazó el nombre histórico LISP por Lisp , los programadores dejaron de escribir REBOL en mayúsculas. Sassenrath finalmente planteó la cuestión del nombre en el debate de la comunidad en su blog. [11] En escritos posteriores, Sassenrath adoptó la convención de escribir el nombre del idioma como Rebol . [12]
Historia
Lanzado por primera vez en 1997, Rebol fue diseñado durante un período de 20 años por Carl Sassenrath, el arquitecto y desarrollador principal de AmigaOS , basado en su estudio de la semántica denotacional y usando conceptos de los lenguajes de programación Lisp , Forth , Logo y Self .
- REBOL Technologies se fundó en 1998.
- REBOL 2 , el intérprete, que se convirtió en el núcleo de las ediciones extendidas para intérpretes, se lanzó por primera vez en 1999.
- REBOL / Command , que agregó cifrado sólido y acceso ODBC , se lanzó en septiembre de 2000.
- REBOL / View fue lanzado en abril de 2001, agregando habilidades gráficas en el lenguaje principal.
- REBOL / IOS , un entorno de colaboración extensible construido con REBOL fue lanzado en agosto de 2001.
- REBOL / SDK , que ofrece una selección de kernels contra los que unirse, así como un preprocesador, se lanzó en diciembre de 2002.
- Rebol 3 [R3], la versión más reciente del intérprete , tenía versiones alfa lanzadas por REBOL Technologies desde enero de 2008. Desde su lanzamiento como proyecto Apache 2 en diciembre de 2012, está siendo desarrollado por la comunidad Rebol. [13]
Diseño
Facilidad de uso
Uno de los principios de diseño de Rebol es "hacer cosas sencillas de forma sencilla". [6] En el siguiente ejemplo, el dialecto de la interfaz visual se utiliza para describir un programa sencillo de Hello world con una interfaz gráfica de usuario:
ver diseño [ texto "¡Hola mundo!" botón "Salir" [ salir ]]
Así es como se ve un ejemplo similar en R3-GUI:
ver [ texto "¡Hola mundo!" botón "Salir" en la acción [ salir ]]
Dialectos
Los lenguajes específicos de dominio de Rebol , llamados dialectos , son microlenguajes optimizados para un propósito específico. Los dialectos se pueden utilizar para definir reglas comerciales, interfaces gráficas de usuario o secuencias de pantallas durante la instalación de un programa. Los usuarios pueden definir sus propios dialectos, reutilizando cualquier palabra Rebol existente y dándole un significado específico en ese dialecto. [6] Los dialectos se interpretan mediante funciones que procesan bloques Rebol (o analizan cadenas) de una manera específica.
Un ejemplo de las habilidades de dialección de Rebol se puede ver con la palabra return
. En el dialecto de intercambio de datos return
es solo una palabra que no tiene ningún significado específico. En el dialecto do , return
es una variable global que se refiere a una función nativa que devuelve un valor de resultado de función. [4] En el dialecto de la interfaz visual (VID) , return
es una palabra clave que hace que el motor de diseño simule un retorno de carro , moviendo el "lápiz de renderizado" al principio de la siguiente línea. [7]
Un intérprete de Rebol con habilidades gráficas debe comprender e interpretar muchos dialectos. La siguiente tabla enumera los más importantes en orden de importancia.
Nombre del dialecto | Interpretado por | Propósito |
---|---|---|
Dialecto de intercambio de datos | load función | representa datos y metadatos; plataforma común para los dialectos Rebol |
Hacer dialecto | do función | programación |
Analizar dialecto | parse función | la coincidencia de patrones |
Dialecto de especificación de función | make función | definición de función ; programación funcional |
Dialecto de especificación de objetos | make función | definición / herencia de objeto ; programación basada en prototipos |
Dialecto de interfaz visual (VID) o RebGUI | layout función o display función | especifica la interfaz gráfica de usuario |
Dibujar dialecto | view función | define elementos gráficos (líneas, polígonos, etc.) |
Dialecto de especificación de secuencia de comandos | do función | definición de script |
Dialecto de la política de seguridad | secure función | especifica la política de seguridad |
Sintaxis
La sintaxis de Rebol es de forma libre y no requiere un posicionamiento específico. Sin embargo, la sangría se utiliza a menudo para transmitir mejor la estructura del texto a los lectores humanos.
Las propiedades sintácticas de diferentes dialectos pueden diferir. La plataforma común para todos los dialectos Rebol es el dialecto de intercambio de datos ; otros dialectos suelen derivarse de él. Además de ser la plataforma común para todos los dialectos, el dialecto de intercambio de datos se usa directamente para representar datos y metadatos, poblar estructuras de datos, enviar datos a través de Internet y guardarlos en el almacenamiento de datos.
A diferencia de los lenguajes de programación como C , el dialecto de intercambio de datos no consta de declaraciones , declaraciones , expresiones o palabras clave. Un flujo de texto de dialecto de intercambio de datos válido es una estructura de datos de árbol que consta de bloques (el bloque raíz está implícito, los subbloques están delimitados por corchetes ), parens (delimitados por corchetes ), cadenas (delimitadas por comillas dobles o corchetes aptos para múltiples -cadenas de línea; la notación de intercalación se usa para caracteres no imprimibles), URL , direcciones de correo electrónico, archivos, rutas u otros valores compuestos . A diferencia de los bloques ALGOL , los bloques Rebol son valores compuestos similares a las expresiones s entre comillas en Lisp . El hecho de que el código esté escrito en forma de bloques Rebol hace que el lenguaje sea homoicónico . [4]
Tanto los bloques como los parens pueden contener otros valores compuestos (un bloque puede contener subbloques, parens, cadenas, ...) o valores escalares como palabras, palabras de conjunto (palabras con el sufijo de dos puntos ), get-words (palabras con el prefijo de dos puntos), lit-words (palabras precedidas por el apóstrofo ), números, dinero, caracteres , etc., separados por espacios en blanco . Tenga en cuenta que los caracteres especiales están permitidos en las palabras, por lo que a+b
es una palabra diferente a + b
, que es una secuencia de tres palabras separadas por espacios.
Los comentarios pueden aparecer después del punto y coma hasta el final de la línea. Los comentarios de varias líneas o los comentarios no ignorados por el analizador léxico se pueden escribir utilizando tipos de datos "ordinarios" como cadenas de varias líneas. [4]
Semántica
Los bloques que contienen lenguaje específico de dominio se pueden enviar como argumentos a funciones de evaluador específicas . [6]
hacer
El evaluador más utilizado es la do
función. Se utiliza de forma predeterminada para interpretar la entrada de texto a la consola del intérprete .
El dialecto do interpretado por la do
función, es un sublenguaje orientado a la expresión del dialecto de intercambio de datos . La principal unidad semántica del lenguaje es la expresión . En contraste con los lenguajes de programación imperativos que descienden de ALGOL , el dialecto do no tiene palabras clave ni declaraciones.
Las palabras se utilizan como variables que no distinguen entre mayúsculas y minúsculas . Como en todos los lenguajes tipados dinámicamente , las variables no tienen un tipo asociado, el tipo está asociado con valores. Se devuelve el resultado, es decir, la evaluación de una palabra, cuando la función encuentra una palabra . La forma de palabra establecida de una palabra se puede utilizar para la asignación . Si bien no tiene declaraciones, la asignación, junto con las funciones con efectos secundarios, se pueden utilizar para la programación imperativa . [4]do
Los subbloques del bloque raíz se evalúan por sí mismos. Esta propiedad se utiliza para bloques de datos de la manija, para la programación estructurada mediante la presentación de bloques como argumentos para control de funciones como if
, either
, loop
, etc., y para dialecting, cuando un bloque se pasa a una función específica intérprete. [6]
Un problema específico que vale la pena señalar es que los valores compuestos, asignados a las variables, no se copian. Para hacer una copia, el valor debe pasarse a la copy
función. [4]
La do
función normalmente sigue un estilo de evaluación de prefijo , donde una función procesa los argumentos que le siguen. Sin embargo, también existe la evaluación de infijos usando operadores infijos . La evaluación de infijo tiene prioridad sobre la evaluación de prefijo. Por ejemplo,
abs -2 + 3
devuelve 1, ya que la suma infija tiene prioridad sobre el cálculo del valor absoluto. Al evaluar expresiones infijas, el orden de evaluación es de izquierda a derecha, ningún operador tiene prioridad sobre otro. Por ejemplo,
2 + 3 * 4
devuelve 20, mientras que una evaluación que dé prioridad a la multiplicación produciría 14. Todos los operadores tienen versiones de prefijo. Do
normalmente evalúa los argumentos antes de pasarlos a una función. Entonces, la siguiente expresión:
imprimir leer http://en.wikipedia.org/wiki/Rebol
primero lee la página de Wikipedia Rebol y luego pasa el resultado a la print
función. Se pueden utilizar paréntesis para cambiar el orden de evaluación. Usando la notación de prefijo , se puede evitar el uso de paréntesis en expresiones. [4]
Las reglas de precedencia simples son una ventaja:
- No es necesario "consultar" tablas de precedencia al escribir expresiones
- No es necesario volver a escribir las tablas de precedencia cuando se define un nuevo operador
- Las expresiones se pueden transcribir fácilmente de notación de infijo a prefijo y viceversa
así como una desventaja:
- Los usuarios acostumbrados a reglas de precedencia más convencionales pueden cometer fácilmente un error [6]
analizar gramaticalmente
La parse
función se usa preferiblemente para especificar, validar, transformar e interpretar dialectos. Lo hace haciendo coincidir expresiones de análisis en tiempo de ejecución. [6]
Las expresiones parse se escriben en el dialecto parse , que, como el dialecto do , es un sublenguaje orientado a la expresión del dialecto de intercambio de datos . A diferencia del dialecto do , el dialecto de análisis usa palabras clave que representan operadores y los no terminales más importantes , los operadores de análisis infijo no tienen equivalentes de prefijo y usan reglas de precedencia (la secuencia tiene mayor precedencia que la elección ). [6]
También se pueden incluir acciones para realizar durante el proceso de análisis y la parse
función se puede utilizar para procesar bloques o cadenas. En el nivel de análisis de cadenas separse
debe manejar el análisis de "bajo nivel", teniendo en cuenta los caracteres y delimitadores. El análisis de bloques es de nivel superior, manejando el análisis al nivel de los valores de Rebol. [6]
El dialecto de análisis sintáctico pertenece a la familia de gramáticas representadas por el lenguaje de análisis sintáctico de arriba hacia abajo o la gramática de expresión sintáctica (PEG). La principal similitud es la presencia de los operadores de secuencia y elección que tienen todos los miembros de la familia. La sintaxis del dialecto de análisis y las similitudes entre el dialecto de análisis y el PEG se ilustran con esta transliteración de un ejemplo de PEG que analiza una expresión aritmética:
Dígito: juego de caracteres [ # "0" - # "9" ] Valor: [ algunos dígitos | "(" Expr ")" ] Producto: [ Valor cualquier [[ "*" | "/" ] Valor ]] Suma: [ Producto cualquiera [[ "+" | "-" ] Producto ]] Expr: Análisis de suma / todos "12 + 13" Expr
Implementaciones
La implementación oficial de Rebol 2.7.8 está disponible en varias ediciones ( / Core , / View , / Command , / SDK y / IOS ). Ambas ediciones / Core y / View son software de libre distribución . [1]
El entorno de ejecución se almacena en un solo archivo ejecutable. Rebol / Core 2.7.8, la edición de consola, tiene un tamaño aproximado de 300 KB y Rebol / View 2.7.8, la edición de interfaz gráfica de usuario , tiene un tamaño aproximado de 650 KB.
Rebol / View proporciona acceso de sonido y gráficos independientes de la plataforma , y viene con su propio kit de herramientas de ventanas y un conjunto extensible de estilos ( widgets GUI ). Las ediciones extendidas, como Rebol / Command 2.7.8 o Rebol / SDK 2.7.8 requieren una licencia paga; agregan características como acceso a datos ODBC y la opción de crear archivos ejecutables independientes. [ cita requerida ]
Legado
- Rebol fue nombrado por Douglas Crockford como una de las inspiraciones de la notación de objetos JavaScript . [5]
- Rebol inspiró el proyecto Orca de código abierto, que es un lenguaje interpretado similar a Rebol. [14]
- El boro es un lenguaje homoicónico interpretado inspirado y similar a Rebol, que está destinado a incrustar lenguajes específicos de dominio. Se implementa como una biblioteca C con licencia según los términos de LGPLv3.
- El lenguaje de programación Red se inspiró directamente en Rebol, sin embargo, las opciones de implementación de Red se orientaron específicamente a superar sus limitaciones percibidas. [15]
Ver también
- Lenguaje específico del dominio
- Programación orientada al lenguaje
Referencias
- ^ a b Tecnologías REBOL. El REBOL / Vista y REBOL / Core 2.7.8 licencia
- ^ Fuente R3 en GitHub
- ^ "Blog REBOL de Carl - Cambiemos al sufijo .reb" . Rebol.com. 18 de agosto de 2013 . Consultado el 23 de enero de 2014 .
- ↑ a b c d e f g Goldman, E., Blanton, J. (2000). REBOL: La guía oficial. McGraw-Hill Osborne Media. ISBN 0-07-212279-X .
- ^ a b c Crockford, Douglas . The JSON Saga , jsonsaga.ppt Archivado el 4 de octubre de 2012 en Wayback Machine.
- ↑ a b c d e f g h i j k l Roberts, Ralph (2000). REBOL para tontos. Mentes hambrientas. ISBN 0-7645-0745-1 .
- ↑ a b Auverlot, Olivier (2001). Programación Rebol. Eyrolles. ISBN 2-212-11017-0 .
- ^ a b Sassenrath, Carl (1 de julio de 2000). "Dentro del lenguaje de scripting REBOL" . Diario del Dr. Dobb .
- ^ "REBOL para convertirse en código abierto" . Rebol.com. 25 de septiembre de 2012 . Consultado el 23 de enero de 2014 .
- ^ Sassenrath, Carl (12 de diciembre de 2012). "Comentarios sobre: ¡Lanzamiento del código fuente de R3!" . Consultado el 14 de agosto de 2014 .
Probablemente pensaste que el lanzamiento de la fuente nunca se produciría Estoy en lo cierto? Bueno, ahora está en github en github.com/rebol/rebol.
- ^ "¿Llamando a REBOL Rebol?" . 14 de diciembre de 2012. Archivado desde el original el 3 de diciembre de 2013 . Consultado el 2 de diciembre de 2013 .
- ^ Sassenrath, Carl. "Rebol de compilación cruzada para su placa embebida favorita" . Consultado el 16 de septiembre de 2016 .
- ^ "Código fuente para el intérprete de Rebol" . rebol / rebol GitHub . Consultado el 14 de marzo de 2017 .
- ^ El proyecto rebol-orca en Freecode
- ^ El proyecto rojo en GitHub
Otras lecturas
- Mikes, Nora (20 de noviembre de 1999). "Una incursión REBOL: no es un lenguaje de scripting, no es un lenguaje de programación - y tampoco es un nuevo Amiga. ¿O no?" . LinuxWorld . Archivado desde el original el 24 de marzo de 2005.
- Story, Derrick (27 de agosto de 1999). "Rebol podría ser el idioma para el resto de nosotros" . Revisión web . Archivado desde el original el 12 de octubre de 1999.
enlaces externos
- REBOL en Curlie
- Un tutorial de REBOL
- Tutorial de Rebol 3