Parte I - Fundamentos del Lenguaje

1. Introducción

 
Euphoria es un nuevo lenguaje de programación con las siguientes ventajas sobre otros lenguajes convencionales:

  • una notablemente simple, flexible y potente definición del lenguaje que es fácil de aprender y usar.

  • Asignación dinámica de memoria. Las variables crecen o decrecen en tamaño, sin que el programador tenga que preocuparse de liberar porciones de memoria. Los objetos de cualquier tamaño se pueden asignar a los elementos de una secuencia Euphoria (array).

  • un avanzado intérprete de altas prestaciones que es 30 veces más rápido que los intérpretes convencionales, tales como Perl y Python.

  • un Traductor Euphoria a C optimizado, que puede acelerar la velocidad aún más, frecuentemente por un factor de 2 a 5 veces el ya rápido intérprete.

  • Pre-compilación relámpago. El código fuente de su programa se lo verifica en sintaxis y se lo convierte en una forma interna eficiente a más de 35,000 líneas por segundo en un lento Pentium-150. No hay necesidad de meterse con archivos "de código byte" adicionales.

  • extensa verificación en tiempo de ejecución de: índices fuera de rango, variables no inicializadas, valores erróneos en los parámetros de las rutinas de librería, valores ilegales asignados a una variable y mucho más. No hay misteriosas excepciones de máquina -- siempre obtendrá una completa descripción en inglés de cualquier problema que ocurra con su programa en tiempo de ejecución, junto con un trazado de las llamadas a la pila y un volcado de todos los valores de sus variables. Los programas se pueden depurar rápidamente, fácilmente y más a fondo.

  • Las características del hardware subyacente se ocultan totalmente. Los programas no tienen conocimiento de longitudes de palabra, representación a nivel de bit de valores subyacentes, orden de bytes, etc.

  • Se incluyen un depurador de pantalla completa y un analizador de perfiles de ejecución, junto con un editor multiarchivo de pantalla completa. En un monitor color, el editor muestra los programas Euphoria en varios colores, resaltando comentarios, palabras reservadas funciones internas, cadenas y el nivel de anidación de paréntesis. Opcionalmente realiza el autocompletado de sentencias, evitándole el trabajo de escribir y reduciendo los errores de sintaxis. Este editor está escrito en Euphoria, y su código fuente se provee sin restricción alguna. Puede modificarlo libremente, agregarle nuevas funcionalidades y redistribuirlo como desee.

  • Los programas Euphoria se ejecutan bajo Linux, FreeBSD, Windows de 32 bits, y cualquier entorno DOS, y no están sujetos a las limitaciones de memoria de 640K. Puede crear programas que usen la totalidad de la memoria de su máquina, se usará automáticamente un archivo de intercambio cuando el programa necesite más memoria de la que existe en su máquina.

  • Puede generar un archivo .exe único e independiente de su programa.

  • Las rutinas Euphoria son naturalmente genéricas. El programa de ejemplo de más abajo, muestra una sencilla rutina que ordenará cualquier tipo de dato -- enteros, números de punto flotante, cadenas, etc. Euphoria no es un lenguaje "orientado a objetos", sin embargo, alcanza muchas de las ventajas de esos lenguajes en una forma mucho más simple.



1.1 Programa de ejemplo

El siguiente es un ejemplo de un programa Euphoria completo.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 sequence list, sorted_list

 function merge_sort(sequence x)
 -- poner x en orden ascendente, usando merge_sort recursivo
     integer n, mid
     sequence merged, a, b

     n = length(x)
     if n = 0 or n = 1 then
         return x  -- caso trivial
     end if

     mid = floor(n/2)
     a = merge_sort(x[1..mid])       -- ordena la primera mitad de x
     b = merge_sort(x[mid+1..n])     -- ordena la segunda mitad de x

     -- combina las dos mitades ordenadas en una
     merged = {}
     while length(a) > 0 and length(b) > 0 do
         if compare(a[1], b[1]) < 0 then
             merged = append(merged, a[1])
             a = a[2..length(a)]
         else
             merged = append(merged, b[1])
             b = b[2..length(b)]
         end if
     end while
     return merged & a & b  -- datos combinados 
 end function

 procedure print_sorted_list()
 -- genera sorted_list desde la lista
     list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2}
     sorted_list = merge_sort(list)
     ? sorted_list
 end procedure

 print_sorted_list()     -- este comando inicia el programa


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El ejemplo de más arriba contiene 4 comandos separados que se procesan en orden. El primero declara dos variables: list y sorted_list como secuencias (arrays flexibles). El segundo define la función merge_sort(). El tercero define el procedimiento print_sorted_list(). El último comando llama al procedimiento print_sorted_list().

