Ahora entiendo tu punto. Respecto a la solucion que nosotros le dimos en Sqnos, acoto simplemente que creo que se podria llegar a una prueba formal del correcto funcionamiento ya que el procesador te asegura que siempre que intentes modificar el objeto mientras se esta ejecutando este no lo va a permitir. Aqui hay un hibrido interesante entre imagen y la herramienta que te asegura la correctitud. Igual despues habria que ver que pasa con los buffers donde haces el copy antes de volver a dejar la pagina como escribible y puede que aca si aparescan cuestiones como las que mencionas y una demostracion formal sea mas compleja...
Ya que nombraste Newspeak como posible solucion a alguno de los problemas...NewspeakNos no? jeje Saludos, Guido. El 24 de junio de 2011 19:45, Andres Valloud <[email protected]>escribió: > > 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 > -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
