Gracias a Ricardo Linero Torres, he comprobado el sistema de persistencia solucionando un par de molestos bugs.
Uno de ellos hacía que no todos los objetos de grabaran en un vector (a no ser que uno de ellos fuera un primitivo).
El segundo hacía que la máquina reventara en ciertas situaciones en las que tenía que recuperarse de errores en el almacenamiento persistente (como en Windows 2000 o XP, donde los directorios pueden tener permisos distintos del que ejecuta el proceso).
Ahora la máquina es mucho más estable.
Investigación en el paradigma de orientación a objetos basada en prototipos, y persistencia.
23 noviembre 2006
11 octubre 2006
Prowl
El último trabajo desde Abril ha consistido en mejorar el compilador Prowl. El propósito inicial era mejorar la persistencia en la máquina virtual, si bien al querer compilar varios ejemplos me he dado cuenta de que el compilador estaba generando código incorrecto en situaciones muy comunes.
Por ejemplo, para la siguiente instrucción (un mensaje):
debía generar:
y estaba generando:
O, peor todavía:
generaba:
cuando debía generar:
Ahora, sí, empieza el trabajo de pulido del soporte de persistencia en la máquina virtual.
Por ejemplo, para la siguiente instrucción (un mensaje):
miVector.process( DisplayByConsoleProcessor );
debía generar:
SET DisplayByConsoleProcessor
MSG miVector process __acc
y estaba generando:
MSG miVector process DisplayByConsoleProcessor
O, peor todavía:
System.console.write( psRoot.Exe.A );
generaba:
MSG psRoot.Exe A
MSG System.console write __acc
cuando debía generar:
SET psRoot.Exe.A
MSG System.console write __acc
Ahora, sí, empieza el trabajo de pulido del soporte de persistencia en la máquina virtual.
17 abril 2006
Screencasts, demostraciones animadas
He subido un par de demostraciones (screencasts) a la web de Zero, con el uso de Prowl, a la vez que he puesto algunos ejemplos también hechos con Prowl.
Web de Zero
Web de Zero
28 marzo 2006
Nuevo tutorial
He subido a la web un nuevo tutorial sobre la utilización de Visual Zero, en este caso sobre cómo utilizar persistencia con él.
27 marzo 2006
Documentación sobre el lenguaje Prowl
La página web ha sido actualizada con documentación sobre el lenguaje de alto nivel Prowl.
Este lenguaje es muy parecido en cuanto a sintaxis de definición de objetos al macroensamlabdor, si bien el cuerpo de los métodos soporta una sintaxis más parecida a C, en cuanto a bucles, if's ... etc.
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero
Este lenguaje es muy parecido en cuanto a sintaxis de definición de objetos al macroensamlabdor, si bien el cuerpo de los métodos soporta una sintaxis más parecida a C, en cuanto a bucles, if's ... etc.
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero
22 marzo 2006
Nueva documentación
Hay nueva documentación en la página web sobre Zero, esta vez explicando los mecanismos de persistencia de esta máquina virtual.
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero/
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero/
20 marzo 2006
Zero v3.0 publicado
La versión 3.0 de la máquina virtual ha sido publicada, finalmente, incorporando varias características comentadas aquí:
- soporte de reflexión estructural
- persistencia transparente
- Visual Zero mejorado ampliamente; también traducido al inglés
- Lenguaje de programación prowl liberado para el uso con Zero MV ... ¡por fin un lenguaje de alto nivel para la Zero!
Muchas de estas características han sido publicadas en el blog, si bien, poco a poco, empezaré a incluir documentación más adecuada en la página web.
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero
- soporte de reflexión estructural
- persistencia transparente
- Visual Zero mejorado ampliamente; también traducido al inglés
- Lenguaje de programación prowl liberado para el uso con Zero MV ... ¡por fin un lenguaje de alto nivel para la Zero!
Muchas de estas características han sido publicadas en el blog, si bien, poco a poco, empezaré a incluir documentación más adecuada en la página web.
http://trevinca.ei.uvigo.es/~jgarcia/TO/zero
13 marzo 2006
Visual Zero
La liberación de la nueva versión de Zero se está demorando debido a la mejora y pulido de Visual Zero. Ahora, la aplicación soporta los idiomas inglés y castellano,
Se están preparando diversas publicaciones.
Se están preparando diversas publicaciones.
19 enero 2006
Puliendo el mecanismo de persistencia
Charla en Oviedo
En diciembre impartí una pequeña charla en Oviedo. Las transparencias las he puesto en la web de Zero, en la sección de publicaciones.
Comencé la charla sobre los mecanismos de persistencia disponibles en los lenguajes de programación, desde una perspectiva histórica (¡incluso el PL/I!), hasta centrarme en .net y C# 3.0 (especialmente con LINQ), para, tras repasar los servicios de XML, hablar finalmente de librerías que proporcionan servicios cuasi persistentes, como nHibernate, y especialmente db4Objects(de las que hice sendas demostraciones). Finalmente, hice una demostración de persistencia con la versión de desarrollo de Zero, comparando el coste en esfuerzo por parte del programador con las otras posibilidades.
Puliendo el soporte de persistencia
El trabajo continúa y ahora el mecanismo de persistencia está siendo pulido, en detalles como que contenedores que no han sido modificados no sean guardados por la máquina virtual. Para ello, sólo ha sido necesario extender ligeramente la implementación del patrón observador presente en la arquitectura de la máquina virtual.
Pronto será liberada una nueva versión, que comparada con la anterior, supondrá un salto cualitativo.
En diciembre impartí una pequeña charla en Oviedo. Las transparencias las he puesto en la web de Zero, en la sección de publicaciones.
Comencé la charla sobre los mecanismos de persistencia disponibles en los lenguajes de programación, desde una perspectiva histórica (¡incluso el PL/I!), hasta centrarme en .net y C# 3.0 (especialmente con LINQ), para, tras repasar los servicios de XML, hablar finalmente de librerías que proporcionan servicios cuasi persistentes, como nHibernate, y especialmente db4Objects(de las que hice sendas demostraciones). Finalmente, hice una demostración de persistencia con la versión de desarrollo de Zero, comparando el coste en esfuerzo por parte del programador con las otras posibilidades.
Puliendo el soporte de persistencia
El trabajo continúa y ahora el mecanismo de persistencia está siendo pulido, en detalles como que contenedores que no han sido modificados no sean guardados por la máquina virtual. Para ello, sólo ha sido necesario extender ligeramente la implementación del patrón observador presente en la arquitectura de la máquina virtual.
Pronto será liberada una nueva versión, que comparada con la anterior, supondrá un salto cualitativo.
13 diciembre 2005
Persistencia (y ¡fin!)
Persistencia transparente
El mecanismo de persistencia funciona ya al 100%. Es posible que tenga algún bug, pero el trabajo en sí está hecho.
Trabajar con persistencia es muy, muy sencillo en Zero. Se trata de almacenar los objetos que se desee en un contenedor, y ya está.
Ésto hará que el contenedor disney, que cuelga del contenedor raiz del almacenamiento persistente (psRoot) se guarde con los objetos que contenga. Una vez éste proceso termina, y el contenedor está por tanto guardado en el almacenamiento persistente, es posible recuperarlo mediante la referencia simple, en otro proceso:
... ¡y ya está! ... persistencia cuasi-ortogonal, es decir casi 100% transparente, si no fuese porque hay que elegir el contenedor donde guardar los objetos, pero eso no se considera un problema, sino de hecho, una ventaja sobre el modelo ortogonal puro.
En cuanto a interioridades técnicas, el almacenamiento de contenedores se hace en directorios. Así, el directorio del almacenamiento persistente es ZeroPS y contiene siempre al contenedor raíz.
Los archivos
Este esquema de funcionamiento tiene varias ventajas: el almacenamiento persistente es manipulable, si se compila un objeto y se coloca en uno de los directorios, automáticamente ese objeto será encontrado por la máquina virtual si es referenciado como si siempre hubiera estado allí. Así, el almacenamiento persistente es manejable y no hay por qué tener miedo a una corrupción masiva ni nada por el estilo.
El mecanismo de persistencia funciona ya al 100%. Es posible que tenga algún bug, pero el trabajo en sí está hecho.
Trabajar con persistencia es muy, muy sencillo en Zero. Se trata de almacenar los objetos que se desee en un contenedor, y ya está.
reference disney = Container.createChild( "Disney" )
reference donald = Persona.createChild( "donald" )
reference daisy = Persona.createChild( "daisy" )
donald.ponNombre( "Donald" )
daisy.ponNombre( "Daisy" )
disney.add( donald )
disney.add( daisy )
psRoot.add( disney )
Ésto hará que el contenedor disney, que cuelga del contenedor raiz del almacenamiento persistente (psRoot) se guarde con los objetos que contenga. Una vez éste proceso termina, y el contenedor está por tanto guardado en el almacenamiento persistente, es posible recuperarlo mediante la referencia simple, en otro proceso:
System.console.write( psRoot.Disney.donald.toString() )
... ¡y ya está! ... persistencia cuasi-ortogonal, es decir casi 100% transparente, si no fuese porque hay que elegir el contenedor donde guardar los objetos, pero eso no se considera un problema, sino de hecho, una ventaja sobre el modelo ortogonal puro.
En cuanto a interioridades técnicas, el almacenamiento de contenedores se hace en directorios. Así, el directorio del almacenamiento persistente es ZeroPS y contiene siempre al contenedor raíz.
$ cd ZeroPS
$ dir
Root
Root.zbj
$ cd Root
$ dir
Disney
Disney.zbj
IntStdLib.zbj
Los archivos
*.zbj
son los archivos de objetos Zero, que pueden lógicamente desensamblarse con la herramienta zd
.Este esquema de funcionamiento tiene varias ventajas: el almacenamiento persistente es manipulable, si se compila un objeto y se coloca en uno de los directorios, automáticamente ese objeto será encontrado por la máquina virtual si es referenciado como si siempre hubiera estado allí. Así, el almacenamiento persistente es manejable y no hay por qué tener miedo a una corrupción masiva ni nada por el estilo.
Suscribirse a:
Entradas (Atom)