La salida del programa será:
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

merge_sort() ordenará fácilmente {1.5, -9, 1e6, 100} o {"naranjas", "manzanas", "bananas"} .

Este ejemplo está guardado en euphoria\tutorial\example.ex. Esta no es la forma más veloz de ordenar en Euphoria. Vaya al directorio euphoria\demo y escriba "ex allsorts" para ver los tiempos en varios algoritmos de ordenamiento según la cantidad de objetos. Para un ejemplo rápido de programación en Euphoria ver euphoria\demo\bench\filesort.ex.



1.2 Instalación

Para instalar Euphoria en su máquina, primero lea el archivo install.doc. La instalación involucra simplemente el copiado de los archivos euphoria a su disco rígido, dentro del directorio llamado "euphoria", y modificar el archivo autoexec.bat de modo que euphoria\bin esté en la ruta de búsqueda, y la variable de entorno EUDIR apunte al directorio de Euphoria.

Una vez instalado, el directorio euphoria se verá como esto:

\euphoria
readme.doc
readme.htm
\bin
ex.exe y exw.exe, o exu (Linux/FreeBSD), ed.bat, guru.bat, otras utilidades
\include
archivos de inclusión estándares, por ejemplo, graphics.e
\doc
refman.doc, library.doc, y varios otros archivos de documentación de texto plano
\html
archivos HTML correspondientes cada uno a los archivos .doc del directorio doc
\tutorial
pequeños programas tutoriales para ayudar a aprender Euphoria
\demo
programas de demostración genéricos que corren en todas las plataformas
\dos32
programas de demostración específicos de DOS32 (opcional)
\win32
programas de demostración específicos de WIN32 (opcional)
\linux
programas de demostración específicos de Linux/FreeBSD (opcional)
\langwar
juego language war (versión de gráficos de píxel para DOS, o versión texto para Linux/FreeBSD)
\bench
programas de ensayos
\register
información de cómo ordenar la Edición Completa

El subdirectorio Linux no está incluido en la distribución DOS/Windows, y los subdirectorios DOS32 y WIN32 no están incluidos en la distribución Linux/FreeBSD. En este manual, los nombres de directorios se muestran usando una barra invertida (\). Los usuarios de Linux/FreeBSD deberán sustituirla por la barra de división (/).



1.3 Ejecutando un programa

Los programas Euphoria se ejecutan al escribir ex, exw o exu seguido por el nombre del principal archivo Euphoria. Puede agregar palabras adicionales (conocidas como argumentos) en esta línea, llamada línea de comandos. Su programa puede llamar a la función interna command_line() para leer la línea de comandos. La versión DOS32 del Intérprete Euphoria se llama ex.exe, la versión WIN32 se llama exw.exe y la versión Linux/FreeBSD exu. Por convención, los archivos principales de Euphoria tienen la extensión .ex, .exw o .exu. Otros archivos Euphoria, que se pueden incluir en programas más grandes, terminan en .e o a veces en .ew o .eu. Para abreviar escritura, puede dejar de escribir el ".ex", y el comando ex lo agregará automáticamente. exw.exe agregará ".exw", y el exu, ".exu". Si no se puede encontrar el archivo en el directorio actual, será buscado en la ruta (PATH). Puede redireccionar la entrada y salida estándares al ejecutar un programa Euphoria, por ejemplo:

        ex filesort.ex < raw.txt > sorted.txt
o simplemente,
        ex filesort < raw.txt > sorted.txt
A diferencia de otros compiladores e intérpretes, no hay opciones especiales en la línea de comandos de ex, exw o exu. Solamente se espera el nombre de su archivo Euphoria, y sino lo suministra, le será pedido.

Para los programas usados frecuentemente bajo DOS/Windows you podría querer hacer un pequeño archivo .bat (batch) file, quizás llamado miprog.bat, conteniendo dos instrucciones como:

        @echo off
        ex miprog.ex %1 %2 %3
La primera instrucción desactiva el eco de los comandos en pantalla. El segundo ejecuta ex miprog.ex con hasta 3 argumentos en la línea de comando. En command_line() vea un ejemplo de cómo leer esos argumentos. Si su programa toma más argumentos, debería agregar %4, %5, etc. Teniendo un archivo .bat lo salvará del inconveniente menor de escribir ex (o exw) todas las veces, es decir, puede escribir solamente:
        miprog
en lugar de:
        ex miprog
Desafortunadamente, DOS no le permitirá la redirección de la entrada y salida estándares al usar un archivo .bat.

