Euphoria es un lenguaje de programación creado por Robert Craig de Rapid Deployment Software [ 1 ] en Toronto , Ontario , Canadá. Inicialmente desarrollado (aunque no lanzado públicamente) en el Atari ST , [ 2 ] el primer lanzamiento comercial [ 3 ] fue para MS-DOS como software propietario . En 2006, con el lanzamiento de la versión 3, [ 4 ] Euphoria se convirtió en software de código abierto . El Grupo openEuphoria continúa administrando y desarrollando el proyecto. [ 5 ] En diciembre de 2010, el Grupo openEuphoria lanzó la versión 4 [ 6 ] de openEuphoria junto con una nueva identidad y mascota para el proyecto. OpenEuphoria está actualmente disponible para Windows , Linux , macOS y tres variantes de *BSD .
Euphoria es un lenguaje interpretado imperativo-procedimental de alto nivel y propósito general . Un traductor genera código fuente en C y admite los compiladores GCC (GNU Compiler Collection ) y Open Watcom . Alternativamente, los programas de Euphoria pueden vincularse [ 7 ] con el intérprete para crear ejecutables independientes . Admite varias bibliotecas de interfaz gráfica de usuario (GUI), incluyendo Win32lib [ 8 ] y adaptadores para wxWidgets [ 9 ] , GTK+ [ 10 ] e IUP [ 11 ] . Euphoria tiene una base de datos integrada simple [ 12 ] y adaptadores para diversas bases de datos [ 13 ] .
Descripción general
El lenguaje Euphoria es un lenguaje de programación procedimental de propósito general que se centra en la simplicidad, la legibilidad, el desarrollo rápido y el rendimiento a través de diversos medios.
- Sencillez : utiliza solo cuatro tipos de datos integrados (ver más abajo) e implementa la recolección automática de basura .
- Legibilidad : La sintaxis prioriza las palabras clave sencillas en inglés sobre el uso de la puntuación para delimitar las estructuras.
- Desarrollo rápido : un intérprete fomenta la creación de prototipos y el desarrollo incremental.
- Rendimiento : Un recolector de basura eficiente basado en el conteo de referencias maneja correctamente las referencias cíclicas.
Historia
Desarrollado como un proyecto personal para inventar un lenguaje de programación desde cero, Euphoria fue creado por Robert Craig [ 1 ] en un Atari Mega-ST . [ 2 ] Muchas ideas de diseño para el lenguaje surgieron de la tesis de maestría de Craig en ciencias de la computación en la Universidad de Toronto . [ 14 ] La tesis de Craig estuvo fuertemente influenciada por el trabajo de John Backus sobre lenguajes de programación funcional (FP). [ 14 ]
Craig adaptó su implementación original de Atari a MS-DOS y Euphoria se lanzó por primera vez, versión 1.0, en julio de 1993 [ 3 ] bajo una licencia propietaria . Craig describe la implementación original de Atari como "primitiva" [ 15 ] y no se ha publicado públicamente. Craig continuó desarrollando y publicando Euphoria a través de su empresa Rapid Deployment Software (RDS) y su sitio web rapideuphoria.com. [ 1 ] En octubre de 2006, RDS lanzó la versión 3 [ 4 ] de Euphoria y anunció que, a partir de entonces, Euphoria se distribuiría gratuitamente bajo una licencia de software de código abierto .
RDS continuó desarrollando Euphoria, culminando con el lanzamiento de la versión 3.1.1 en agosto de 2007. [ 14 ] [ 16 ] Posteriormente, RDS cesó el desarrollo unilateral de Euphoria y el Grupo openEuphoria [ 5 ] se hizo cargo del desarrollo en curso. El Grupo openEuphoria lanzó la versión 4 en diciembre de 2010 [ 17 ] junto con un nuevo logotipo y mascota para el proyecto openEuphoria.
La versión 3.1.1 es la última versión de Euphoria que admite MS-DOS. [ 18 ]
Euphoria es un acrónimo de End-User Programming with Hierarchical Objects for Robust Interpreted Applications, aunque existe cierta sospecha de que se trate de un acrónimo inverso .
El intérprete de Euphoria se escribió originalmente en C. Con el lanzamiento de la versión 2.5 [ 14 ] en noviembre de 2004, el intérprete de Euphoria se dividió en dos partes: un analizador sintáctico frontal y un intérprete posterior. El analizador frontal ahora está escrito en Euphoria (y se utiliza con el traductor de Euphoria a C y el Binder). El intérprete posterior principal y la biblioteca de tiempo de ejecución están escritos en C.
Características
Euphoria fue concebida y desarrollada con los siguientes objetivos y características de diseño:
- Facilidad de aprendizaje y estructuras de alto nivel consistentes (más que, por ejemplo, el lenguaje BASIC ).
- Implementación de memoria plana de 32 bits para evitar la gestión compleja de la memoria y los límites de direccionamiento de tamaño.
- Soporte para depuración y manejo de errores en tiempo de ejecución.
- Comprobación de subíndices y tipos
- Tipado variable flexible y estricto
- Programación mediante objetos como tipos (definidos por el usuario o de otro tipo)
- Interpretado, con gestión automática de memoria y recolección de basura.
- Tipos de colecciones heterogéneas (secuencias)
- Biblioteca gráfica de MS-DOS (versiones de idioma hasta la 3.1.1)
- Depurador
- Sistema de base de datos integrado
- Manejo de memoria de bajo nivel
- Encapsulación sencilla de (o acceso a) bibliotecas C
Modos de ejecución
- Intérprete
- Traductor de C (E2C) para ejecutables independientes o enlaces dinámicos.
- Compilador e intérprete de código de bytes (shrouder [ 7 ] )
- El Binder [ 7 ] enlaza el código fuente de Euphoria con el intérprete para crear un ejecutable.
- Una versión con bucle de lectura-evaluación-impresión (REPL) está en la hoja de ruta de openEuphoria . [ 19 ]
Usar
Euphoria está diseñado para manejar conjuntos de datos dinámicos de diversos tipos. Es particularmente útil para el procesamiento de cadenas de texto e imágenes. Euphoria se ha utilizado en experimentos de inteligencia artificial , en el estudio de las matemáticas , en la enseñanza de la programación y para implementar fuentes tipográficas con 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:
- Átomo
- Un número, implementado como un entero con signo de 31 bits o un número de coma flotante IEEE de 64 bits . Euphoria cambia dinámicamente entre la representación de entero y de coma flotante según el valor actual.
- Secuencia
- Un vector (arreglo) con cero o más elementos. Cada elemento puede ser un átomo u otra secuencia . El número de elementos en una secuencia no es fijo (es decir, no es necesario declarar el tamaño del vector/arreglo). El programa puede agregar o eliminar elementos según sea necesario durante la ejecución. La asignación y liberación de memoria se maneja automáticamente mediante el conteo de referencias. Los elementos individuales se referencian usando un valor de índice entre corchetes. El primer elemento en una secuencia tiene un índice de uno [1]. Los elementos dentro de secuencias anidadas se referencian mediante valores de índice adicionales entre corchetes, por lo que 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 tipo de objeto (ver más abajo).
Euphoria tiene dos tipos de datos adicionales predefinidos:
- Entero
- Un átomo , restringido a valores enteros con signo de 31 bits en el rango−1 073 741 824 a1 073 741 823 ( aLos tipos de datos enteros son más eficientes que losde datos atómicos , pero no pueden contener el mismo rango de valores. Los caracteres se almacenan como enteros; por ejemplo, codificar ASCII - 'A' es exactamente lo mismo que codificar 65.
- Objeto
- Un tipo de dato genérico que puede contener cualquiera de los anteriores (es decir, átomo , secuencia o entero ) y que puede cambiarse a otro tipo durante el tiempo de ejecución.
No existe un tipo de dato de cadena de caracteres . Las cadenas se representan mediante una secuencia de valores enteros . Sin embargo, debido a que las cadenas literales se utilizan con tanta frecuencia en la programación, Euphoria interpreta los caracteres encerrados entre comillas dobles como una secuencia de enteros. Por lo tanto,
"ABECEDARIO"
se ve como si el programador hubiera escrito:
{'A', 'B', 'C'}lo cual es lo mismo que:
{65, 66, 67}¡Hola Mundo!
puts ( 1 , "Hola, Mundo!\n" )Ejemplos
Los comentarios del programa comienzan con un doble guion --y continúan 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 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 global delete_item( objeto old, secuencia group ) entero pos -- Comienza el código -- pos = find ( old, group ) si pos > 0 entonces grupo = grupo[1 .. pos-1] & grupo[pos+1 .. $] fin sifunción final del grupo de retorno
La siguiente modificación al ejemplo anterior reemplaza un elemento antiguo por uno nuevo. Dado que las variables ` old` y `new` se han definido como objetos, podrían ser átomos o secuencias . No es necesario realizar comprobaciones de tipo, ya que la función funcionará con cualquier secuencia de datos de cualquier tipo y no requiere bibliotecas externas.
función global replace_item( objeto antiguo, objeto nuevo, secuencia grupo ) entero pos -- Comienza el código -- pos = encontrar ( antiguo, grupo ) si pos > 0 entonces grupo[pos] = nuevo fin sifunción final del grupo de retorno
Además, no se utilizan punteros y los subíndices se comprueban automáticamente. Por lo tanto, la función no puede acceder a memoria fuera de los límites. No es necesario asignar ni liberar memoria explícitamente, y no hay riesgo de fugas de memoria.
La línea
grupo = grupo[1 .. pos-1] & grupo[pos+1 .. $]
Muestra algunas de las funcionalidades para el manejo de secuencias . Una secuencia puede contener un conjunto de cualquier tipo, y este puede segmentarse (para extraer un subconjunto de los datos de la secuencia ) y concatenarse en expresiones sin necesidad de funciones especiales.
Paso de parámetros
Los argumentos de las rutinas siempre se pasan por valor; no existe la opción de pasar por referencia. Sin embargo, se permite modificar los parámetros localmente (es decir, dentro de la función llamada), lo cual se implementa de manera muy eficiente, ya que las secuencias tienen una semántica de copia en escritura automática . En otras palabras, cuando se pasa una secuencia a una rutina, inicialmente solo se pasa una referencia a ella, pero cuando la rutina modifica este parámetro de secuencia, la secuencia se copia y la rutina actualiza únicamente una copia de la original.
Idiomas comparables
Referencias
- 1 2 3 "Página principal de RapidEuphoria" . Archivado del original el 11 de julio de 2012. Consultado el 30 de diciembre de 2010 .
- 1 2 "Foro RapidEuphoria, 10-09-2002 por Robert Craig" . Archivado del original el 16-07-2011 . Recuperado el 30-12-2010 .
- 1 2 "Foro RapidEuphoria, 18-10-2006 16:44 por Robert Craig" . Archivado del original el 16-07-2011 . Recuperado el 30-12-2010 .
- 1 2 "Foro RapidEuphoria, 18-10-2006 1:19 por Robert Craig" . Archivado del original el 16-07-2011 . Recuperado el 30-12-2010 .
- 1 2 "Página principal del grupo openEuphoria" . Consultado el 30 de diciembre de 2010 .
- ↑ "Página de descarga de openEuphoria" . Consultado el 30 de diciembre de 2010 .
- 1 2 3 "manual openEuhporia, Atadura y Sudario" . Recuperado el 07-01-2011 .
- ↑ "Proyecto Euphoria Win32Lib en Sourceforge" . Consultado el 30 de diciembre de 2010 .
- ↑ "Proyecto Euphoria wxEuphoria en Sourceforge" . Consultado el 30 de diciembre de 2010 .
- ↑ "Proyecto Euphoria GTK+ en Sourceforge" . Consultado el 30 de diciembre de 2010 .
- ↑ "Proyecto Euphoria IUP de Jeremy Cowgar" . Consultado el 30 de diciembre de 2010 .
- ↑ "manual de openEuphoria, base de datos" . Consultado el 30 de diciembre de 2010 .
- ↑ "wiki de openEuphoria, Interfaces de base de datos" . Consultado el 2 de enero de 2011 .
- 1 2 3 4 "Sitio web de RapidEuphoria, notas de la versión" . Consultado el 30 de diciembre de 2010 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Foro RapidEuphoria, 2 de marzo de 1998, 13:04, por Robert Craig" . Archivado del original el 16 de julio de 2011. Consultado el 30 de diciembre de 2010 .
- ↑ "Noticias de RapidEuphoria" . Archivado del original el 16 de diciembre de 2010. Consultado el 30 de diciembre de 2010 .
- ↑ "notas de la versión de openEuphoria" . Archivado del original el 27/07/2011 . Consultado el 30/12/2010 .
- ↑ "Manual de openEuhporia, Problemas específicos de la plataforma" . Consultado el 30 de diciembre de 2010 .
- ↑ "hoja de ruta de openEuphoria" . Consultado el 30 de diciembre de 2010 .
Enlaces externos
Descargas gratuitas de Euphoria para diversas plataformas, paquetes, IDE de Windows, bibliotecas API de Windows, un envoltorio GTK3 multiplataforma para Linux y Windows, bibliotecas gráficas (DOS, OpenGL, etc.).
- Sitio web oficial OpenEuphoria
- Sitio web oficial de RapidEuphoria
- Wiki de openEuphoria
- Foro de OpenEuphoria
- OpenEuphoria · Repositorios de desarrollo de GitHub.
- Usando Euphoria
- Lenguajes de programación procedimental
- Software multiplataforma
- Lenguajes de programación creados en 1993
- Software educativo gratuito
- Software que utiliza la licencia BSD.
- Familia de lenguajes de programación BASIC
- Software anteriormente propietario
- Software de la Universidad de Toronto