Zero

Zero
Zero

25 septiembre 2009

PROWL compiler for Linux

The PROWL compiler for Linux has shown various strange errors. They are strange because they don't show in Windows, and it has been compiled from the same sources.

The strangest of all of them is that two instructions (messages) as simple as the following ones make the compiler (oddly) complain:


System.console.writeLn( "Hola" );
System.console.lf();


They'll have to be substituted with similar instructions, in which the return value must be stored.


reference retVal;
// ...
retVal = System.console.writeLn( "Hola" );
retVal = System.console.lf();


While it is true that this compilers (prowl and J--) have been excelent for showing Zero's capabilities, they have turned out to be not very stable, thus making the need to replace them in the medium-term.

Compilador de PROWL para Linux

El compilador de PROWL para linux tiene varios errores extraños, puesto que es compilado con los mismos fuentes que el compilador para Windows.

El más raro de todos ellos es que dos instrucciones (mensajes) tan simples como estas provocan error:


System.console.writeLn( "Hola" );
System.console.lf();


Teniendo que ser sustituidas por sentencias similares, pero guardando el valor de retorno.


reference retVal;
// ...
retVal = System.console.writeLn( "Hola" );
retVal = System.console.lf();


Lo cierto es que estos compiladores (prowl y J--), pese a ser excelentes en cuanto a que han demostrado características de Zero, no han resultado ser demasiado estables, lo que supone la necesidad de relevarlos a término medio.

Small correction of the standard library

I've fixed some problems in the standard library (IntStdLib). The source and the compiled files are now corrected in the current pacckages for the 3.2 version of Zero: zero-bin-3.2-xxx.zip

Pequeña corrección de la librería estandar

He corregido algunos problemas en la librería estándar (IntStdLib). Tanto la fuente como el ensamblador modificado están en la web, en los paquetes para Windows y Linux zero-bin-3.2-xxx.zip

30 mayo 2008

Nueva versión de Prowl

El compilador Prowl ha sido mejorado, en cuanto a estabilidad.
La nueva versión es la 1.31, sólo es necesario bajarse los paquetes Prowl-bin-win32-1.3.zip, o Prowl-bin-linux-1.3.zip.

New Prowl version

The Prowl compiler has been a little bit improved, about stability.
The new versión is 1.31, you do only have to download the same Prowl-bin-win32-1.3.zip package, or Prowl-bin-linux-1.3.zip.

06 mayo 2008

New publications

Since another paper about Zero in a valuable journal is about to be published, "Journal of Visual Languages & Computing", I've updated the academic publications page about Zero.

Nuevas publicaciones

A raiz de la próxima publicación de un artículo en una importante revista, "Journal of Visual Languages & Computing", he actualizado la sección de publicaciones académicas sobre Zero.

04 diciembre 2007

Pool of primitive objects in Zero

So far, each primitive object employed (integer, real or string), was created and destroyed on the fly, just for each moment in which it was needed. For example:


x = x.sum( 1 );


That would be translated to:


INT 1
MSG x sum __acc
ASG x


Would make the VM, with INT 1, to create a new integer value (with its corredponding Zero object, and, after the MSG opcode, when the accumulator __acc changed, it would be destroyed.

With these new pools of objects, (integers, floats and strings) are created on the bootstrap of the VM, and (re)used (again and again) under requirement. For example, integers and floating point numbers are created on the beginning, from zero to 20. This technique gives better performance, in general, on any program.

Pool de objetos primitivos en Zero

Hasta ahora, cada objeto primitivo que se empleaba, era creado y destruido al efecto.
Así, una instrucción como:


x = x.sum( 1 );


Que se traduciria como:


INT 1
MSG x sum __acc
ASG x


Provocaría con INT 1 la creación de ese valor numérico entero, y después del mensaje, al pasar a valer __acc (el acumulador), el nuevo valor de x, su destrucción.

Así, con los nuevos pool's de objetos para enteros, flotantes, y cadenas, se crean en el arranque una serie de objetos primitivos predefinidos (en el caso de los enteros y flotantes, del 0 al 20), que son empleados en el lugar de uno nuevo original en caso de que se produzca una situación como la anterior. Ésto hace que no sólo no se cree el objeto en este caso, sino que tampoco se destruya tras ejecutar el opcode MSG, ganando en rendimiento para aquellos casos más habituales (con diferencia, el cero y el uno).