Bajo Linux/FreeBSD, puede escribir el camino al intérprete Euphoria en la primera línea de su archivo principal, por ejemplo, si su programa se llama foo.exu:

        #!/home/rob/euphoria/bin/exu
        
        procedure foo()
            ? 2+2
        end procedure

        foo()
Entonces si hace ejecutable su archivo:
        chmod +x foo.exu
Puede escribir solamente:
        foo.exu 
para correr el programa. Inclusive, podría acortar más aún el nombre a simplemente "foo". Euphoria ignora la primera línea cuando comienza con #!. Cuide que la primera línea termine con \n estilo Linux/FreeBSD, y no con el \r\n estilo DOS/Windows, o el shell de Linux/FreeBSD podría confundirse.

También puede correr bind.bat (DOS32), o bindw.bat (WIN32) o bindu (Linux/FreeBSD) para combinar su programa Euphoria con ex.exe, exw.exe o exu, para hacer un archivo ejecutable independiente (archivo .exe en DOS/Windows). Con un archivo .exe independiente puede redirigir la entrada y salida estándares. El enlazado se discute luego en 1.5 Distribuyendo un programa.

Tanto exu, ex.exe como exw.exe están en el directorio euphoria\bin, el cual tiene que estar en su ruta de búsqueda. La variable de entorno EUDIR debería apuntar al directorio principal de Euphoria, por ejemplo, c:\euphoria.


1.3.1 Corriendo bajo Windows

Puede correr programas Euphoria directamente desde el entorno Windows, o desde el shell DOS que tiene abierto desde e Windows. Al "asociar" los archivos .ex con ex.exe, y los archivos .exw con exw.exe puede hacer doble clic en un archivo .ex o .exw para ejecutarlo. Bajo Windows debería definir un nuevo tipo de archivo para .ex, haciendo clic en Mi PC / Ver / Opciones / Tipos de archivos. Es posible que tenga varios programas Euphoria activos en diferentes ventanas. Si convierte un programa en un archivo .exe, simplemente puede hacer clic sobre él para ejecutarlo.


1.3.2 Uso del archivo de intercambio

Si ejecuta un programa Euphoria bajo Linux/FreeBSD o Windows (o en el shell DOS bajo Windows), y el programa se queda sin memoria física, usará "memoria virtual". El sistema operativo provee esta memoria virtual automáticamente para intercambiar los datos y código usados recientemente con el archivo de intercambio. Para cambiar el tamaño del archivo de intercambio de Windows, haga clic en Panel de Control / 386 Mejorado / "memoria virtual...". Bajo OS/2 puede ajustar "DPMI_MEMORY_LIMIT" haciendo clic en el ícono de la máquina virtual DOS / "Configuración DOS" para asignar más memoria extendida para su programa.

Bajo DOS puro, fuera de Windows, no hay un archivo de intercambio del sistema, por lo que ex.exe (DOS32) incorpora un expansor para DOS, que creará el archivo de intercambio para el posible uso por su programa. Ver platform.doc.



1.4 Editando un programa

Puede usar cualquier editor de texto para editar un programa Euphoria Sin embargo, Euphoria viene con su propio editor especial que está enteramente escrito en Euphoria. Escriba: ed seguido por el nombre completo del archivo que desea editar (la extensión .ex/.exw/.exu no está sobreentendida). Puede usar este editor para editar cualquier tipo de archivo de texto. Al editar un archivo Euphoria, están disponibles algunas funcionalidades adicionales, tales como la coloración de la sintaxis y el autocompletado de ciertas sentencias.

Toda vez que ejecute un programa Euphoria y obtenga un mensaje de error, sea durante la compilación como la ejecución, simplemente escriba ed sin el nombre del archivo y será automáticamente posicionado en el archivo que contiene el error, en la línea y columna correctas, mientras en la parte superior de la pantalla verá el mensaje de error.

Bajo Windows puede asociar ed.bat con varios tipos de archivos de texto que quiera editar. La coloración de la sintaxis se aplica a los archivos de entesión .ex, .exw, .exu, .e, .ew, .eu, y .pro (profile).

La mayoría de la teclas que presiona se insertan en el archivo, en la posición del cursor. Presione la tecla Esc una vez para obtener la barra del menú de comandos especiales. También están activas las teclas de flechas y las de Insert / Supr / Inicio / Fin / Re Pág / Av Pág. Bajo Linux/FreeBSD algunas teclas pueden no estar disponibles, y habrán otras provistas como alternativa. Vea el archivo euphoria\doc\ed.doc (euphoria\html\ed.htm) una descripciónfor completa de los comandos de edición. Esc h (ayuda) que le permitirá leer ed.doc desde la sesión de edición.

