Notas de las versiones Euphoria
Versión 2.4 Edición
Oficial, 3 de Julio de 2003:
-
Se extendieron define_c_proc()
y define_c_func(), por lo que
además de definir rutinas de C en .dll's externas y librerías
compartidas, ahora puede definir los parámetros y valor de
retorno para una rutina en código de máquina que su
programa ponga en su propia memoria. Puede llamar a la rutina en código
de máquina usando c_proc()
o c_func(). Gracias a Daniel Kluss.
-
Traductor:
Al traducir una rutina Euphoria enorme (varias cientas de sentencias
Euphoria), el Traductor ahora llamará a una rutina desreferenciada,
en lugar de usar sentencias de C en-línea. Esto reduce la posibilidad
de exceder el límite de tamaño impuesto por el compilador
C (especialmente Watcom C). También reduce el tamaño
del .exe. Puesto que la rutina desreferenciada es más
probable que esté en el cache que las sentencias en-línea,
la diferencia de velocidad no es tan grande.
- Se modificó el programa tutorial filesort.ex
para hacerlo más usable bajo Linux
y FreeBSD.
-
Por defecto, safe.e
es ahora menos estricto, verificación "solo bordes" de corrupción
de la memoria, cuando la plataforma es WIN32.
Frecuentemente, los programas Windows acceden a memoria que no se
asignó usando allocate()
de Euphoria.
-
error corregido:
En un caso raro, el Traductor fallaba al emitir el código C
para hacer una copia de una secuencia con múltiples referencias
a ella, antes de sobrescribir un elemento de esa secuencia. Gracias
a Juergen Luethje.
-
error corregido:
En ciertos casos, cuando un programa Euphoria intercambiaba datos
con una .dll escrita en Euphoria, los datos podían no
liberarse (hasta que el programa terminaba). Gracias a Wayne Overman
(Euman).
-
error corregido:
Si utilizaba "asm" en su programa como una variable privada o nombre
de parámetro, el Traductor usaría "_asm" en el código
C. Esto no es aceptado por algunos compiladores de C. El Traductor
ahora evitará de usar "_asm", tanto como "_try", "_Seg16",
"_stdcall" y varios otros nombres de comienzan con un guión
de subrayado que están reservados por varios compiladores de
C. Gracias a George Papadopolous y Matt Lewis.
Versión 2.4 Edición
Beta, 10 de Abril de 2003:
Esta edición actualiza los productos Intérprete
Euphoria, Traductor Euphoria a C,
y el Código Fuente del Intérprete,
para Windows, DOS,
Linux y FreeBSD.
Nuevas Características
-
exw, ecw -wat: La desasignación del
espacio para los números enormes de objetos pequeños
(átomos o secuencias pequeñas) es mucho más rápida
que en 2.4 Alpha. Gracias a Andy Serpa. (Observe que la asignación
de números enormes de objetos pequeños en exw,
o ecw -wat, se
aceleró mucho en 2.4 Alpha, y ahora es mucho más rápida).
- El primer valor devuelto por rand()
(en ausencia de set_rand()) es ahora
más "aleatorio". Gracias a Aku.
Errores corregidos
-
error corregido:
repeat(0, size), donde 'size'
era un número de punto flotante enorme, se informaba incorrectamente
: "la cuenta de repetición no puede ser negativa".
Ahora informa: "la cuenta de repetición es demasiado grande".
Gracias a Martin Stachon.
-
error corregido:
machine_proc(x, 5), donde 'x'
era un número de punto flotante muy grande, informaba incorrectament:
"se esperaba un entero, no una secuencia". Ahora informa:
"El primer argumento para machine_proc/func tiene que ser un entero
positivo pequeño". Gracias a Martin Stachon.
Versión
2.4 Edición Alfa, 21 de Febrero de 2003:
Nuevas Características
-
La mayoría de las excepciones a nivel de
máquina (peek/poke a direcciones incorrectas, etc.) tanto en
el programa principal como en las .dll, ahora las captura exw
y exu, y se informan de la forma
usual con un trazado completo yel volcado de variables en ex.err.
Esto es una gran mejora respecto de los crípticos mensajes
a nivel de máquina que normalmente obtiene al usar lenguajes
compilados y en la mayoría de los lenguajes interpretados como
"violación de segmento", "instrucción ilegal", etc.
Gracias a Martin Stachon.
- El soporte de nombres largos de Euphoria en DOS
se extendió a Windows XP.
- La impresión formateada de secuencias se hace ahora en ex.err,
el comando ? y db_dump().
-
Las rutas de las sentencias Include, pueden estar
encerradas entre comillas dobles, de forma que las rutas que contienen
espacios en blanco se pueden manejar correctamente. Esto se implementó
realmente en 2.3, pero nunca fue documentado.
-
exw.exe, y
cualquier ejecutable producido por el Traductor
con Watcom, ahora tiene el subsistema establecido a 4.0, en lugar
de 3.1. Esto mejora la apareciencia de la interfaz de usuario en algunos
casos. La utilidad make31.exw
creará una versión de exw.exe
que soporte la interfaz de usuario de Windows 3.1 como antes, en el
caso inverosímil que haya problemas de compatibilidad con Euphoria
2.3. Gracias a H. W. Overman, Brian Broker y otros por recomendar
este cambio.
-
Traductor:
Ahora puede hacer una .dll de Euphoria usando Lcc y usarla con programas
interpretados corriendo bajo exw,
y programas traducidos usando Borland y Watcom. Previamente, el programa
principal se tuvo que compilar con Lcc.
-
Traductor:
realizará ahora llamadas automáticas a tipos definidos
por el usuario, en el caso inusual donde la rutina de tipos tenga
efectos colaterales (establecer variables globales, operaciones E/S,
etc.). Gracias a Andy Serpa.
Migración
- Andy Cranston migró Euphoria a HP
Unix, y planea hacerlo para Sun
Unix.
Optimizaciones
- Intérprete -
-
Los típicos subrangos grandes son más
rápidos. Cerca del 30% más rápidos para subrangos
de 100 a 50000 en longitud (el consumo de recursos domina en los subrangos
pequeños, y la carencia de cache afecta a los subrangos más
grandes). Esto asume que el subrango es principalmente de números
enteros (generalmente cierto), y se hace una copia real de los datos
(generalmente cierto desde v1.4b).
-
Las sentencias que contienen múltiples
concatenaciones &, son más
rápidas.
por ejemplo, en lugar que:
result = a & b & c
sea evaluada como:
1. copia a y b en temp
2. copia temp y c en result
(a y b se copian dos veces!)
Ahora hacemos:
1. copia a, b y c directamente en result
Por tanto, hay menos copiado de datos y pocas secuencias temporales
para crear. Los operadores & adicionales
en una expresión, (cuanto mayor es la aceleración),
por ejemplo, con 3 operadores &
algunos de los datos se copiaron 3 veces, etc. Jordah Ferguson precisó
que esto era lento.
-
El tiempo implicado en llamar y volver de una
rutina de call-back de Euphoria ha sido reducido cerca de 10%.
- Sistema de Base de Datos Euphoria -
-
La insersión y borrado de registros en
tablas enormes son ahora mucho más rápidos. Combinado
con los subrangos más veloces en Euphoria 2.4, database.e
es ahora cerca de un 25% más rápida para una tabla con
10,000 registros y más de 3 veces más rápida
para una tabla con 100,000 registros. Esto importa realmente solamente
si usted está intentando insertar/borrar cientos de registros
por segundo. En el caso típico de un operador humano que ingresa
datos a través de la interfaz de usuario, usted nunca notaría
el tiempo de insersión/borrado para un registro (algunos milisegundos).
Derek Parnell precisó la lentitud.
- db_select_table() es significativamente
más rápida.
- Otras Optimizaciones -
- bytes_to_int() en machine.e
es más de 2 veces más rápido.
- gets() es un 5% más rápido.
Errores Reparados
- Código Fuente -
- error corregido: El
archivo por lotes gnubsd refería
a syncolor.c y syncolor.o.
(gnuexu estaba bien).
- Intérprete -
-
error corregido:
En un ciclo for, en el nivel superior de un programa (fuera de cualquier
rutina), que incrementaba la variable del ciclo en un entero distinto
del valor +1 por defecto, el end for
tardaba 15 veces más que lo necesario debido a la corrección
de un error que se hizo en noviembre de 1999. El end
for solamente era lento, no el código contenido
enel cuerpo del ciclo. Antoine Tammer detectó esto.
-
error corregido:
En XP, cuando abre
una nueva ventana DOS que tiene más de 25 líneas, la
Máquina Virtual de DOS (VDM, por sus iniciales en inglés),
al principio se confunde respecto de la cantidad de líneas
reales. La primera vez (solamente) en que ejecuta un programa Euphoria
en esa ventana, si lo ejecuta cerca del mismo fondo de la pantalla,
la salida puede desaparecer, o el VDM o Euphoria puede informar un
error, etc. Euphoria (ex.exe)
ahora detecta los casos raros en que el VDM se confunde y limpia la
pantalla, el cual elimina la confusión. Un problema similar
existió en NT, y se lo solucionó unos pocos años
atrás.
- Traductor -
-
error corregido:
Al asignar el resultado de un cálculo aritmético (típicamente
una multiplicación) que involucra a dos enteros, a una variable
declarada como átomo, donde la variable átomo (en el
mismo bloque básico) se asigna a un valor entero, el Traductor
no podía emitir ningún código para comprobar
si hay desbordamiento entero (resultado fuera de +/- mil millones).
Esto provocaba una cancelación del programa. Gracias a Andy
Serpa.
-
error corregido:
El código traducido compilado con Borland C no producía
INF's y NAN's, como Watcom y Lcc. En su lugar, se cancelaba al ocurrir
un desbordamiento de punto flotante (más de 1e308), o se calculaba
un resultado indefinido de punto flotante. El Código
Fuente del Intérprete también se corrigió
para aquellos que desean compilar exw.exe
usando Borland C. Gracias a Andy Serpa.
-
error corregido:
En el primer bloque básico de una rutina Euphoria (es decir,
antes de cualquier sentencia de control de flujo)
peek4u(), peek4s(),
y la operación "add integer 1", a veces se descuidaría
comprobar si hay un posible desbordamiento entero de 31 bits al asignar
a una variable privada declarada como átomo, a menos que la
variable hubiera sido inicializada previamente. Gracias a Mike Duffy.
-
error corregido:
En algunos casos, al asignar un elemento de la secuencia a una variable
declarada como entero, y conocida para tener un valor entero en este
punto, no se manejaba correctamente el caso donde el elemento era
un valor entero almacenado en forma de double de C.
-
error corregido:
Las .dll de Euphoria no siempre liberaban correctamente el almacenamiento
asignado por el programa principal y viceversa. La memoria se podría
agotar, con lo que podría obtener una cancelación a
nivel de máquina. Gracias a H. W. Overman.
Nota: Debido a esta corrección, cualquier
.dll de Euphoria creada con el Traductor versión 2.3 o anterior,
tiene que ser re-traducida con la versión 2.4, y recompilada,
para interconectar con el intérprete Euphoria 2.4 (o posterior)
o código traducido. Las nuevas .dll creadas con la versión
2.4 o posterior, no funcionarán con el intérprete de
la versión 2.3 o anteriores, excepto en casos triviales.
-
error corregido:
La función sleep(x) solamente
"dormía" por 'x' milisegundos al usar la librería
en tiempo de ejecución de Lcc. Ahora "duerme" por
'x' segundos, para consistir con la documentación de Euphoria
para sleep(). Gracias a Wolfgang
Fritz.
-
error corregido:
En algunas versiones de Linux,
un programa Euphoria traducido/compilado podía cancelarse si
se llamaba a máquina (M_GET_SCREEN_CHAR, {row, col}).
- Enlazador -
-
error corregido:
El enlazador se estrellaría después de ver un comentario
sin carácter de nueva línea, solo EOF, en la última
línea de un archivo. Algunas versiones de Win32Lib.ew tenían
esto. Gracias a Henri Goffin.
-
error corregido:
Si usted definió una constante que nunca se
utilizaba, y fue definida usando una expresión que contenía
un operador menos binario, un error del sintaxis podría ocurrir
en el archivo enlazado o encriptado que usted crea. Gracias a Chris
Bensler.
- Rutinas de Librería -
- error corregido: walk_dir("/",...)
fallaba en Linux. Gracias
a Ricardo Forno.
-
error corregido:
ex, exw, ec -wat, ecw -wat: La función
dir() para DOS
y Windows no manejaba
correctamente los comodines cuando aparecía una barra invertida
al final del archivo o de la ruta del directorio. Gracias a Juergen
Luethje.
- Espacio de nombres -
-
error corregido:
Si intentaba declarar una nueva variable, usando un calificador de
espacio de nombres, por ejemplo, integer y:x (que es ilegal)
no lo informaría, y solo ignoraría la parte "y:", mientras
y:x era una rutina (no una variable) en un archivo anterior. Esto
ahora se captura como error. Gracias a Martin Stachon.
-
error corregido:
Al declarar el tipo de un parámetro, usando un tipo global
que estaba definido en más de un archivo, obtendría
un mensaje de error confuso que indica que "se espera un tipo
aquí". Ahora usted obtendrá un mensaje que precisa
que el tipo requiere un identificador de espacio de nombres para resolverlo.
Gracias a Juergen Luethje.
- Programas de Demostración -
- Trazado/Depuración -
-
error corregido:
Cuando se ejecutaba trace(0),
seguido luego por trace(1), sin
E/S a pantalla en el medio, los valores de algunas variables en la
pantalla de trazado no se actualizaban. Gracias a Ricardo Forno.
Versión 2.3 Edición Oficial, 11 de Febrero de 2002:
Esta versión actualiza el Intérprete de
Euphoria, el Traductor Euphoria a C, y el Código Fuente del Intérprete,
para todas las plataformas.
-
La versión DJGPP del código fuente
del intérprete ahora usa los rótulos dinámicos
de GNU C, igual que la versión Linux. Esto permite que alcance
plena velocidad, sin la necesidad de ninguna optimización a
nivel de ensamblador. Gracias a Bernie Ryan.
- The Código Fuente del Intérprete incluye ahora un documento
introductorio que describe cómo funciona el intérprete.
-
En la Edición Completa, bind.bat y bindw.bat
ahora usan exw para
ejecutar el enlazador/encriptador. Esto evita problemas con los nombres
largos en algunos sistemas. Mientras esté corriendo el enlazador/encriptador,
aparecerá una ventana de consola. Gracias a "void", Bruce Axtens,
y otros.
-
error corregido:
Debido a un error en la librería de WATCOM C 10.6, los
intérpretes ex
y exw, y el código
traducido a C y compilado con Watcom, podría obtener un resultado
incorrecto de la función where()
de Euphoria cuando el archivo se abre en modo append, y el puntero
de archivo estaba en la porción no comprometida del archivo
(no escrito al disco aún). El error se solucionó al
tener flush() de Euphoria
el archivo en este caso particular, antes de llamar la rutina de Watcom.
Gracias a Bob Elia.
Versión 2.3 Edición
Beta, 15 de Enero de 2002:
Esta versión actualiza el Intérprete de
Euphoria, el Traductor Euphoria a C, y el Código Fuente del Intérprete,
para todas las plataformas.
-
Ahora puede sobreescribir una rutina incorporada
de Euphoria con su propia variable o el identificador del espacio
de nombres del mismo nombre. Esto fue permitido previamente solamente
para las rutinas definidas por el usuario. Además de dar a
programadores más libertad, permitirá que RDS agregue
nuevas rutinas incorporadas en el futuro sin alterar el código
existente.
- Se hicieron numerosas mejoras y correcciones en la documentación.
Gracias a Igor Kachan.
-
error corregido:
Con DJGPP C, al compilar el código producido por el Traductor,
o compilando el código de fuente de Intérprete, había
un error de asignación de memoria que podría hacer perder
un poco de tiempo, o, en casos raros, causar una caida.
-
error corregido:
En Windows, usando
el Intérprete, o en un programa Traducido, a veces se necesitaba
presionar Enter dos veces para salir de la ventana de consola. Gracias
a Tone Skoda.
-
error corregido:
La función Euphoria dir(),
implementada para Lcc o Borland, no manejaba correctamente los directorios
cuando tenían marcado un atributo adicional, como READ_ONLY.
Gracias a Euman, quien encontró el problema, y luego mostró
como corregir el código fuente del Intérprete para dir().
-
error reparado - Enlazador:
Cuando una expresión general, (no solo una cadena entre
comillas), se usaba como argumento de routine_id(),
las rutinas locales que eran potencialmente el blanco de esa expresión,
deberían tener que cambiar sus nombres (a menos que se usara
-clear), causando así que routine_id()
devolviera -1 en tiempo de ejecución. Las rutinas globales
eran correctas.
-
error reparado - Enlazador
para Linux: El error de la ruta de búsqueda en Linux para
ejecutables enlazados, supuestamente corregido en la versión
2.3 Alpha, no lo estaba del todo. Ahora corregido. Gracias a Ken Rhodes.
-
error reparado - Enlazador
para Linux: bindu -clear y shroud -clear
con un archivo conteniendo terminadores de línea \r\n
estilo DOS/Windows, daba
errores de "caracter ilegal" cuando se ejecutaba su programa encriptado,
y "no enlazado correctamente" al ejecutar su programa enlazado.
Versión 2.3 Edición
Alfa, 30 de Noviembre de 2001:
Esta versión actualiza el Intérprete de
Euphoria: para WIN32, DOS32
y Linux. También
actualiza el Traductor Euphoria a C para todas las plataformas, y presenta
un nuevo producto - el Código Fuente del Intérprete Euphoria.
- Cambiaron los precios e incentivos de registración.
- El Intérprete tiene solo una opción:: WIN32,
DOS32 y Linux,
antes $59, por solo $39.
-
El código fuente del Intérprete
(menos unas pocas funcionalidades registradas) está disponible
ahora por $49. Vea más detalles en licencia
del fuente y register.doc.
- El Traductor continua costando $29.
register.doc tiene más detalles,
incluyendo los requisitos para obtener actualizaciones gratuitas.
-
Ahora, el intérprete Euphoria puede generarse
con 6 compiladores distintos, sobre 3 plataformas.
-
Los nuevos calificadores del espacio de nombres
eliminan el conflicto de nombres entre símbolos globales idénticos
declarados en diferentes archivos de inclusión. También
ahora, los símbolos locales sobrescribirán los símbolos
globales del mismo nombre, en lugar de provocar un error. Ver Reglas
de ámbito.
-
El Intérprete de la Edición Completa
viene con un nuevo enlazador/encriptador de 2 pasos que elimina todas
las rutinas y constantes no utilizadas, dando por resultado archivos
ejecutables más pequeños. También tiene la opción
clear para enlazar el fuente, por lo que puede conseguir mensajes
de error comprensibles de sus usuarios.
-
Se introdujo una nueva variable de entorno, EUINC.
Si está presente, especifica una lista adicional de directorios
en los que se buscarán archivos de inclusión. El directorio
que contienen el archivo principal es el primero en que que se busca,
luego en los directorios en EUINC, y entonces en euphoria\include.
-
El Intérprete ahora soporta un nuevo modo
de trazado: trace(3).
Este modo registra en un archivo todas las sentencias Euphoria ejecutadas,
por lo que verá la última sentencia ejecutada en el
momento de cualquier colapso, así como las 499 sentencias que
la preceden. Esto es particularmente útil en el caso de los
colapsos a nivel de máquina donde Euphoria no es capaz de escribir
un archivo ex.err. Gracias a Matthew Lewis.
-
En Linux,
al usar #! en la primera línea, el archivo fuente se convierte
directamente en ejecutable, por lo que no se necesita más la
extensión .exu del archivo. Los programadores Linux prefieren
frecuentemente que sus archivos ejecutables no tengan extensión.
- Las rutinas call-back de Windows ahora pueden tener 9 argumentos
(eran 8). Gracias a Matt Lewis.
- get_bytes() es un 30%
más rápida.
- Se aceleró allocate_string().
Gracias a Aku.
- El programa de demostración mydata.ex
ahora usa una base de datos EDS.
-
error reparado - Traductor:
Cuando una variable global o local que contiene una secuencia
o un número de punto flotante se asignaba al resultado de una
función, en algún punto durante la llamada, la variable
global o local se sobreescribía, produciendo cierto daño
que provocaría más adelante el colapso del programa.
Gracias a Sergio Gelli.
-
error reparado -
Intérprete: s[i][j]...[k] = s causaba el colapso
del intérprete, es decir, una asignación de una secuencia
completa al elemento de un elemento de sí misma, usando 2 o
más niveles de subíndices. Gracias a Henri Goffin.
- error reparado - define_c_var():
trabaja también en WIN32.
Se corrigió la documentación.
Versión 2.2
Edición Oficial para WIN32+DOS32, 14 de Enero de 2000:
- Se mejoró la documentación en algunos lugares.
- Language War usa la versión mejorada de putsxy.e
de Jiri Babor.
Versión 2.2 Edición
Beta para WIN32+DOS32, 23 de Diciembre de 1999:
La mayoría de las nuevas rutinas desarrolladas
para Euphoria 2.2 en Linux,
se migraron a WIN32 y DOS32.
Ellas son: sleep(),
chdir(), flush(),
lock_file(), unlock_file(),
crash_file(), get_screen_char()
y put_screen_char(). Referirse
más abajo a las notas para Linux, para obtener una descripción
de esas rutinas, o LIBRARY.DOC.
Algunos arreglos de errores de plataforma cruzada y
otras mejoras misceláneas fueron llevados a cabo durante la migración
a Linux. Estas correcciones y mejoras se migraron nuevamente a WIN32+DOS32.
Ver las notas de la versión para Linux (debajo).
Además, se hicieron las siguientes mejorías específicamente
para WIN32 y DOS32:
Versión 2.2 Edición
Oficial para Linux, 22 de Noviembre de 1999:
-
Todas las plataformas: error
corregido: Si una rutina Euphoria se llamaba a sí
misma recursivamente desde el interior de un ciclo for, y en un nivel
de recursión el ciclo for contaba hacia el límite superior,
y en otro nivel de recursión el ciclo for contaba hacia el
límite inferior, el ciclo for funcionaría incorrectamente
probablemente en uno de los niveles. Gracias a Delroy Gayle.
- Se mejoró la documentación en muchos lugares, especialmente
con respecto a la plataforma Linux.
Versión 2.2
Edición Beta para Linux, 22 de Octubre de 1999:
La mayoría de estas características
y arreglos de errores también estarán disponibles en la
Versión 2.2 para WIN32 + DOS32.
- flush() forzará el contenido
del búfer de memoria hacia un archivo o un dispositivo.
- chdir() cambiará a un
nuevo directorio actual y le permitirá saber si la operación
fue correcta.
- put_screen_char() escribirá
un caracter y sus atributos (colores, etc.) a la pantalla.
- get_screen_char() leerá
un caracter y sus atributos desde la pantalla.
- Se hicieron mejoras menores a ed y search.
- Se solucionó un problema de portabilidad en how2reg.ex.
- Se comprimió mejor a exu. Ahora es realmente un poco
más pequeño, aunque se le agregó funcionalidad.
Versión 2.2 Edición
Alfa de pruebas para Linux, 24 de Agosto de 1999:
Muchas de estas funcionalidades y corrección
de errores estarán disponibles también en la versión
2.2 para WIN32
+ DOS32.
- La documentación se actualizó para incluir información
específica de Linux para
las rutinas de la biblioteca y Euphoria en general.
- El modo de
Trazado en xterm ahora detecta las teclas F1/F2.
- time() ahora informa la hora
la del CPU.
- search, guru
y cdguru ahora ponen su salida en
el directorio $HOME en lugar del actual.
- #! quedó restringido a la primera línea de un
archivo.
-
Todas las plataformas: En ed,
los comandos Esc-N, Esc-D, Esc-F y Esc-R
mostrarán inmediatamente su última elección.
Puede presionar flecha hacia arriba/fecha hacia abajo para
ver otras opciones, o limpiar la elección. Si usted comienza
a escribir sin corregir, limpiará la opción y tomará
su nueva entrada.
-
free_console()
fijará los parámetros de la terminal de nuevo a normal.
Normalmente, al funcionar un programa Euphoria, los parámetros
se fijan en la manera que curses los desea y se fijan de nuevo
a normal cuando el programa termina. Si su programa necesita terminar
de una manera extraña (con excepción de llamar a abort()),
se debería llamar primero a free_console().
Versión 2.2 Edición
pre-Alfa #4 para Linux, 15 de Julio de 1999:
- Si su programa no emite nada en la ventana xterm, exu
no mostrará el mensaje "Presione Enter".
-
Todas las plataformas: ed
ahora le permite recordar los comandos anteriores, usando flecha
hacia arriba y flecha hacia abajo, similar a doskey
en DOS y a shell
history en Linux.
Esto funciona con cualquier cadena que escriba para Esc-N (nuevo
archivo), Esc-D (comando de Linux),
Esc-F (encontrar cadena) o Esc-R (reemplazar cadena).Además,
ahora puede usar las teclas de flecha, Inicio, Fin,
Supr, etc. para editar cadenas antes de presionar Enter.
Versión 2.2 Edición
pre-Alfa #3 para Linux, 8 de Julio de 1999:
- ed: El comando Esc-H mostrará
los archivos de ayuda de Euphoria. Esto se cortó en pre-alpha#2.
-
ed: Las teclas
F1, F2, F3, F4, Inicio, Fin,
y Supr ahora funcionan en xterm (bajo Red Hat 5.2 al
menos). Las otras teclas F ya estaban funcionando. Re Pag/Av Pag
y algunas otras teclas no funcionarán todavía - considérese
libre de agregar sus propias teclas "alternativas".
- exu es aún más
pequeño - solo 82K.
Versión 2.2 Edición
pre-Alfa #2 para Linux, 6 de Julio de 1999:
- Se enlazó estáticamente la librería ncurses
en exu.
- exu es ahora un ejecutable comprimido
(97K).
- error corregido: ed
ahora puede editar archivos cuyo nombre está en mayúsculas.
- Se quitó la demora de una fracción de segundo al presionar
la tecla Esc en ed.
Versión 2.2 Edición
pre-Alfa #1 para Linux, 1 de Julio de 1999:
- Se liberó la primera versión de Euphoria para Linux.
Versión 2.1 Edición
Oficial para WIN32 + DOS32, 29 de Marzo de 1999:
-
Se optimizaron las actualizaciones de la pantalla
de trazado. Se eliminaron los
refrescos innecesarios del código fuente y de las variables
a la pantalla. Cuando un refresco es necesario, ahora es ligeramente
más veloz. Esto hace una notable diferencia en exw.exe,
y también en ex.exe en
los modos de gráficos de píxel.
Para ex.exe en los modos
de texto, reduce el parpadeo de la pantalla levemente.
- Se agregó una verificación de error adicional a unregister_block()
en safe.e. Gracias a David Guy.
Versión 2.1 Edición
Beta, 5 de Marzo de 1999:
- Se aceleraron un 5% get() y value().
Gracias a Gabriel Boehme.
- Se hizo a exw.exe menos propenso
a colgarse misteriosamente cuando lo ataca un virus.
-
sanity.ex verifica
su instalación de Euphoria. Se le avisará si las variables
PATH o EUDIR no existen, o si sus archivos ex.exe,
exw.exe, pdex.exe,
o pdexw.exe están dañados
o incorrectamente instalados en euphoria\bin.
- La seguridad de los programas bound
y scrambled se ajustó un
poco más. Gracias a Rusty Davis.
-
Para ahorrar espacio en euphor21.zip, el
programa de instalación
genera los archivos HTML y DOC desde una fuente común,
usando el generador de documentación
de Junko Miura. En el proceso, se borra el generador, pero puede descargarlo
desde el sitio de RDS.
- El código de demo\win32\winwire.exw
se aclaró considerablemente.
Versión 2.1 Edición
Alfa de pruebas, 15 de Enero de 1999:
-
Hemos hecho algunos cambios en el embalaje, precios
e incentivas de registración para el producto Euphoria:
-
Todos los archivos de inclusión útiles
de terceras partes, como Win32Lib.ew y algunos otros, estarán
"estampados" por RDS con un número de código
que los hace libres,
igual que los archivos en euphoria\include.
Ellos no sumarán a su sentencia de conteo, con tal que
usted no los modifique perceptiblemente. Esto permitirá
también a desarrolladores de terceras partes obtengan una
información de diagnóstico mejor de sus usuarios.
-
Se agregaron los operadores de asignación
abreviados += -= *=
/= &= . Por ejemplo, en lugar de decir:
count = count + 1
Ahora puede decir:
count += 1
En lugar de decir:
matrix[row][column] = matrix[row][column] * 5.0
Ahora puede decir:
matrix[row][column] *= 5.0
En lugar de decir:
test_scores[start..finish] = test_scores[start..finish] / 100
Ahora puede decir:
test_scores[start..finish] /= 100
Ver más detalles en refman.doc.
-
Euphoria usa ahora la evaluación de "corto-circuito"
de expresiones and y or
en condiciones if/elsif/while. Por
ejemplo, en una condición
and:
if A and B then ...
el intérprete salteará la evaluación de la expresión
B toda vez que la expresión A sea 0 (falso), puesto que sabe
que el resultado total tiene que ser falso. En una condición
or:
while A or B do ...
el intérprete salteará la evaluación de la expresión
B toda vez que la expresión A sea no nula (verdadero), ya que
sabe que el resultado total tiene que ser verdadero.
El código de Euphoria escrito antes de la
versión 2.1 puede no funcionar correctamente si la expresión
B contiene una función con efectos secundarios
tales como fijar una variable global, usar E/S, etc. Esta clase de
código es en la práctica muy rara, pero en caso de ocurrir,
ahora una advertencia se emitirá si una función con
efectos secundarios puede cortocircuitarse.
Al saltear la evaluación de B, la evaluación
de cortocircuito es típicamente más rápida, y
permitirá escribir sentencias como:
if atom(x) or length(x)=1 then ...
que generaría un error en las versiones más viejas de
Euphoria siempre que x fuera un atom,
puesto que el length()
no se define para átomos.
Ver más detalles en refman.doc.
- Se agregaron varias nuevas rutinas.
Incorporadas a ex.exe/exw.exe:
|
|
|
|
|
profile() |
- |
activa/desactiva el análisis
de perfiles, por lo que puede apuntar la ejecución
de profile y profile_time
en eventos en particular dentro del programa. |
|
system_exec() |
- |
el devuelve el código de salida
de la llamada de un archivo .exe o .com, u otro
programa Euphoria. |
|
equal() |
- |
compara por igualdad 2 objetos Euphoria. Es equivalente a: compare(a,b)
= 0 pero más legible. |
Agregadas a varios archivos de inclusión:
|
|
|
|
|
walk_dir() |
- |
viaja recursivamente a través de
un directorio y sus subdirectorios, ejecutando la rutina que
se le suministra. |
|
reverse() |
- |
devuelve una secuencia en orden inverso. |
|
sprint() |
- |
devuelve la representación de cadena de un objeto Euphoria. |
|
arcsin() |
- |
función trigonométrica inversa. |
|
arccos() |
- |
función trigonométrica inversa. |
|
get_bytes() |
- |
devuelve los siguientes 'n' bytes desde un archivo. |
|
prompt_number() |
- |
pide al usuario ingresar un número. |
|
prompt_string() |
- |
pide al usuario ingresar una cadena. |
|
instance() |
- |
WIN32: devuelve el handle
de instancia de un programa. |
|
PI |
- |
se agregó la constante PI - 3.14159... a misc.e. |
Ver más detalles en library.doc.
-
Ahora se puede ver la documentación principal
de Euphoria con el navegador de Internet. Los archivos de texto plano
refman.doc y library.doc
aún están en el subdirectorio doc,
pero ahora tenemos refman.htm
y library.htm en el nuevo subdirectorio
html. Desarrollamos una herramienta
(escrita en Euphoria) que nos permite fácilmente mantener actualizadas
las versiones HTML y de texto plano de refman
y library.
- Se agrandó y clarificó la documentación en varias
partes.
-
WIN32: se pueden
crear una cantidad ilimitada
de rutinas call-back en Euphoria, mientras cada rutina es una función
con 0 a 8 parámetros. Ver
platform.doc. En la vesión 2.0 usted podría
solamente tener una rutina call-back que tenía que tener exactamente
4 parámetros.
- Se agregó la palabra clave xor
para complementar a: and/or/not
y xor_bits(), por ejemplo:
if a xor b then...
xor también trabaja con secuencias.
Es similar a or.
-
La rutina de librería dir(path)
ahora soporta oficialmente el uso de comodines * y ?
en la ruta que se le suministra. Esta característica estaba
siempre disponible, pero no fue documentada hasta este momento. Por
ejemplo:
info = dir("mydata\\*.d?t")
-
optimización:
se redujo en un 30% en promedio, el consumo de recursos en la subrutina
call+return. El incremento de velocidad ocurre para todas las llamadas
normales a funciones/procedimientos/tipos, verificaciones de tipos
definidas por el usuario, llamadas a call_proc()/call_func()
usando routine id, y call-backs
de Windows. Solamente las llamadas recursivas tienen el mismo consumo
que antes. Los programas con una razonablemente alta tasa de llamadas,
pueden ser un 10% más rápidos debido a esto.
-
optimización:
Se implementó la rectificación
de saltos. El compilador optimizará los saltos en el código
interno tal como un salto de A->B, donde la posición B contiene
un salto a la posición C, se optimizará directamente
como un salto de A->C. Aún algo como A->B->C->D se puede rectificar
a A->D. Esto ocurre a menudo en los ciclos while que contienen sentencias
if.
-
optimización:
get() y value()
son mucho más rápidos gracias a Jiri Babor y algunas
otras optimizaciones de RDS. La nueva v2.1 de ex.exe
con el nuevo get.e v2.1 es:
1.45 veces más rápido leer una secuencia
de números de punto flotante desde un archivo y
2.25 veces más rápido cuando se lee una secuencia
de enteros desde un archivo.
-
optimización:
power(x,2) se convierte internamente
a x*x, que es mucho más rápido en todos los casos, especialmente
cuando x es un entero grande o un número de punto flotante.
- optimización: Gracias
a Jiri Babor, int_to_bits() es un
15% más rápido en la mayoría de los casos.
- optimización: draw_line()
aumentó su velocidad un poco.
-
Language War
ha tenido una cirugía estética importante. Ahora corre
en el modo 18 de gráficos de píxel
(640 x 480 x 16 colores) en lugar de modo
de texto. También tiene paralelismo de grano
fino, es decir, virtualmente cualquier cosa puede
ocurrir en paralelo a cualquier otra. Se pueden dibujar simultáneamente
varios torpedos, fasores, etc., mientras las naves se mueven, se ingresan
comandos, hay cosas explotando, etc. Incluso la sincronización
necesaria para los efectos sonoros del altavoz de la PC es manejada
por el planificador de tareas. No
se ejecutan ciclos de demora durante el juego. La exploración
de la galaxia ahora muestra una imagen a escala de la galaxia completa,
en lugar que solamente un grupo de números.
-
El formato de impresión por defecto para
átomos se cambió de "%g" a "%.10g". print(),
?, la utilidad trace,
y los volcados en ex.err usan
este formato. Esto permite que los enteros grandes de -9,999,999,999
a +9,999,999,999 se impriman como enteros, en lugar de usar notación
científica. También aporta 10 dígitos de exactitud,
en lugar de 6, al mostrar números fraccionarios. Art Adamson
y otros dejaron claro que se tenían que mostrar más
dígitos.
-
El estado de todos los parámetros with/without
se guarda al comienzo de un archivo de inclusión, y
se recupera al final de un archivo de inclusión. Un
archivo de inclusión puede cambiar los parámetros, pero
se restablecerán al terminar el archivo. Por ejemplo, las advertencias
se tienen que desactivar dentro de un archivo de inclusión
(y dentro de todos los archivos que incluya). Consecuentemente algunos
programas ahora muestran advertencias donde antes no se mostraban.
-
Las advertencias se muestran ahora después
que su programa termina la ejecución, por lo que no serán
borradas por clear_screen(),
graphics_mode(), etc.
Consecuentemente algunos programas ahora muestran advertencias donde
antes no se mostraban.
-
La seguridad del código encriptado y del
código enlazado se mejoró gracias a las ideas aportadas
por Rusty Davis. Cuando un programa enlazado inicia la ejecución,
se realiza una verificación rápida de su integridad
para detectar cualquier daño o violación. Aún
se pueden agregar datos al final de un archivo .exe
enlazado, mientras que su última
línea es abort(x).
- El editor ed le permite ahora
ver y editar más allá de la columna 80.
-
Se mejoró safe.e
(versión de depuración de machine.e).
Ahora capturará automáticamente los casos adicionales
donde los datos se escriben ilegalmente momentos antes,
o enseguida después, de los límites
de un bloque asignado de la memoria. Esto puede ser particularmente
útil en WIN32 donde Windows
pudo sobreescribir uno de sus bloques de tamaño insuficiente.
Sin una herramienta tal como safe.e,
este tipo de error podría tomar horas o aún días
encontrarlo.
- Se creó el directorio euphoria\tutorial
para mantener varios programas tutoriales pequeños.
-
El límite en la cantidad de archivos abiertos
se elevó de 15 a 25. Tres de esos archivos son 0,1,2: entrada
estándar, salida estándar y error estándar, por
lo que ahora tiene hasta 22 archivos propios abiertos simultáneamente
(por lo que sabemos, nadie excedió nunca el viejo límite,
pero parecía sabio elevarlo).
-
Cuando el usuario simplemente escribe ex
o exw y se le pregunta el nombre
del archivo Euphoria .ex o .exw a ejecutar, command_line()
ahora se actualizará para incluir como segundo argumento de
la línea de comandos, el nombre del archivo, como si el usuario
hubiera escrito originalmente: ex <nombre de archivo>.
Gracias a Mathew Hounsell por sugerir esto.
- mset.ex ahora guarda imágenes
en formato .bmp. Antes usaba un formato comprimido no estándar.
-
lines.ex (lines.bat)
ahora informa también las líneas no-en-blanco/sin-comentarios.
Esto no es lo mismo que
la "sentencia de conteo" usada por Euphoria para el límite
del diagnóstico, pero está generalmente dentro del +/-
10%, asumiendo que usted escribe una sentencia por línea.
Versión 2.0 Edición
Oficial, 25 de Marzo de 1998:
-
Cambió el procedimiento de instalación.
El archivo Euphoria .zip contiene un gran archivo bundle.dat
que contiene más de 100 archivos. Esto hace más sencillo
de localizar los archivos importantes: readme.doc,
install.bat, etc. que se deberían
ver antes de realizar la instalación. Como resultado, el archivo
.zip es 35K más pequeño.
- shroud le avisará que
use bind/bindw si intenta crear
un archivo fuente encriptado con la extensión ".exe".
Versión 2.0 (Beta),
26 de Febrero de 1998:
-
El intérprete de WIN32, exw.exe,
es ahora un verdadero programa
WIN32 GUI. En la versión 2.0 Alpha era un programa
WIN32 de consola
que siempre estaba asociado con una consola o ventana
DOS. Ahora se creará una ventana de consola de estilo DOS,
solamente si su programa necesita una.exw
creará automáticamente una nueva ventana de consola
la primera vez que su programa escriba en pantalla , lea desde el
teclado. o llame a cualquier rutina de librería que necesite
una consola para funcionar. La consola desaparecerá automáticamente
al teminar la ejecución del programa.
- Una nueva rutina de librería, free_console(),
borrará inmediatamente la ventana de consola si existe una.
-
exw.exe (beta)
corre de 10% a 15% más rápido que exw.exe
(alpha) (basado en sieve.ex,
shell.ex, etc.). El compilador
WATCOM C estaba haciendo mal el trabajo de optimización de
una sección crítica del intérprete cuando generaba
exw.exe, pero producía
un código excelente al generar ex.exe.
Con algunos cambios triviales en el código del intérprete
de C, WATCOM produce código excelente para ambas plataformas.
- Se eliminó el límite en el tamaño de un procedimiento
simple, función o tipo.
- Se eliminó el límite en el tamaño de una sentencia
simple de alto nivel.
- Se incrementó de 150 a 256 la cantidad total de archivos de
inclusión que un programa puede tener.
- Se agregaron algunas optimizaciones.
Las siguientes nuevas formas de expresiones son más rápidas:
2 * x
x * 2
1 + x
donde 'x' puede ser cualquier expresión de tipo átomo
o secuencia.
-
Si llama una rutina de C usando c_func(),
pero la enlaza usando define_c_proc(),
obtendrá un mensaje de error. Similarmente, si la llama usando
c_proc(), pero la enlazó
usando define_c_func() obtendrá
un mensaje de error. Esta restricción estaba documentada, pero
no realmente obligada a cumplirse en Alfa 2.0. Algunos programas escritos
para la versión Alfa tendrán que ser corregidos.
-
Ahora verá el nombre real de la rutina
C o Euphoria a la que está intentando llamar, al obtener un
mensaje de error desde call_proc(),
call_func(), c_proc(),
o c_func().
- Ya no es más posible trazar
o analizar código encriptado.
- Se agregó un nuevo programa de demostración (hash.ex)
a euphoria\demo.
- Se movió freq.ex de euphoria\bin
a euphoria\demo y se lo renombró
como tree.ex.
- El archivo overview.doc da un
vistazo rápido a todos los archivos de documentación.
Versión 2.0 Edición
Alfa, 5 de Noviembre de 1997:
- Nuevos archivos de inclusión:
|
safe.e |
- |
versión de depuración de machine.e |
|
misc.e |
- |
misceláneas |
|
dll.e |
- |
acceso a dll's |
|
msgbox.e |
- |
Caja de mensajes de Windows |
- Se hicieron las siguientes mejoras en la versión DOS32:
- La ventana de trazado se
actualiza más rápido.
- El análisis de prfiles por tiempo
es más exacto regarding getc().
- El demo mset.ex corre un
30% más rápido.
Items Destacados de Antiguas Ediciones
Versión 1.5a,
13 de Junio de 1997:
- Se optimizan muchas operaciones y rutinas de librería.
- get_key() es 100 veces más
rápida que cuando no hay una clave en el búfer.
- get_all_palette() es casi
100 veces más rápida, lo que hace a save_screen()
mucho más rápida.
-
Se han incorporado las siguientes rutinas
directamente en ex.exe, para
evitar el consumo de recursos llamando a machine_proc()
o machine_func(): pixel(),
get_pixel(), mem_set(),
mem_copy().
- poke() de una secuencia larga
en memoria, other than video memory, es un 50% más rápida.
- pixel() es 4 veces más
rápida en modo 19.
- get_pixel() es más
rápida en todos los modos.
- display_image() es alrededor
30% más rápida en la mayoría de los modos y
hasta 4 veces más rápida en modo 19 debido a que pixel()
es más veloz.
- Todas las operaciones aritméticas y de bits aplicadas a
secuencias de enteros son un 29% más rápidas.
-
a & b
(concatenación) es un 15% más rápida en la
mayoría de los casos, y drásticamente más
rápida en el caso en que una secuencia muy grande crece
debido a la concatenación de muchas pequeñas.
- getc() es un 12% más
rápida.
- match() es un 8% más
rápida en casos típicos.
- append()/prepend() son un
15% más rápidas en la mayoría de los casos.
- find() de un entero dentro
de una secuencia de enteros es un 64% más rápida.
- La formación de una secuencia de dos elementos {a,b}
es un 11% más rápida.
-
El copiado interno de una secuencia compartida
cuando ya no se puede compartir es un 15% más rápido.
Versión 1.5,
21 de Marzo de 1997:
Versión 1.4b,
Octubre de 1996:
- mset.ex tiene una caja de selección
más visible en su grilla. También tiene más velocidad.
Versión 1.4a,
Julio de 1996:
- Se agrega la rutina de librería crash_message().
- shroud.bat tiene una nueva opción:
-full_keywords.
Versión 1.4,
Mayo de 1996:
- Ahora se puede convertir cualquier programa Euphoria en un archivo
ejecutable_autónomo.exe.
- Se elimina el archivo de expansión del DOS,
DOS4GW.EXE.
- Soporte para los nombres largos de Windows 95.
- Soporte para interrupciones de software en DOS.
- Nuevos programas utilitarios: key.ex,
where.ex, ascii.ex,
guru.ex.
- Nuevo programa de demostración: dosint.ex.
- Nuevas rutinas de librería: set_rand(),
use_vesa().
- Se pueden usar peek()
y poke() con secuencias
enteras de bytes.
- Reducción en el consumo de recursos en las secuencias.
Versión 1.3,
Junio de
1995:
- Ahora se pueden editar varios archivos, usando varias ventanas de
edición.
- Se agregan 20 nuevas rutinas de librería.
- Se mejorán sustancialmente las prestaciones gráficas.
Versión 1.2,
Marzo de 1994:
- Se elimina un problema que impide a Euphoria correr en DOS
bajo Windows.
Versión 1.1,
Enero de 1994:
- Se agregan varias características al lenguaje y programas de
demostración.
Versión 1.0,
Julio de 1993:
-
Euphoria fue lanzado, luego de tres años
de investigación y desarrollo y seis meses de pruebas Beta.
Muchas de las ideas detrás de Euphoria vienen de la Tesis de
Maestría en Ciencias de la Computación de Robert Craig
de la Universidad de Toronto. Aquella tesis estaba muy influenciada
por el trabajo de John Backus sobre lenguajes de programación
funcional.
|