Zero

Zero
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).