Si necesita comprender o modificar algún detalle de la operación del editor, puede editar el archivo ed.ex en euphoria\bin (asegúrese de hacer una copia de seguridad para no perder el archivo original). Si el nombre ed le genera un conflicto con algún otro comando en su sistema, renombre el archivo euphoria\bin\ed.bat a algún otro. Debido a que el editor está escrito en Euphoria, es notablemente conciso y fácil de comprender. La misma funcionalidad implementada en otro lenguaje como el C, tomaría más líneas de código.

ed es un simple editor de modo texto que corre en DOS, Linux, FreeBSD y en la consola de Windows. También vea el excelente editor de David Cuny para DOS y Linux/FreeBSD. Puede descargar ee.ex desde el sitio web de Euphoria. También hay otros editores orientados a Euphoria que corren bajo Windows. Véalos en sitio web de Euphoria.



1.5 Distribuyendo un programa

Euphoria provee 4 formas distintas de distribuir un programa.

En el primer método, le despacha a sus usuarios archivos de Dominio Público ex.exe o exw.exe o exu, junto con su archivo principal Euphoria .ex, .exw, or .exu file y cualquier archivo de inclusión .e que se necesite (incluyendo cualquier de los estándares del directorio euphoria\include). Si los archivos Euphoria de código fuente se ubican juntos en un directorio y ex.exe, exw.exe o exu se ubican en el mismo u otro directorio de la ruta de búsqueda (path), entonces sus usuarios pueden ejecutar su programa, escribiendo ex (exw) o (exu) seguido por la ruta de su archivo principal .ex, .exw, o .exu. También podría proveer un pequeño archivo .bat, de forma que la gente no tenga que escribir ex (exw). Este método asume que quiere compartir su código fuente Euphoria con sus usuarios.

La Edición Completa le brinda dos métodos más de distribución. Puede encriptar su programa, o enlazarlo. La encriptación combina todos los archivos .e que su programa necesite, junto con su archivo principal para crear un archivo único .ex, .exw, or .exu. Puede tanto encriptar/compactar su programa para ocultarlo y hacerlo inviolable, como dejarlo legible para permitirles a los usuarios su inspección. El enlazado combina su programa encriptado con ex.exe, exw.exe, o exu para crear un archivo ejecutable, único e independiente (.exe). Por ejemplo, si su programa se llama "miprog.ex", puede crear "myprog.exe" que correrá exactamente igual. Para más información acerca de la encriptación y enlazado, lea bind.doc.

Finalmente, con el Traductor Euphoria a C, puede traducir su programa Euphoria a C y entonces compilarlo con un compilador C para obtener un archivo ejecutable (.exe). El Traductor está disponible en una descarga separada en el sitio web de RDS.


1.5.1 Licenciamiento

Puede distribuir libremente cualquier programa Euphoria que desarrolle, sin tener que pagar regalías. También puede distribuir libremente los archivos de la Edición de Dominio Público ex.exe, exw.exe and exu, por lo que cualquiera puede correr sus programas Con la Edición Completa, puede encriptar o enlazar sus programas y distribuir los archivos resultantes, también sin pagar regalías.

Puede incorporar cualquier archivo de código fuente Euphoria de este paquete en su programa, tanto los originales como los que contienen alguna modificación que le haya hecho. (Probablemente necesite, al menos, unos pocos archivos de inclusión estándares en cualquier programa extenso).

Apreciaremos si le dice a la gente que desarrolló su programa usando Euphoria, y si les da la dirección de nuestro sitio web: http://www.RapidEuphoria.com, pero no exigimos tal reconocimiento.

Los únicos archivos relacionados con el Intérprete que no debe distribuir son ex.exe, exw.exe, bind.ex, bind.bat, bindw.bat, y shroud.bat, que vienen con la Edición Completa del Intérprete para WIN32 + DOS32, y exu, bind.ex, bindu y shroud que vienen con la Edición Completa del Intérprete para Linux/FreeBSD. El archivo de ícono euphoria.ico, que se incluye con la Edición Completa para WIN32 + DOS32, se puede distribuir con o sin modificaciones.

El Intérprete Euphoria está escrito en ANSI C, y se puede compilar con varios compiladores de C. El fuente está disponible para la compra. Antes de comprarlo, por favor lea la Licencia del código fuente del Intérprete.

Algunas restricciones legales adicionales se pueden aplicar al usar el Traductor Euphoria a C.

 

... continua en 2. Definición del lenguaje