stringtranslate.com

Rebol

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ámico multiparadigma diseñado por Carl Sassenrath para comunicaciones en red y computación distribuida . Introduce el concepto de dialectización : lenguajes pequeños, optimizados y específicos del 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 ejecutar 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 está construido sobre 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 una discusión con Lawrence Rosen , [9] el intérprete de Rebol versión 3 fue lanzado bajo la licencia Apache 2.0 el 12 de diciembre de 2012. [10] Las versiones anteriores solo están disponibles en forma binaria y no se planea ningún lanzamiento de código 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 Relative Expression Based Object Language escrito en mayúsculas. [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 puso 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 lenguaje como Rebol . [12]

Historia

Rebol, lanzado por primera vez en 1997, fue diseñado durante un período de 20 años por Carl Sassenrath, el 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 .

  1. REBOL Technologies fue fundada en 1998.
  2. REBOL 2 , el intérprete que se convirtió en el núcleo de las ediciones extendidas del intérprete, se lanzó por primera vez en 1999.
    1. REBOL/Command , que agregó encriptación fuerte y acceso ODBC , fue lanzado en septiembre de 2000.
    2. REBOL/View se lanzó en abril de 2001, añadiendo capacidades gráficas al lenguaje principal.
    3. REBOL/IOS , un entorno de colaboración extensible creado con REBOL, se lanzó en agosto de 2001.
    4. REBOL/SDK , que ofrece una variedad de núcleos para vincular, así como un preprocesador, se lanzó en diciembre de 2002.
  3. Rebol 3 [R3], la versión más reciente del intérprete , tuvo versiones alfa lanzadas por REBOL Technologies desde enero de 2008. Desde su lanzamiento como un 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 simples de maneras simples". [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:

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 Rebol , llamados dialectos , son microlenguajes optimizados para un propósito específico. Los dialectos se pueden utilizar 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 Rebol existente y dándole un significado específico en ese dialecto. [6] Los dialectos son interpretados por funciones que procesan bloques Rebol (o analizan cadenas) de una manera específica.

Un ejemplo de las capacidades de dialectizació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 , returnes una variable global que hace referencia a una función nativa que devuelve un valor de resultado de 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 hasta el comienzo 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.

Sintaxis

La sintaxis de Rebol es libre y no requiere una posición específica. Sin embargo, a menudo se utiliza sangría para transmitir mejor la estructura del texto a los lectores humanos.

Las propiedades sintácticas de los distintos 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 utiliza directamente para representar datos y metadatos, completar estructuras de datos, enviar datos a través de Internet y guardarlos en un almacenamiento de datos.

A diferencia de los lenguajes de programación como C , el dialecto de intercambio de datos no consta de declaraciones , enunciados , expresiones o 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 corchetes ), cadenas (delimitadas por comillas dobles o llaves, adecuadas para cadenas de varias líneas; 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 s-expresiones 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]

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 dos puntos ), palabras de obtención (palabras con el prefijo dos puntos), palabras lit (palabras con el prefijo apóstrofo ), números, dinero, caracteres , etc., separados por espacios en blanco . Se permiten caracteres especiales en las palabras, por lo que a+buna palabra es diferente a 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 se pueden escribir utilizando tipos de datos "ordinarios", como cadenas de varias líneas. [4]

Semántica

Los bloques que contienen lenguaje específico del dominio se pueden enviar como argumentos a funciones evaluadoras específicas . [6]

hacer

