Euforia (lenguaje de programación)

Ajustar Compartir Imprimir Citar

Euphoria es un lenguaje de programación creado por Robert Craig de Rapid Deployment Software en Toronto, Ontario, Canadá. Inicialmente desarrollado (aunque no lanzado públicamente) en Atari ST, el primer lanzamiento comercial fue para MS-DOS como software propietario. En 2006, con el lanzamiento de la versión 3, Euphoria se convirtió en software de código abierto. El grupo openEuphoria continúa administrando y desarrollando el proyecto. En diciembre de 2010, openEuphoria Group lanzó la versión 4 de openEuphoria junto con una nueva identidad y mascota para el proyecto. OpenEuphoria está actualmente disponible para Windows, Linux, macOS y tres versiones de *BSD.

Euphoria es un lenguaje interpretado de procedimiento imperativo de alto nivel de propósito general. Un traductor genera código fuente C y se admiten la colección de compiladores GNU (GCC) y los compiladores Open Watcom. Alternativamente, los programas de Euphoria pueden vincularse con el intérprete para crear ejecutables independientes. Se admiten varias bibliotecas de interfaz gráfica de usuario (GUI), incluidas Win32lib y contenedores para wxWidgets, GTK+ e IUP. Euphoria tiene una base de datos incorporada simple y envoltorios para una variedad de otras bases de datos.

Resumen

El lenguaje Euphoria es un lenguaje procedimental de propósito general que se centra en la simplicidad, la legibilidad, el desarrollo rápido y el rendimiento a través de varios medios.

Historia

Desarrollado como un proyecto personal para inventar un lenguaje de programación desde cero, Euphoria fue creado por Robert Craig en un Atari Mega-ST. Muchas ideas de diseño para el lenguaje provinieron de la tesis de maestría de Craig en ciencias de la computación en la Universidad de Toronto. La tesis de Craig estuvo fuertemente influenciada por el trabajo de John Backus sobre lenguajes de programación funcional (FP).

Craig portó su implementación Atari original a la plataforma DOS de 16 bits y Euphoria se lanzó por primera vez, versión 1.0, en julio de 1993 bajo una licencia propietaria. Craig describe la implementación original de Atari como "primitiva" y no ha sido divulgado públicamente. Euphoria continuó siendo desarrollado y lanzado por Craig a través de su empresa Rapid Deployment Software (RDS) y el sitio web rapideuphoria.com. En octubre de 2006, RDS lanzó la versión 3 de Euphoria y anunció que, en adelante, Euphoria se distribuiría libremente bajo una licencia de software de código abierto.

RDS continuó desarrollando Euphoria, que culminó con el lanzamiento de la versión 3.1.1 en agosto de 2007. Posteriormente, RDS cesó el desarrollo unilateral de Euphoria y openEuphoria Group se hizo cargo del desarrollo en curso. El grupo openEuphoria lanzó la versión 4 en diciembre de 2010 junto con un nuevo logotipo y mascota para el proyecto openEuphoria.

La versión 3.1.1 sigue siendo un hito importante, ya que es la última versión de Euphoria compatible con la plataforma DOS.

Euphoria es un acrónimo de Programación de usuario final con objetos jerárquicos para aplicaciones interpretadas robustas aunque existe cierta sospecha de que se trata de un acrónimo.

El intérprete de Euphoria se escribió originalmente en C. Con el lanzamiento de la versión 2.5 en noviembre de 2004, el intérprete de Euphoria se dividió en dos partes: un analizador de front-end y un intérprete de back-end. El front-end ahora está escrito en Euphoria (y se usa con el traductor Euphoria-to-C y el Binder). El back-end principal y la biblioteca de tiempo de ejecución están escritos en C.

Características

Euphoria se concibió y desarrolló con los siguientes objetivos y características de diseño:

Modos de ejecución

Usar

Euphoria está diseñado para facilitar el manejo de conjuntos dinámicos de datos de diferentes tipos y es especialmente útil para el procesamiento de cadenas e imágenes. Euphoria se ha utilizado en experimentos de inteligencia artificial, el estudio de las matemáticas, para enseñar programación y para implementar fuentes que involucran miles de caracteres. Gran parte del intérprete de Euphoria está escrito en Euphoria.

Tipos de datos

Euphoria tiene dos tipos de datos básicos:

