Rebol - Rebol

Rebol
Rebol logo.png
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 ; Hace 24 años  ( 1997 )
Lanzamiento estable
2.7.8 / enero de 2011 ; Hace 10 años  ( 2011-01 )
Versión de vista previa
2.101.0 / diciembre de 2012 ; Hace 8 años  ( 2012-12 )
Disciplina de mecanografía dinámico , fuerte
SO multiplataforma
Licencia 2.7.8 es software libremente redistribuible , 2.101.0 tiene licencia Apache 2.0
Extensiones de nombre de archivo .r, .reb
Sitio web www .rebol .com
Influenciado por
Yo , Adelante , Lisp , Logotipo
Influenciado
JSON , rojo

Rebol ( / r ɛ b əl / REB -əl ; históricamente REBOL ) es una multiplataforma 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 . Se introduce el concepto de dialecting : pequeñas, optimizados , lenguajes específicos de dominio de código y datos, que es también la propiedad notable la mayor parte del idioma según su diseñador Carl Sassenrath :

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

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 .

Originalmente, el lenguaje y su implementación oficial eran propietarios y de código cerrado, desarrollados por REBOL Technologies. Tras la conversación con Lawrence Rosen , el intérprete de la versión 3 de Rebol se lanzó bajo la licencia Apache 2.0 el 12 de diciembre de 2012. Las versiones anteriores solo están disponibles en formato binario y no se planea la publicación de las fuentes.

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 .

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. 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 puso la cuestión del nombre al debate comunitario en su blog. En la escritura posterior, Sassenrath adoptó la convención de escribir el nombre del idioma como Rebol .

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 utilizando conceptos de los lenguajes de programación Lisp , Forth , Logo y Self .

  1. REBOL Technologies se fundó en 1998.
  2. 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.
    1. REBOL / Command , que agregó cifrado sólido y acceso ODBC , se lanzó en septiembre de 2000.
    2. REBOL / View fue lanzado en abril de 2001, agregando habilidades gráficas en el lenguaje principal.
    3. REBOL / IOS , un entorno de colaboración extensible construido con REBOL fue lanzado en agosto de 2001.
    4. REBOL / SDK , que ofrece una selección de kernels contra los que unirse, así como un preprocesador, se lanzó en diciembre de 2002.
  3. 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.

Diseño

Facilidad de uso

Uno de los principios de diseño de Rebol es "hacer cosas sencillas de forma sencilla". 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:

view layout [text "Hello world!" button "Quit" [quit]]

Así es como se ve un ejemplo similar en R3-GUI:

view [text "Hello world!" button "Quit" on-action [quit]]

Ejemplo de Hola mundo de R3-GUI

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. Los dialectos son interpretados por 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. 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.

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 Objetivo
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 script 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 es 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 utiliza 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 .

Tanto los bloques como los parens pueden contener otros valores compuestos (un bloque puede contener subbloques, parens, strings, ...) o valores escalares como words, set-words (palabras con el sufijo de dos puntos ), get-words (palabras con el prefijo dos puntos), lit-words (palabras precedidas por el apóstrofe ), 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.

Semántica

Los bloques que contienen lenguaje específico del dominio se pueden enviar como argumentos a funciones de evaluador específicas .

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 de tipado dinámico , las variables no tienen un tipo asociado, el tipo está asociado con valores. El resultado, es decir, la evaluación de una palabra, se devuelve 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 . 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.

Un problema específico que vale la pena señalar es que los valores compuestos, asignados a variables, no se copian. Para hacer una copia, el valor debe pasarse a la copy función.

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 infijo mediante operadores de infijo . 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 da 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:

primero lee la página de Wikipedia Rebol y luego pasa el resultado a la print función. Se pueden usar 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.

Las reglas de precedencia simples son una ventaja:

  • No es necesario "consultar" tablas de precedencia al escribir expresiones
  • No es necesario reescribir las tablas de precedencia cuando se define un nuevo operador
  • Las expresiones se pueden transcribir fácilmente de notación infija a prefijo y viceversa

así como una desventaja:

  • Los usuarios acostumbrados a reglas de precedencia más convencionales pueden equivocarse fácilmente

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.

Las expresiones de 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 ).

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 se parse 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.

El dialecto de análisis sintáctico pertenece a la familia de gramáticas representadas por el lenguaje de análisis sintáctico descendente 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 sintáctico y las similitudes entre el dialecto de análisis sintáctico y el PEG se ilustran con esta transliteración de un ejemplo de PEG que analiza una expresión aritmética:

Digit: charset [#"0" - #"9"]
Value: [some Digit | "(" Expr ")"]
Product: [Value any [["*"| "/"] Value]]
Sum: [Product any [["+"| "-"] Product]]
Expr: Sum
parse/all "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 .

El entorno de ejecución se almacena en un solo archivo ejecutable. Rebol / Core 2.7.8, la edición de consola, tiene aproximadamente 300 KB y Rebol / View 2.7.8, la edición de interfaz gráfica de usuario , tiene un tamaño de aproximadamente 650 KB.

Rebol / View proporciona acceso a gráficos y sonido 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.

Legado

  • Rebol fue nombrado por Douglas Crockford como una de las inspiraciones de la notación de objetos JavaScript .
  • Rebol inspiró el proyecto Orca de código abierto, que es un lenguaje interpretado similar a Rebol.
  • 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, pero las opciones de implementación de Red se orientaron específicamente a superar sus limitaciones percibidas.

Ver también

Referencias

Otras lecturas

enlaces externos