Rebol ( / ˈ r ɛ b əl / REB -əl ; históricamente REBOL ) es un lenguaje de intercambio de datos multiplataforma [ 6 ] y un lenguaje de programación dinámica multiparadigma diseñado por Carl Sassenrath para comunicaciones de red y computación distribuida . Introduce el concepto de dialecto : lenguajes pequeños, optimizados y específicos de dominio para código y datos, [ 6 ] [ 7 ] que también es la propiedad más notable del lenguaje según su diseñador Carl Sassenrath :
Aunque se puede utilizar para programar, escribir funciones y realizar procesos, su mayor fortaleza reside en la capacidad de crear fácilmente lenguajes o dialectos específicos de un dominio.
— Carl Sassenrath [ 8 ]
Douglas Crockford , conocido por su participación en el desarrollo de JavaScript , ha descrito Rebol como "un lenguaje más moderno, pero con algunas ideas muy similares a Lisp , ya que todo está construido sobre una representación de datos que luego se puede ejecutar como programas" y como una de las influencias de JSON . [ 5 ]
Originalmente, el lenguaje y su implementación oficial eran de código cerrado y de propiedad exclusiva , desarrollados por REBOL Technologies. Tras una conversación con Lawrence Rosen , [ 9 ] el intérprete Rebol versión 3 se publicó bajo la licencia Apache 2.0 el 12 de diciembre de 2012. [ 10 ] Las versiones anteriores solo están disponibles en formato binario y no se prevé la publicación del código fuente .
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 Relative Expression Based Object Language escrito en mayúsculas. [ 6 ] [ 8 ] Para alinearse con las tendencias modernas en la nomenclatura 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 sometió la cuestión de la nomenclatura al debate de la comunidad en su blog. [ 11 ] En escritos posteriores, Sassenrath adoptó la convención de escribir el nombre del lenguaje como Rebol . [ 12 ]
Historia
Lanzado por primera vez en 1997, Rebol fue diseñado a lo largo de 20 años por Carl Sassenrath, arquitecto y desarrollador principal de AmigaOS , basándose en su estudio de la semántica denotacional y utilizando conceptos de los lenguajes de programación Lisp , Forth , Logo y Self .
- REBOL Technologies fue fundada en 1998.
- REBOL 2 , el intérprete, que se convirtió en la base de las ediciones extendidas del intérprete, se lanzó por primera vez en 1999.
- REBOL/Command , que incorporaba cifrado robusto y acceso ODBC , se lanzó en septiembre de 2000.
- REBOL/View se lanzó en abril de 2001, añadiendo capacidades gráficas al lenguaje principal.
- REBOL/IOS , un entorno de colaboración extensible creado con REBOL, se lanzó en agosto de 2001.
- REBOL/SDK , que ofrece la posibilidad de elegir entre varios núcleos para la integración, así como un preprocesador, se lanzó en diciembre de 2002.
- Rebol 3 [R3], la versión más reciente del intérprete , tuvo versiones alfa publicadas 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, se utiliza el dialecto de interfaz visual para describir un programa simple "Hola mundo" con una interfaz gráfica de usuario:
diseño de vista [ 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 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 usar para definir reglas de negocio, 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 de Rebol existente y dándole un significado específico en ese dialecto. [ 6 ] Los dialectos son interpretados por funciones que procesan bloques de Rebol (o analizan cadenas) de una manera específica.
Un ejemplo de las capacidades dialectales de Rebol se puede ver con la palabra return. En el dialecto de intercambio de datosreturn es simplemente una palabra sin ningún significado específico. En el dialecto do , returnes una variable global que hace referencia a una función nativa que devuelve un valor de resultado de la función. [ 4 ] En el dialecto de interfaz visual (VID ) , returnes una palabra clave que hace que el motor de diseño simule un retorno de carro , moviendo el "lápiz de renderizado" hacia abajo al principio de la siguiente línea. [ 7 ]
Un intérprete de Rebol con habilidades gráficas debe comprender e interpretar numerosos dialectos. La siguiente tabla enumera los más importantes en orden de relevancia.
Sintaxis
La sintaxis de Rebol es de formato libre y no requiere un posicionamiento específico. Sin embargo, a menudo se utiliza la indentación para transmitir mejor la estructura del texto a los lectores.
Las propiedades sintácticas de los distintos dialectos pueden variar. La plataforma común para todos los dialectos de Rebol es el dialecto de intercambio de datos ; los demás dialectos suelen derivarse de él. Además de ser la plataforma común para todos los dialectos, el dialecto de intercambio de datos se utiliza directamente para representar datos y metadatos, poblar estructuras de datos, enviar datos por Internet y guardarlos en sistemas de almacenamiento de datos.
A diferencia de lenguajes de programación como C , el dialecto de intercambio de datos no consta de declaraciones , sentencias , expresiones ni palabras clave. Un flujo de texto válido del dialecto de intercambio de datos es una estructura de datos en forma de árbol que consta de bloques (el bloque raíz es implícito, los subbloques están delimitados por corchetes ), paréntesis (delimitados por paréntesis redondos ), cadenas (delimitadas por comillas dobles o llaves adecuadas para cadenas de varias líneas; se utiliza la notación de circunflejo 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 se escriba en forma de bloques Rebol hace que el lenguaje sea homoicónico . [ 4 ]
Los bloques, así como los paréntesis, pueden contener otros valores compuestos (un bloque puede contener subbloques, paréntesis, cadenas, ...) o valores escalares como palabras, palabras de conjunto (palabras con el sufijo de dos puntos ), palabras de obtención (palabras con el prefijo de dos puntos), palabras de escritura (palabras con el prefijo de apóstrofe ), números, dinero, caracteres , etc., separados por espacios en blanco . Se permiten caracteres especiales en las palabras, por lo que a+bes una palabra, a diferencia de 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 que no son ignorados por el analizador léxico pueden escribirse utilizando tipos de datos "ordinarios" como cadenas de varias líneas. [ 4 ]
Semántica
Los bloques que contienen lenguaje específico del dominio pueden enviarse como argumentos a funciones de evaluación específicas . [ 6 ]
hacer
El evaluador más utilizado es la dofunción. Se utiliza por defecto para interpretar la entrada de texto en la consola del intérprete .
El dialecto `do`, interpretado por la dofunción, es un sublenguaje orientado a expresiones del dialecto de intercambio de datos . La unidad semántica principal del lenguaje es la expresión . A diferencia de los lenguajes de programación imperativos derivados de ALGOL , el dialecto `do` no tiene ni palabras clave ni sentencias.
Las palabras se utilizan como variables que no distinguen entre mayúsculas y minúsculas . Al igual que en todos los lenguajes de tipado dinámico , las variables no tienen un tipo asociado; el tipo se asocia a los valores. El resultado, es decir, la evaluación de una palabra, se devuelve cuando la función la encuentra. La forma de palabra de conjunto se puede utilizar para la asignación . Aunque no tenga sentencias, la asignación, junto con funciones con efectos secundarios, se puede utilizar para la programación imperativa . [ 4 ]do
Los subbloques del bloque raíz se evalúan a sí mismos. Esta propiedad se utiliza para manejar bloques de datos, para programación estructurada al enviar bloques como argumentos a funciones de controlif como , either, loop, etc., y para la dialectación, cuando un bloque se pasa a una función específica del intérprete. [ 6 ]
Un problema específico que cabe destacar es que los valores compuestos, asignados a variables, no se copian. Para realizar una copia, el valor debe pasarse a la copyfunción. [ 4 ]
La dofunción normalmente sigue un estilo de evaluación prefijo , donde una función procesa los argumentos que la siguen. Sin embargo, también existe la evaluación infija utilizando operadores infijos . La evaluación infija tiene precedencia sobre la evaluación prefija. 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 * 4devuelve 20, mientras que una evaluación que da prioridad a la multiplicación daría como resultado 14. Todos los operadores tienen versiones con prefijo. DoNormalmente evalúa los argumentos antes de pasarlos a una función. Por lo tanto, la siguiente expresión:
Imprimir leer http://en.wikipedia.org/wiki/Rebol
Primero lee la página de Wikipedia sobre Rebol y luego pasa el resultado a la printfunción. Se pueden usar paréntesis para cambiar el orden de evaluación. Usando la notación prefija , se puede evitar el uso de paréntesis en las expresiones. [ 4 ]
Las sencillas reglas de precedencia permiten escribir expresiones sin consultar una tabla de precedencia que se modificaría para reflejar la inclusión de nuevos operadores, y también permiten cambiar expresiones de notación prefija a infija mediante métodos más simples. Sin embargo, como desventaja, pueden ser fuente de errores para los usuarios acostumbrados a la notación convencional utilizada por la mayoría de los demás lenguajes y herramientas. [ 6 ]
analizar gramaticalmente
La parsefunción se utiliza preferiblemente para especificar, validar, transformar e interpretar dialectos. Lo hace comparando expresiones de análisis sintáctico en tiempo de ejecución. [ 6 ]
Las expresiones de análisis sintáctico se escriben en el dialecto de análisis sintáctico , que, al igual que el dialecto de ejecución , es un sublenguaje orientado a expresiones del dialecto de intercambio de datos . A diferencia del dialecto de ejecución , el dialecto de análisis sintáctico utiliza palabras clave que representan operadores y los no terminales más importantes ; los operadores de análisis sintáctico infijo no tienen equivalentes de prefijo y utilizan reglas de precedencia ( la secuencia tiene mayor precedencia que la elección ). [ 6 ]
También se pueden incluir acciones que se realicen durante el proceso de análisis, y la parsefunción se puede utilizar para procesar bloques o cadenas. En el nivel de análisis de cadenas,parse se debe manejar el análisis de "bajo nivel", teniendo en cuenta los caracteres y los delimitadores. El análisis de bloques es de nivel superior, manejando el escaneo a nivel de valores Rebol. [ 6 ]
El dialecto de análisis sintáctico pertenece a la familia de gramáticas representada por el lenguaje de análisis sintáctico descendente o la gramática de expresiones de análisis sintáctico (PEG). La principal similitud radica en la presencia de los operadores de secuencia y elección , comunes a todos los miembros de la familia. La sintaxis del dialecto de análisis sintáctico y las similitudes entre este y la PEG se ilustran mediante la siguiente transliteración de un ejemplo de PEG que analiza una expresión aritmética:
Dígito: charset [ #"0" - #"9" ] Valor: [ algún Dígito | "(" Expr ")" ] Producto: [ Valor cualquiera [[ "*" | "/" ] Valor ]] Suma: [ Producto cualquiera [[ "+" | "-" ] Producto ]] Expr: Suma parse/ todo "12+13" ExprImplementaciones
La implementación oficial de Rebol 2.7.8 está disponible en varias ediciones ( /Core , /View , /Command , /SDK y /IOS ). Tanto las ediciones /Core como /View son software de libre distribución . [ 1 ]
El entorno de ejecución se almacena en un único 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 con interfaz gráfica de usuario , tiene un tamaño aproximado de 650 KB.
Rebol/View proporciona acceso a gráficos y sonido independiente de la plataforma , e incluye su propio conjunto de herramientas de ventanas y un conjunto extensible de estilos ( widgets de interfaz gráfica ). Las ediciones extendidas, como Rebol/Command 2.7.8 o Rebol/SDK 2.7.8, requieren una licencia de pago; estas añaden funciones como acceso a datos ODBC y la opción de crear archivos ejecutables independientes.
Legado
- Rebol fue mencionado por Douglas Crockford como una de las inspiraciones de la notación de objetos JavaScript . [ 5 ]
- Rebol inspiró el proyecto de código abierto Orca, que es un lenguaje interpretado similar a Rebol. [ 14 ]
- Boron es un lenguaje homoicónico interpretado, inspirado en Rebol y similar a este, diseñado para la integración de lenguajes específicos de dominio. Está implementado como una biblioteca C bajo la licencia LGPLv3.
- El lenguaje de programación Red se inspiró directamente en Rebol, pero las decisiones de implementación de Red se orientaron específicamente a superar sus limitaciones percibidas. [ 15 ]
Véase también
Referencias
- 1 2 Tecnologías REBOL. La licencia de REBOL/View y REBOL/Core 2.7.8
- ↑ Código fuente de R3 en GitHub
- ↑ "Blog de Carl sobre REBOL: Cambiemos al sufijo .reb" . Rebol.com. 18 de agosto de 2013. Consultado el 23 de enero de 2014 .
- 1 2 3 4 5 6 7 Goldman, E., Blanton, J. (2000). REBOL: La guía oficial. McGraw-Hill Osborne Media. ISBN 0-07-212279-X.
- ^ Crockford , Douglas . The JSON Saga , jsonsaga.ppt Archivado el 4 de octubre de 2012 en Wayback Machine .
- 1 2 3 4 5 6 7 8 9 10 11 12 Roberts , Ralph (2000). REBOL para Dummies. Hungry Minds. ISBN 0-7645-0745-1.
- ^ Auverlot , Olivier (2001). Programación Rebol. Eyrolles. ISBN 2-212-11017-0.
- 1 2 Sassenrath, Carl (1 de julio de 2000). "Dentro del lenguaje de scripting REBOL" . Dr. Dobb's Journal .
- ↑ "REBOL se convertirá en software de 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: ¡Se ha publicado el código fuente de R3!" . Archivado del original el 19 de agosto de 2014. Recuperado el 14 de agosto de 2014. Probablemente
pensaste que la publicación del código fuente nunca ocurriría, ¿verdad? Pues bien, ya está disponible en GitHub en github.com/rebol/rebol.
- ↑ "¿Llamando a REBOL Rebol?" . 14 de diciembre de 2012. Archivado del original el 3 de diciembre de 2013. Recuperado el 2 de diciembre de 2013 .
- ↑ Sassenrath, Carl. "Compilación cruzada de Rebol para tu placa integrada favorita" . Consultado el 16 de septiembre de 2016 .
- ↑ "Código fuente del intérprete de Rebol" . rebol/rebol GitHub . Consultado el 14 de marzo de 2017 .
- ↑ El proyecto rebol-orca en Freecode
- ↑ El proyecto Red en GitHub
Lecturas adicionales
- Mikes, Nora (20 de noviembre de 1999). «Una incursión de REBOL: No es un lenguaje de scripting, ni un lenguaje de programación, ni tampoco una nueva Amiga. ¿O sí?» . LinuxWorld . Archivado del 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" . Reseña web . Archivado del original el 12 de octubre de 1999.
Enlaces externos
- Un tutorial de REBOL
- Tutorial de Rebol 3
- Fuentes de Rebol 3 (bifurcación de Oldes)
- Lenguajes de programación
- Software AmigaOS 4
- Lenguajes de programación dinámicos
- Lenguajes de programación de tipado dinámico
- Lenguajes funcionales
- Lenguajes de programación basados en prototipos
- Lenguajes de scripting
- Lenguajes de programación con sintaxis extensible
- Software anteriormente propietario
- Lenguajes de programación creados en 1997
- Lenguajes de programación de alto nivel
- lenguajes de programación homoicónicos