Atom – Un número, implementado como un entero firmado de 31 bits o un punto flotante IEEE de 64 bits. Euphoria cambia dinámicamente entre la representación de puntos enteros y flotantes según el valor actual.
Secuencia – Un vector (array) con cero o más elementos. Cada elemento puede ser átomo u otro secuencia. El número de elementos en una secuencia no se fija (es decir, el tamaño del vector/array no tiene que ser declarado). El programa puede agregar o eliminar elementos según sea necesario durante el tiempo de ejecución. La asignación de memoria-desalojamiento se maneja automáticamente mediante el recuento de referencia. Los elementos individuales se mencionan utilizando un valor índice encerrado entre corchetes. El primer elemento en una secuencia tiene un índice de uno [1]. Los elementos dentro de las secuencias incrustadas son referenciados por valores de índices extraídos, por lo tanto X[3][2] se refiere al segundo elemento contenido en la secuencia que es el tercer elemento de X. Cada elemento de una secuencia es un objeto tipo (ver abajo).

Euphoria tiene dos tipos de datos adicionales predefinidos:

Integer – An átomo, restringida a los valores de entero firmados de 31 bits en el rango −1073741824 a 1073741823 ()− − 230{displaystyle -2^{30} a 230− − 1{displaystyle 2}{30}-1}). Integer los tipos de datos son más eficientes que los átomo tipos de datos, pero no pueden contener la misma gama de valores. Los caracteres se almacenan como enteros, por ejemplo, la codificación ASCII-'A' es exactamente igual que la codificación 65.
Objeto – Un tipo de datos genérico que puede contener cualquiera de los anteriores (es decir, átomo, secuencia o entero) y que puede ser cambiado a otro tipo durante el tiempo de ejecución.

No hay ningún tipo de datos de cadena de caracteres. Las cadenas se representan mediante una secuencia de valores enteros. Sin embargo, debido a que las cadenas literales se usan con tanta frecuencia en la programación, Euphoria interpreta los caracteres entre comillas dobles como una secuencia de números enteros. Por lo tanto

"ABC"

se ve como si el codificador hubiera escrito:

'A', 'B', 'C'

que es lo mismo que:

{65, 66, 67}

¡Hola, mundo!

puts(1, "Hola, Mundo!n")

Ejemplos

Los comentarios del programa comienzan con un guión doble -- y van hasta el final de la línea.

El siguiente código busca un elemento antiguo en un grupo de elementos. Si lo encuentra, lo elimina concatenando todos los elementos anteriores con todos los elementos posteriores. Tenga en cuenta que el primer elemento de una secuencia tiene el índice uno [1] y que $ se refiere a la longitud (es decir, el número total de elementos) de la secuencia.

función mundial delete_itemobjeto viejo, secuencia grupo)
 entero pos
 -- El código comienza --pos = encontrar(old, group)
 si pos œ 0 entoncesgrupo = grupo[1.. pos-1] " grupo[pos+1.. $]
 terminar si
retorno grupo
función final

La siguiente modificación del ejemplo anterior reemplaza un elemento antiguo por uno nuevo. Como las variables antiguo y nuevo se han definido como objetos, podrían ser átomos o secuencias. No se necesita verificación de tipo ya que la función funcionará con cualquier secuencia de datos de cualquier tipo y no necesita bibliotecas externas.

función mundial replace_item(objeto viejo, objeto nuevo, secuencia grupo)
 entero pos
 -- El código comienza --pos = encontrar(old, group)
 si pos œ 0 entoncesgrupo[pos] = nuevo
 terminar si
retorno grupo
función final

Además, no hay punteros involucrados y los subíndices se verifican automáticamente. Por lo tanto, la función no puede acceder a la memoria fuera de los límites. No hay necesidad de asignar o desasignar memoria explícitamente y no hay posibilidad de pérdida de memoria.

La línea

grupo = grupo[1.. pos-1] " grupo[pos+1.. $]

muestra algunas de las instalaciones de manejo de secuencia. Una secuencia puede contener un conjunto de cualquier tipo, y esto se puede dividir (para tomar un subconjunto de los datos en una secuencia) y concatenar en expresiones sin necesidad de especial. funciones

Paso de parámetros

Los argumentos de las rutinas siempre se pasan por valor; no hay facilidad de paso por referencia. Sin embargo, se permite que los parámetros se modifiquen localmente (es decir, dentro del receptor de la llamada), lo que se implementa de manera muy eficiente ya que las secuencias tienen una semántica automática de copia en escritura. En otras palabras, cuando pasa una secuencia a una rutina, inicialmente solo se pasa una referencia a ella, pero en el momento en que la rutina modifica este parámetro de secuencia, la secuencia se copia y la rutina actualiza solo una copia del original.

Idiomas comparables