Euforia (lenguaje de programación)

Euforia
Semántica imperativo
clase de idioma procesal
tipo de ejecución interpretación , interpretación de bytecode , traducción C
Apareció en 1993
Autor Robert Craig (creador) y Jeremy Kovgar, Matt Lewis, Derek Parnell (desarrolladores de la versión 4)
Desarrollador abrir Grupo Euphoria
extensión de archivo .e, .ex, .exw, .edb
Liberar 4.15.2 [1]  (15 de agosto de 2019 ) ( 2019-08-15 )
Versión de prueba 4.1 Beta 2
sistema de tipos estático , dinámico
Dialectos RDS Euforia, openEuphoria
sido influenciado BÁSICO , C
influenciado Fijar
Licencia abierto
Sitio web openeuphoria.org
sistema operativo multiplataforma
 Archivos multimedia en Wikimedia Commons

Euphoria ( [ju:ˈfɔ:riə] , yufori, también ruso euforia, alegría) es un lenguaje de programación creado por Robert Craig (Rapid Deployment Software) [2] en Toronto , Canadá . El nombre Euphoria es un acrónimo de "Programación de usuario final con objetos jerárquicos para aplicaciones interpretadas robustas".

El primer lanzamiento público [3] fue para máquinas de 32 bits (i386) con MS-DOS y fue propietario (1993). En 2006, con el lanzamiento de la versión 3 [4] , el proyecto Euphoria se volvió abierto y fue desarrollado por la comunidad OpenEuphoria [5] , que en diciembre de 2010 lanzó la cuarta versión [6] con un nuevo logotipo y mascota [7 ] . La versión 4.* del paquete OpenEuphoria está disponible actualmente para Microsoft Windows , Linux , Mac OS X y tres sistemas BSD ( FreeBSD , NetBSD , OpenBSD ).

Euphoria es un lenguaje imperativo interpretado de propósito general y alto nivel . El código fuente de Euphoria se puede usar para generar código fuente C usando un traductor , que a su vez se puede compilar en un archivo ejecutable o en una biblioteca dinámica usando compiladores como GCC , OpenWatcom , etc. El programa Euphoria también se puede "enlazar" [8 ] con un intérprete para producir un autoejecutable . Se admiten varias bibliotecas GUI , incluidas Win32lib [9] y contenedores para wxWidgets [10] , GTK+ [11] e IUP [12] . Euphoria tiene un sistema de base de datos simple integrado [13] y contenedores para trabajar con otros tipos de bases de datos [14] .

Resumen

Euphoria es un lenguaje de procedimientos de propósito general que se caracteriza por su simplicidad, legibilidad, implementación rápida y alto rendimiento.

Sencillez Legibilidad Despliegue rápido Actuación

Historia

El desarrollo del lenguaje Euphoria comenzó con los experimentos de Robert Craig [2] en la computadora personal Atari Mega-ST [15] . Muchas ideas de diseño de idiomas provinieron de la tesis de maestría de Craig en la Universidad de Toronto [16] . La disertación fue escrita bajo la influencia del trabajo de John Backus sobre lenguajes de programación funcionales [16] .

Luego, Craig transfirió la implementación original de Atari del lenguaje a la plataforma de 32 bits de 386 máquinas que ejecutan Microsoft MS-DOS y lanzó el primer paquete (versión 1.0) en julio de 1993 [3] bajo una licencia propietaria , fundando su propia empresa Rapid Deployment. Softawre (RDS) para el desarrollo y venta del intérprete Euphoria en la variante DOS32. Craig llama a la implementación original de Atari "primitiva" [17] y no la publicó. Hasta 2006, Craig continuó desarrollando y publicando Euphoria en su firma (rapideuphoria.com [2] ), compuesta por él y su esposa Janko Miura, lanzando más de una docena de versiones en dos series, 1.* y 2.*. En octubre de 2006, RDS lanzó la tercera [4] serie Euphoria y anunció que, en el futuro, Euphoria se distribuiría libremente bajo una licencia de código abierto. El resultado de trabajar con las series propietarias 1 y 2 es una comunidad de usuarios registrados en 67 países de todo el mundo, incluidos muchos programadores, cuyo número exacto solo se conoce en RDS, pero en el momento del lanzamiento de la versión 2.5 estaba bien Más de mil.

Bajo la supervisión directa de RDS, la comunidad ha seguido lanzando Euphoria, actualizando el paquete a la versión 3.1.1 (agosto de 2007) [16] [18] . Desde entonces, RDS se ha alejado gradualmente del liderazgo del desarrollo de Euphoria, y la comunidad OpenEuphoria [5] realiza más mejoras y cambios bajo el liderazgo colegiado. En diciembre de 2010 [19] la comunidad lanzó la versión 4.0, comenzando la Serie 4, ahora con un nuevo logotipo y mascota del proyecto [7] .

La versión 3.1.1 es un hito importante en la evolución del lenguaje, ya que es la última versión oficialmente compatible con la plataforma MS-DOS [20] . La versión 3.1.1 sigue siendo la última versión de la estricta dirección clásica, sin las "libertades" que aparecieron en la 4ta.