El evaluador más utilizado es la dofunción. Se utiliza de forma predeterminada para interpretar el texto que se ingresa 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 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. El resultado, es decir, la evaluación de una palabra, se devuelve cuando la función encuentra una palabra. La forma de conjunto 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 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 dialectización, cuando un bloque se pasa a una función de interpretación específica. [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 copyfunción. [4]

La dofunción normalmente sigue un estilo de evaluación de prefijo , donde una función procesa los argumentos que la siguen. Sin embargo, también existe la evaluación infija mediante operadores infijos. La evaluación infija tiene prioridad sobre la evaluación de prefijo. Por ejemplo,

abdominales -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 daría como resultado 14. Todos los operadores tienen versiones de prefijo. DoPor lo general, evalúa los argumentos antes de pasarlos a una función. Por lo tanto, la siguiente expresión:

Primero lee la página de Wikipedia Rebol y luego pasa el resultado a la printfunción. Se pueden usar paréntesis para cambiar el orden de evaluación. Al usar la notación de prefijo , se puede evitar el uso de paréntesis en expresiones. [4]

Las reglas de precedencia simples son una ventaja:

así como una desventaja:

analizar gramaticalmente

La parsefunción se utiliza preferentemente para especificar, validar, transformar e interpretar dialectos. Lo hace mediante la comparación de expresiones de análisis en tiempo de ejecución. [6]

Las expresiones de análisis se escriben en el dialecto de análisis que, al igual que el dialecto do , es un sublenguaje orientado a expresiones del dialecto de intercambio de datos . A diferencia del dialecto do , el dialecto de análisis utiliza palabras clave que representan operadores y los operadores de análisis infijos más importantes 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 deben realizar 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 cadenasparse se debe manejar el análisis de "nivel bajo", teniendo en cuenta caracteres y delimitadores. El análisis de bloques es de nivel superior y maneja el escaneo a nivel de valores 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 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:

Dígito:  charset [ #"0"  -  #"9" ] Valor: [ algún  Dígito  |  "("  Expr  ")" ] Producto: [ Valor  cualquiera [[ "*" |  "/" ] Valor ]] Suma: [ Producto  cualquiera [[ "+" |  "-" ] Producto ]] Expr:  Suma 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 ). Tanto la edición /Core como la /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 de 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 ofrece acceso a gráficos y sonido independientes de la plataforma y viene con su propio conjunto de herramientas de ventanas y un conjunto extensible de estilos ( widgets de GUI ). Las ediciones extendidas, como Rebol/Command 2.7.8 o Rebol/SDK 2.7.8 requieren una licencia paga; agregan funciones como acceso a datos ODBC y la opción de crear archivos ejecutables independientes. [ cita requerida ]

Legado

Véase también

Referencias

  1. ^ de REBOL Technologies. Licencia REBOL/View y REBOL/Core 2.7.8
  2. ^ Fuente de R3 en GitHub
  3. ^ "Blog REBOL de Carl: cambiemos al sufijo .reb". Rebol.com. 18 de agosto de 2013. Consultado el 23 de enero de 2014 .
  4. ^ abcdefg Goldman, E., Blanton, J. (2000). REBOL: La guía oficial. McGraw-Hill Osborne Media. ISBN 0-07-212279-X
  5. ^ abc Crockford, Douglas . The JSON Saga , jsonsaga.ppt Archivado el 4 de octubre de 2012 en Wayback Machine.
  6. ^ abcdefghijkl Roberts, Ralph (2000). REBOL para tontos. Mentes hambrientas. ISBN 0-7645-0745-1
  7. ^ ab Auverlot, Olivier (2001). Programación Rebol. Eyrolles. ISBN 2-212-11017-0
  8. ^ ab Sassenrath, Carl (1 de julio de 2000). "Dentro del lenguaje de programación REBOL". Diario del Dr. Dobb .
  9. ^ "REBOL se convertirá en código abierto". Rebol.com. 25 de septiembre de 2012. Consultado el 23 de enero de 2014 .
  10. ^ Sassenrath, Carl (12 de diciembre de 2012). "Comentarios sobre: ​​¡Se publicó el código fuente de R3!" . Consultado el 14 de agosto de 2014. ¿Probablemente pensaste que el lanzamiento del código fuente nunca sucedería? ¿Estoy en lo cierto? Bueno, ahora está en github en github.com/rebol/rebol.
  11. ^ "¿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 .
  12. ^ Sassenrath, Carl. "Compilación cruzada de Rebol para su placa integrada favorita" . Consultado el 16 de septiembre de 2016 .
  13. ^ "Código fuente del intérprete de Rebol". rebol/rebol GitHub . Consultado el 14 de marzo de 2017 .
  14. ^ El proyecto rebol-orca en Freecode
  15. ^ El proyecto Red en GitHub

Lectura adicional

Enlaces externos