Euphoria es un lenguaje de programación creado por Robert Craig de Rapid Deployment Software [1] en Toronto , Ontario , Canadá. Desarrollado inicialmente (aunque no publicado públicamente) en el Atari ST , [2] el primer lanzamiento comercial [3] fue para la plataforma DOS de 16 bits y era 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, openEuphoria Group lanzó la versión 4 [6]de openEuphoria junto con una nueva identidad y mascota para el proyecto. OpenEuphoria está disponible actualmente para Windows , Linux , macOS y tres versiones de * BSD .
Paradigma | Imperativo, procedimental |
---|---|
Diseñada por | Jeremy Cowgar, Robert Craig (original), Matt Lewis, Derek Parnell |
Desarrollador | grupo openEuphoria |
Apareció por primera vez | 1993 |
Lanzamiento estable | 4.0.5 / 19 de octubre de 2012 |
Disciplina de mecanografía | Dinámica estática |
SO | Multiplataforma : Win32 , Linux , macOS , FreeBSD , NetBSD , OpenBSD |
Licencia | BSD |
Extensiones de nombre de archivo | .e, .ex, .exw, .edb |
Sitio web | openeuphoria |
Influenciado por | |
BÁSICO | |
Influenciado | |
Phix |
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 Euphoria pueden vincularse [7] con el intérprete para crear ejecutables independientes . Se admiten varias bibliotecas de interfaz gráfica de usuario (GUI), incluidas Win32lib [8] y envoltorios para wxWidgets , [9] GTK + [10] e IUP . [11] Euphoria tiene una base de datos incorporada simple [12] y envoltorios para una variedad de otras bases de datos. [13]
Descripción general
El lenguaje Euphoria es un lenguaje procedimental de propósito general que se enfoca en la simplicidad, legibilidad, desarrollo rápido y desempeño a través de varios medios.
- Simplicidad : utiliza solo cuatro tipos de datos integrados (ver más abajo) e implementa la recolección automática de basura .
- Legibilidad : la sintaxis favorece las palabras clave simples en inglés sobre el uso de puntuación para delinear construcciones.
- Desarrollo rápido : un intérprete fomenta la creación de prototipos y el desarrollo incremental.
- Rendimiento : un recolector de basura eficiente con recuento 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 en ciencias de la computación de Craig 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 portó su implementación original de Atari a la plataforma DOS de 16 bits y Euphoria se lanzó por primera vez, la 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 ha sido publicada 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. [1] En octubre de 2006, RDS lanzó la versión 3 [4] de Euphoria y anunció que de ahora en adelante Euphoria se distribuiría libremente 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 openEuphoria Group [5] se hizo cargo del desarrollo continuo. El grupo openEuphoria lanzó la versión 4 en diciembre de 2010 [17] junto con un nuevo logo y mascota para el proyecto openEuphoria.
La versión 3.1.1 sigue siendo un hito importante, siendo la última versión de Euphoria que soporta la plataforma DOS . [18]
Euphoria es un acrónimo de Programación de usuario final con objetos jerárquicos para aplicaciones robustas interpretadas, aunque existe cierta sospecha de que se trata de un backronym . [ según quién? ]
El intérprete Euphoria fue originalmente escrito 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 de front-end y un intérprete de back-end. La interfaz ahora está escrita en Euphoria (y se usa con el traductor Euphoria-to-C y Binder). La biblioteca principal de back-end y tiempo de ejecución están escritas en C.
Características
Euphoria fue concebido y desarrollado con los siguientes objetivos y características de diseño:
- Fácil de aprender y con construcciones consistentes de alto nivel (más que, por ejemplo, el lenguaje BÁSICO )
- Implementación de memoria plana de 32 bits para evitar la administración de memoria compleja y los límites de direccionamiento de tamaño
- Soporte de depuración y manejo de errores en tiempo de ejecución
- Verificación de subíndices y tipos
- Escritura de variables estricta y suelta
- Programación a través de 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 colección heterogéneos (secuencias)
- Biblioteca de gráficos DOS (versiones en lenguaje Euphoria hasta la 3.1.1 inclusive)
- Depurador
- Sistema de base de datos integrado
- Manejo de memoria de bajo nivel
- Encapsulado sencillo de (o acceso a) bibliotecas C
Modos de ejecución
- Interprete
- Traductor de C (E2C) para ejecutables independientes o enlaces dinámicos
- Bytecode compilador e intérprete (shrouder [7] )
- El Binder [7] vincula el código fuente de Euphoria al intérprete para crear un ejecutable.
- Una versión de ciclo de lectura-evaluación-impresión (REPL) está en la hoja de ruta de openEuphoria . [19]
Usar
Euphoria está diseñado para facilitar el manejo de conjuntos dinámicos de datos de diversos tipos y es particularmente ú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 con miles de caracteres. [ cita requerida ] Una 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 punto flotante IEEE de 64 bits . Euphoria cambia dinámicamente entre la representación de números enteros y flotantes de acuerdo con el valor actual.
- Secuencia: un vector (matriz) 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 / matriz). El programa puede agregar o eliminar elementos según sea necesario durante el tiempo de ejecución. La asignación-desasignación de memoria se gestiona automáticamente mediante el recuento de referencias. Los elementos individuales se referencian mediante un valor de índice entre corchetes. El primer elemento de una secuencia tiene un índice de uno [1]. Los elementos dentro de secuencias incrustadas están referenciados por valores de índice entre corchetes adicionales, 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 de -1073741824 a 1073741823 (-2 ^ 30 a 2 ^ 30-1). Los tipos de datos enteros son más eficientes que los tipos de datos atom , pero no pueden contener el mismo rango de valores. Los caracteres se almacenan como números enteros, por ejemplo, codificar ASCII -'A 'es exactamente lo mismo que codificar 65.
- Objeto: un tipo de datos genérico que puede contener cualquiera de los anteriores (es decir, un átomo , una secuencia o un entero ) y que puede cambiarse a otro tipo durante el tiempo de ejecución.
No hay un tipo de datos de cadena de caracteres . Las cadenas están representadas por una secuencia de valores enteros . Sin embargo, debido a que las cadenas literales se usan con tanta frecuencia en programación, Euphoria interpreta los caracteres entre comillas dobles como una secuencia de números enteros. Por lo tanto
"A B C"
se ve como si el codificador hubiera escrito:
{'A B C'}
que es lo mismo que:
{65, 66, 67}
¡Hola Mundo!
put (1, "¡Hola, mundo! \ n")
Ejemplos de
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 global delete_item ( objeto antiguo, grupo de secuencia ) entero pos - El código comienza - pos = buscar (antiguo, grupo) si pos> 0 entonces grupo = grupo [1 .. pos-1] & grupo [pos + 1 .. $] terminara sifunción de fin de grupo de retorno
La siguiente modificación del ejemplo anterior reemplaza un artículo antiguo por un artículo nuevo. Como las variables antiguas y nuevas se han definido como objetos, podrían ser átomos o secuencias . La verificación de tipos no es necesaria ya que la función funcionará con cualquier secuencia de datos de cualquier tipo y no necesita bibliotecas externas.
función global replace_item ( objeto antiguo, objeto nuevo, grupo de secuencia ) entero pos - El código comienza - pos = buscar (antiguo, grupo) si pos> 0 entonces grupo [pos] = nuevo terminara sifunción de fin de grupo de retorno
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 es necesario 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 facilidades de manejo de secuencias . 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 funciones especiales.
Paso de parámetros
Los argumentos de las rutinas siempre se pasan por valor; no hay una función de paso por referencia. Sin embargo, los parámetros pueden modificarse localmente (es decir, dentro del destinatario de la llamada), lo que se implementa de manera muy eficiente ya que las secuencias tienen semántica de copia en escritura automática . 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
- Lua
- Phix
- Pitón
- REBOL
- Rubí
Referencias
- ^ a b c "Página de inicio de RapidEuphoria" . Archivado desde el original el 11 de julio de 2012 . Consultado el 30 de diciembre de 2010 .
- ^ a b "Foro RapidEuphoria, 2002-09-10 por Robert Craig" . Archivado desde el original el 16 de julio de 2011 . Consultado el 30 de diciembre de 2010 .
- ^ a b "Foro de RapidEuphoria, 2006-10-18 16:44 por Robert Craig" . Archivado desde el original el 16 de julio de 2011 . Consultado el 30 de diciembre de 2010 .
- ^ a b "Foro de RapidEuphoria, 2006-10-18 1:19 por Robert Craig" . Archivado desde el original el 16 de julio de 2011 . Consultado el 30 de diciembre de 2010 .
- ^ a b "página de inicio del grupo openEuphoria" . Consultado el 30 de diciembre de 2010 .
- ^ "página de descarga de openEuphoria" . Consultado el 30 de diciembre de 2010 .
- ^ a b c "manual openEuhporia, Encuadernación y envoltura" . Consultado el 7 de enero de 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 .
- ^ a b c d "Sitio web de RapidEuphoria, notas de la versión" . Archivado desde el original el 14 de julio de 2012 . Consultado el 30 de diciembre de 2010 .
- ^ "Foro de RapidEuphoria, 2 de marzo de 1998 13:04 por Robert Craig" . Archivado desde el original el 16 de julio de 2011 . Consultado el 30 de diciembre de 2010 .
- ^ "Noticias de RapidEuphoria" . Archivado desde el original el 16 de diciembre de 2010 . Consultado el 30 de diciembre de 2010 .
- ^ "Notas de la versión de openEuphoria" . Archivado desde el original el 27 de julio de 2011 . Consultado el 30 de diciembre de 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 las distintas plataformas, paquetes, Windows IDE, bibliotecas API de Windows, un contenedor GTK3 multiplataforma para Linux y Windows, bibliotecas gráficas (DOS, OpenGL, etc.).
- Sitio web oficial OpenEuphoria
- Sitio web oficial RapidEuphoria
- openEuphoria Wiki
- Foro openEuphoria
- OpenEuphoria · Repositorios de desarrollo GitHub .
- Usando Euphoria