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.