Una breve lista de innovaciones que han aparecido desde la versión 4.0.0 [21] :

y mucho más.

El intérprete de lenguaje Euphoria se escribió originalmente en su totalidad en C. Desde la versión 2.5 [16] , lanzada en noviembre de 2004, el intérprete se ha dividido en dos partes: un analizador escrito en Euphoria y un intérprete de bytecode escrito en C.

Rasgos distintivos

Euphoria fue concebido y desarrollado con los siguientes objetivos y características en mente:

Modos de ejecución

Uso

Euphoria pretende ser una solución llave en mano para facilitar el manejo de colecciones dinámicas de datos de varios tipos, y es particularmente útil para manejar cadenas e imágenes. Euphoria se utiliza para experimentar con inteligencia artificial , estudiar matemáticas , enseñar programación y crear fuentes que constan de miles de caracteres. Una parte bastante grande del intérprete de Euphoria está escrita en Euphoria.

Tipos de datos

Euphoria tiene cuatro tipos de datos integrados:

átomo (átomo) un número implementado como un entero con signo de 31 bits o un número de punto flotante IEEE de 64 bits . Euphoria cambia dinámicamente entre representar un número como un número entero o un número de punto flotante dependiendo de su valor actual. secuencia (número, secuencia) un conjunto formado por varios elementos. Cada elemento del conjunto puede ser un átomo o un número . El número de elementos de fila no es fijo (no requiere declaración obligatoria). El programa puede agregar o eliminar elementos según sea necesario en cualquier momento. La asignación/desasignación de memoria se gestiona automáticamente mediante el recuento de referencias. Se accede a los elementos individuales utilizando el valor de índice encerrado entre corchetes. El índice del primer elemento es [1]. Se accede a los elementos de la serie anidada utilizando índices adicionales entre corchetes, por lo que X[3][2] se refiere al segundo elemento de la serie anidada, que es el tercer elemento de la serie X. Cada elemento de la serie es de tipo objeto ( objeto) (ver más abajo). entero (entero) un átomo cuyos valores solo pueden ser números enteros de −1073741824 a 1073741823 (de −2 30 a 2 30 -1). El tipo entero suele ser más eficiente en las operaciones que el tipo átomo , pero no puede contener el mismo rango de valores. Los caracteres se almacenan como números, por ejemplo, ASCII 'A' es lo mismo que 65. objeto Objeto) un tipo de datos general que puede contener datos de cualquiera de los tipos enumerados ( átomo , secuencia o entero ) que cambian durante la ejecución del programa.

Euphoria no tiene un tipo de datos especial para cadenas de caracteres . Una cadena es una serie de enteros , pero las cadenas usan la notación habitual entre comillas dobles. Así, en el programa Euphoria

"ABC"

equivalente a:

{'A', 'B', 'C'}

y equivalentemente:

{65,66,67}

Además de los tipos integrados, un programa Euphoria puede funcionar con tipos de datos definidos por el programador que especifican un rango más estrecho de valores de variables dentro de los límites de los tipos integrados. Los tipos de datos definidos por el usuario se utilizan principalmente al depurar un programa; después de la depuración, la directiva puede deshabilitar la verificación de estos tipos without type_check, mientras que la verificación de los tipos integrados siempre permanece habilitada.

Ejemplos

hola mundo

puts (1,"Hello World!\n")

Trabajando con filas

El siguiente código busca el elemento x en un grupo de elementos. Si se encuentra dicho elemento, se elimina concatenando todos los elementos del grupo anterior con todos los elementos posteriores. Tenga en cuenta que el primer elemento de la serie tiene índice uno [1], y el signo de dólar $ como índice denota el número del último elemento de la serie.

función delete_item ( objeto x, grupo de secuencia ) entero pos pos = encontrar (x, grupo) si pos > 0 entonces grupo = grupo[1 .. pos-1] & grupo[pos+1 .. $] terminara sifunción de fin de grupo de retorno

línea de código

group = group[1 .. pos-1] & group[pos+1 .. $]

muestra una forma de trabajar con series [23] . Una fila puede contener un grupo de elementos de cualquier tipo, y pueden seleccionarse y luego combinarse ( concatenarse ) con otra fila usando operadores integrados. La operación de seleccionar los elementos de una serie se denomina sección de la serie.

La siguiente modificación del ejemplo anterior reemplaza el elemento antiguo por el nuevo. Como las variables old y new se declaran como objetos, pueden ser tanto átomos como series. No se requiere verificación de tipo porque la función puede operar en cualquier tipo de datos.

función replace_item ( objeto antiguo, objeto nuevo, grupo de secuencia ) entero pos pos = encontrar (antiguo, grupo) si pos > 0 entonces grupo[pos] = nuevo terminara sifunción de fin de grupo de retorno

Pasando parámetros

