> Esta fue la idea que surgió charlando con gente en la ultima Smalltalks y a > partir de haber conocido un poco mas sobre garbage collector general y sobre > el gc de la vm de squeak particularmente. Sin embargo, al hacer la prueba y > poner toda la imagen en readonly menos el "eden" vimos que se generaban > pagefaults. Esto nos dio la pauta que habia cosas en la parte freezada que > se estaban modificando y podian generar inconsistencias. Metiendonos un > poquito mas adentro vimos varios casos que hacen que se modifiquen objetos > en el medio del proceso de grabado. En este momento me acuerdo por ejemplo > del gc
Y si, mientras se graba la imagen no podria haber GC, asi que habria que tener mucho cuidado con la manera en que estuviera escrito. Ademas, tampoco se podrian crear referencias a objetos nuevos desde objetos viejos porque entonces habria que cambiar el RT. Debe haber mas de estas. > semaforos internos que generan cambio de contexto en la imagen, etc. Ahh, esto es molesto. Por ejemplo, esta el semaforo de los delays. En VW existe la manera de registrar objetos con la VM. Si quisiera seguir este camino, entonces habria que hacer mas laburo. Basicamente, la imagen tendria que tener modos de ejecucion diferentes donde por ejemplo se pueda decir cosas como "durante este tiempo no hay delays". Esto en VW no seria imposible (ojo que ni ahi estoy diciendo que sea "facil") ya que esta modelado el tema de los subsistemas. Entonces, al grabar la imagen, tendrias que cambiar el modo de ejecucion, grabar, y despues volver al modo "developer". > Con lo cual este camino resulto insatisfactorio, porque era muy complicado > llegar a probar que estos cambios no iban a generar una imagen con > propiedades distintas a la requerida. Y si, este es un problema porque como sabes el codigo que esta en la imagen y que es lo que esta haciendo? Por ejemplo, se puede grabar la imagen mientras el MessageTally esta midiendo al proceso que graba la imagen? A esta clase de cosas iba con lo que dije despues... > En esta parte no te logro seguir del todo. Nuestro desarrollo y los > problemas que surgieron no tuvieron una relacion tan directa con la > metacircularidad. Si, intentamos llevar lo mas posible del lado de la imagen > pero los resultados nos parecen bastante buenos. Por ejemplo, el tener > modelado un administrador de memoria en alto nivel, nos permitio utilizar la > paginacion para implementar copy on write de manera directa y haciendo un > uso intensivo de las herramientas que provee el procesador. Sin embargo el > modelo esta casi completamente hecho en smalltalk. Quiza funciona hoy, pero mañana? Se puede demostrar que este mecanismo funciona en presencia de codigo y objetos arbitrarios en la imagen? Y si no se puede, entonces no conviene que el mecanismo no este en *la misma imagen*? En general eso se pone en la VM, pero tambien podria estar en otra imagen (como dice Guillermo con lo del modo "hypervisor", aunque habria que pensarlo mas --- por ejemplo habria que ir tipo a 1996 y ver que querian hacer los de Digitalk con Firewall --- y desde ya ni siquiera se puede hablar de que esto es un problema simplemente "dificil"). Aca hay un par de problemas mas modestos. El primero es que hay que cambiar identityHash. Eso quiere decir que por ejemplo cambia el lookup de namespaces mientras la imagen sigue corriendo. Como se hace la cirugia de cerebro para que no se rompa todo? Y como se demuestra que es correcto en presencia de codigo y objetos arbitrarios? El segundo es que hay que cambiar el printString de numeros de punto flotante. En particular, hay que cambiar la cantidad de cifras, y las cifras mismas. Fijate lo que pasa si haces algo como esto: Double pi = (Double readFrom: Double pi printString readStream) Da false (!!!). Pero, sin embargo, Double pi printString = (Double readFrom: Double pi printString readStream) printString es true (!!!). Cuantas veces nosotros como programadores hicimos copy paste de un workspace y metimos codigo en el browser con numeros de punto flotante? Bueno, todo eso esta probablemente mal. Y tambien es probable que esten mal todos los archivos con numeros de punto flotante escritos con printString (pero en VW el NumberPrintPolicy tambien esta mal para punto flotante por razones diferentes, y entonces te puede pasar que 1234.5 se imprima como 1234.499993). Pero bueno, mal que mal, los programas y los tests pasan. Que pasa si arreglo los numeros de punto flotante? Cuanto se rompen las cosas, mas alla de que el cambio sea necesario? Es aceptable tener que volver a recompilar ***todo*** el codigo que esta publicado en binario? Y como hacen los usuarios para cargar el codigo nuevo (o el viejo) si, entre otras cosas, voy a cambiar como se interpretan los literals en el codigo? Bueno, todos estos problemas no existirian si la imagen no se estuviera ejecutando mientras se carga el codigo. O si tuvieramos divisiones al estilo Newspeak. Pero... aqui estamos... la esencia del problema es que un ente no se puede observar a si mismo excepto dividiendose en la parte que observa y la parte observada. Meter todo en la imagen hace dificil (y en algunos casos sospecho que imposible) que el sistema reflexione acerca de si mismo, simplemente porque no se puede observar a si mismo con claridad. Andres. -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
