2010/10/13 Guillermo Schwarz <[email protected]> > Hola Mariano, > > ¿La idea es hacer que los objetos "transparentemente" sean remoteados? > > Si, mas o menos.
> No imagino un caso de uso que realmente requiera eso, yo :) Yo quiero poder detectar objetos que no están siendo usados (aunque referenciados y por eso el GC no se los lleva), reemplazarlos por un proxy y swapearlos a disco. En caso de que se necesiten, automaticamente se traen a memoria. > sin mencionar que > el paper que alguien publicó en el mismo thread de alguien de Sun que > dice explícitamente que el sistema se vuelve lento y poco confiable. > > Por algo los EJBs sólo publican servicios stateless. No tiene sentido > hacerlo stateful para que luego el servidor se caiga y que pierdas lo > que estabas haciendo. > > Por otro lado con los EJBs todo es trivial: El remoting, la > serialización, etc. > > La serialización en Smalltalk estaba resuelta el año 1994, cuando conocí > Smalltalk. Ahora parece que en Pharo no, pero al menos en GNU Smalltalk > sí: > > http://forum.world.st/ObjectDumper-example-td1293043.html#a1293043 > > Ahh si. Esto en algún momento lo había anotado para mirar pero me olvidé. Gracias por el recordatorio. Lo voy a mirar. > Saludos. > Guillermo. > > On Wed, 2010-10-13 at 00:30 +0200, Mariano Martinez Peck wrote: > > Hola angel. Quiero opinar sobre 2 cosas que estoy laburando en mi PhD > > y están bastante relacionados. Proxies y serializacion. Uno cree que > > son faciles, pero ninguno de los dos es asi. > > > > Problemas con proxies: > > > > - Acordate que en ST todo son objetos. Por lo tanto el objeto que vas > > a convertir en proxy, puede ser cualquier cosa: Clases, > > CompiledMethods, Closures, etc. > > > > - Cuando en ST nos quedamos sin Object Table, el #become ES LENTO. Se > > tiene que traversar todos los objetos de la memoria. Por esto en > > Gemstome el become anda mas rapido (tienen object table) > > > > - Trataste de hacer un unaClase become: MyProxy new ? Cuando luego le > > mandas un mensaje a una instancia de unaClase, se rompe todo. > > Principalmente porque el proxy es un objeto no una clase (obviemos el > > detalle que una clase es un objeto), y la VM para acceder al MethoDict > > accede DIRECTAMENTE al offset the las variables. O sea, asume que la > > clase tiene X cantidad de variables y que el methodDIct esta en la > > posicion X. > > > > - Muchas veces el doesNotUnderstand: no es suficiente. En varios casos > > podes usar el hack de poner el methodDict en nil, e implementar > > #cannotInterpret: en la superclase. > > > > - Lo mismo para los CompiledMethod. Poner un proxy no es igual que > > para todo el mundo. Tenes que implementar #run:with:in: y algunos > > otros mensajes mas. > > > > - Hay un montón de mensajes que no van como un bytecode send comun, > > sino con bytecodes especiales. Por lo tanto el dnu o cannotInterpret: > > pueden ni llamarse. Evalua "ProtoObject class" y vas a que anda..sin > > embargo ProtoObject no implementa #class. Y asi como #class hay varios > > bytecodes speciales que te cagan. Mira Smalltalk specialSelectors. > > > > - Tenes que tener mucho cuidado a lo que becomeas con un proxy. Podes > > romper todo muy facil. Hay cosas core que no se pueden reemplazar. > > > > - Debugear es muy dificil porque el mismo debugger manda mensajes para > > imprimirlos o cosas asi entonces te los vuelve a traer jjajajaj > > > > - Si un objecto X tiene como instancia una refencia a un objeto Y, y > > haces un become de X a un proxy, el proxy no va a apuntar a Y. POr lo > > tanto, si nadie mas estaba apuntando a Y, el GC te llevó a Y. > > ImageSegments soluciona esto de una manera muy buena. > > > > > > > > Respecto a Serializacion: > > > > - Es muy dificil hacer un serializador que sea rapido. Acá en mi lab > > están haciendo una implementación parecida a Parcels (de VW) y está > > andando bien. Pero hay que tener en cuenta un monton de problemas: > > > > - Ciclos en el subgrafo > > > > - CompiledMethod, ContextPart (y subclases), Process, Continuations, > > etc etc son dificilies de serializar > > > > - endianess (big or blah) > > > > - que haces con nil, true, false, etc? y Symbol ? A la hora de > > cargarlo en la misma image o en otra, no podes crear duplicados, y los > > objetos tienen que apuntar a los ya existentes. Tambien tenes que > > hacer un rehash de los sets cuando los traes nuevamente. etc......etc > > etc. > > > > > > Bueno, eso nomas. Muchas veces las cosas parecen más faciles no? > > > > saludos > > > > Mariano > > > > > > 2010/10/11 Angel Java Lopez <[email protected]> > > Hola gente! > > > > Interesante la discusion del Thread "Blog", pero tambien algo > > se fue por las ramas... Cambio de titulo en este mensaje. > > > > Estuve agregando objetos distribuidos a mi pet project [1], > > quedo algo asi: > > > > http://pastie.org/1213856 > > > > Tengan encuenta que no tengo libreria de clases de base, asi > > que tengo que comenzar desde nil subclass:... ';-) > > > > Puedo: > > > > - Levantar un servidor (tecnologia Remoting .NET), en nodo A. > > - Levantar un cliente remoto a ese servidor, en nodo B. > > - Definir una clase en nodo B. > > - Exportar su definicion de B a nodo A. > > - Ejecutar desde nodo B algo en nodo A. > > - Evaluar en nodo A y devolver el objeto serializado > > (contemplando grafos con ciclos, repeticion de objetos, etc..) > > a B. > > > > Me falta evaluar en nodo A y que el resultado quede en A, > > viajando a B una especie de proxy, de tal manera que invocando > > a ese objeto en B, se ejecute el mensaje en nodo A. > > > > Mi idea es que si B devuelve un objeto a A, ese resultado > > viaja completo. Sino, definiria algo como > > > > ^host asProxy: result. > > > > Tendria que escribir post, pero por ahora, tengo esto para > > mostrar. > > > > [1] http://code.google.com/p/ajtalk > > > > Nos leemos! > > > > Angel "Java" Lopez > > http://www.ajlopez.com > > http://twitter.com/ajlopez > > > > > > > > > > > > -- > > To post to this group, send email to > > [email protected] > > To unsubscribe from this group, send email to clubSmalltalk > > [email protected] > > > > http://www.clubSmalltalk.org > > > > > > > > -- > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to clubSmalltalk > > [email protected] > > > > http://www.clubSmalltalk.org > > -- > Simplex Veri Sigillum > > -- > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<clubsmalltalk%[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