Los parámetros a la subrutina siempre se pasan por valor, sin embargo, inicialmente solo se pasa una referencia al objeto, y su copia se crea solo si la subrutina intenta cambiarla, y luego la subrutina trabaja con la copia, y no con el objeto. en sí mismo (el llamado método de “ copia en escritura ”). Así, el parámetro puede cambiar dentro de la subrutina, mientras que el objeto original permanece sin cambios. Opcionalmente, se puede pasar una copia modificada del objeto como valor de retorno de la función.

Principales modificaciones y dialectos de Euphoria

Versión bilingüe de Euphoria

Hay una modificación de la versión 2.5 de Euphoria con palabras clave en inglés y ruso (en codificación CP866 ) y un alfabeto ilimitado para identificadores, desarrollado con la participación de Craig [24] . También se está desarrollando un mod bilingüe para Euphoria versión 3, actualmente en alfa.

Phix

Phix [25] es un compilador de lenguaje de programación  desarrollado por Pete Lomax basado en la sintaxis RDS Euphoria, pero con las siguientes diferencias [26] [27] :

Por el momento, la versión actual 0.6.2 del compilador, lanzada el 10 de julio de 2011, tiene un estado beta.

Lenguajes de programación relacionados

Literatura

Julieta Kemp. Codificación alegre con OpenEuphoria  // LinuxFormat (versión en inglés). - Noviembre 2013. - Nº 176 .

Enlaces

Notas

  1. EuGTK 4.15.2 publicado . Archivado desde el original el 30 de enero de 2021. Consultado el 5 de abril de 2022.
  2. 1 2 3 Sitio web de RapidEuphoria (ing.) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  3. 1 2 Foro RapidEuphoria, 2006-10-18 16:44 por Robert Craig  (ing.)  (enlace descendente) . Archivado desde el original el 16 de julio de 2011.
  4. 1 2 Foro RapidEuphoria, 2006-10-18 1:19 por Robert Craig  (ing.)  (enlace descendente) . Archivado desde el original el 16 de julio de 2011.
  5. 1 2 Sitio de la comunidad openEuphoria (inglés) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  6. Anuncio de lanzamiento de openEuphoria versión 4.0.0 (enlace descendente) . Archivado desde el original el 14 de julio de 2012. 
  7. 1 2 logotipo y mascota de openEuphoria (ing.) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  8. 1 2 3 manual de openEuhporia, Binding and Shrouding (inglés) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  9. Proyecto Euphoria Win32Lib en Sourceforge ( enlace inaccesible) . Archivado desde el original el 14 de julio de 2012.   
  10. Euphoria project wxEuphoria en Sourceforge (ing.) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  11. Proyecto Euphoria GTK+ en Sourceforge ( enlace inaccesible) . Archivado desde el original el 14 de julio de 2012.   
  12. Proyecto Euphoria IUP de Jeremy Kovgar (inglés) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  13. manual de openEuphoria, Base de datos (ing.) (enlace descendente) . Archivado desde el original el 14 de julio de 2012.   
  14. wiki de openEuphoria, Interfaces de base de datos ( enlace muerto) . Archivado desde el original el 14 de julio de 2012.   
  15. RapidEuphoria forum, 2002-09-10 por Robert Craig  (inglés)  (enlace no disponible) . Archivado desde el original el 16 de julio de 2011.
  16. 1 2 3 4 Sitio web de RapidEuphoria, notas de la versión (inglés) (enlace descendente) . Archivado desde el original el 14 de julio de 2012.   
  17. Foro de RapidEuphoria, 2 de marzo de 1998 13:04 por Robert Craig  (ing.)  (enlace no disponible) . Archivado desde el original el 16 de julio de 2011.
  18. Noticias de RapidEuphoria (inglés) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  19. Notas de la versión de openEuphoria ( enlace inaccesible) . Archivado desde el original el 14 de julio de 2012.   
  20. Manual de openEuhporia, Problemas específicos de la plataforma (inglés) (enlace no disponible) . Archivado desde el original el 14 de julio de 2012.   
  21. Novedades de la versión 4.0 . Consultado el 17 de agosto de 2012. Archivado desde el original el 10 de enero de 2012.
  22. Hoja de ruta de openEuphoria (ing.) (enlace descendente) . Archivado desde el original el 14 de julio de 2012.   
  23. Este código elimina el elemento de fila con el número pos. Desde la versión 4.0.0, Euphoria utiliza un procedimiento remove() integrado especial para realizar esta operación.
  24. Versión bilingüe de Euphoria archivada en RapidEuphoria.com ( enlace inaccesible) . Archivado desde el original el 14 de julio de 2012.   
  25. Phix . Consultado el 8 de mayo de 2022. Archivado desde el original el 12 de marzo de 2016.
  26. Publicación de Pete Lomax sobre las diferencias entre Phix y Euphoria (ing.) (enlace roto) . Archivado desde el original el 14 de julio de 2012.   
  27. Publicación de Pete Lomax en el foro OpenEuphoria sobre la diferencia entre Phix y Euphoria 4.0 ( enlace muerto) . Archivado desde el original el 14 de julio de 2012.